Put on the Spot: Biggest Hack?
Today I had a meet-and-greet with the new client. Not an interview, as I'd already satisfied those curiosities, but just a "meet the team and banter a little bit" ice-breaker. Six new names to remember, with faces to match; a game I know I always lose, but at least they're normal guys with normal-enough names.
Unless I've got that awkward misread and now they think I'm some kind of big loser, it seems like it might be a groovy group to work with. Lots of techno-geek power, and all with more social skills than I have. Well, they all knew each other.
We went around the table a couple times before a little banter about what the gig would be. First introducing ourselves, the company guys laying out what they've been doing there, and me what I've been doing everywhere else...just a touch. The second time around was a "talk about your biggest hack." In a room full of professional software developers, this, of course, means something about hasty or undisciplined software--duct tape programming, if you will.
I had a couple of ideas, but then some "definitions" were put in place as the chatter worked around the table and the guys struggled with what was meant and what to disclose. By the time it got to me, there were things like "nothing malicious" and "not for an assignment" and "not boss apporoved" and "not job driven."
This whittled it down a lot for me, and I kind of got deer-in-headlights stunned trying to choose something full-featured enough, but that wasn't too similar to someone else's either. One of the guys hacked together a network layer for simple xterminal clients, effectively allowing dual-booting Linux and DOS well before that became mainstream; another did some game simulations, including pathing chess pieces moving on every square of the board without repeating any squares; another made a 3D model and animation rendering of what a high-speed cutting machine did when it didn't do what was expected and accidentally cut through a brick of aluminum; another made a program that used the BitTorrent against itself, turning the torrents into their own DDOS attacks. There were six of them, but you get the gist. Some pretty snazzy stuff.
I've made my living out of writing disciplined, maintainable software, and often I'm tasked with fixing it when the software has been otherwise written. I mentioned that and then I tossed out my black-hole e-mail experiment (http://liamon.com) where I dabbled with writing a Sendmail milter in the form of a PERL script that just throws all of the mail into a poorly schemed database, tabulating for each account, which is then delivered by the two or three JSP page completely written with only JSTL tags, which I was also trying to learn at the time. Totally not the way I'd do it, but really the only thing not work-related or duplicated that I could come up with.
I got the cartoon blink-blink from everyone, because it isn't very impressive, so I mentioned also a second-monitor screensaving TSR (terminate and stay resident, an old DOS trick) application I wrote for an old monochrome debugging monitor attached to the mighty 386 I had that would trigger when Windows (then 3.1) had kicked in its screensaver...the screen would randomly make rain drops (first periods then little o then big O and then disappear, all in the same spots, as if expanding, randomly in different spots all over the screen), and when disengaged it would return the screen to the previous condition. That got a couple more "oh, yeah, a little impressive" kind of murmurs.
So, I showed a weak hand and then tried to cover with a second trick. Hopefully no one will hold it against me.
Of course, like any potentially witty moment, one thinks of better remarks on the drive away.
I could have shared that my first consulting job (unpaid) was in the sixth grade when I wrote a little basic application on our time-share teletype for the shop teacher; he wanted to keep track of all of the padlocks and their combinations. Trivial, I simply used the serial number of the padlocks as the BASIC line n withumber with a "print" statement that spewed out some underbars (on which he could pencil-in the student name or other notes) and the combination.
I could have bragged how every morning during homeroom, in a stretch at the end of high school, I would start my day re-writing the same program (I didn't have a floppy to save it). It would eventually end up acting kind of like a radar screen. First I made pixels appear in a circle, later dimming as the circle went around, eventually with a sweeping bar from the center to the circle, and finally "pinging" on "ships" or whatever as it passed the same spot. Every day, starting from power-on, turning off the Apple II when homeroom was over...ten minutes later...also in BASIC.
I could have boasted about the grapic print routine that my pal and I made work on our Commodore 64s that would take the horizontally mapped pixels from a portion of the screen (on which we'd plotted the curves for our math and physics homework--another program we'd written) into the vertically mapped pixels needed by our dot matrix printers so that we could show our work without bringing our computers to work. Essentially, the Commodore 64 would kep track the pixels on the screen in a grid of blocks, eight across, eight down, next block to the right, for it's forty rows across and twenty-five rows down. The printers had 9 or 24 pins down for tousands across, so you can imagine the alignment and scaling issues we had. In order to get the images to be useful on paper, we had to rotate and scale, too, ultimately passing through the same screen elements many times, as fast as the printers could scan across the paper, on our 1MHz machines, in BASIC, but peeking and poking (look it up) directly at memory. Yeah, we were in high school.
Pretty much everything after that is work related...
I could have told of the application that I wrote for the USAF Reserve, in PASCAL, that would intercept the information stream intended for the printer that would spew out reams of paper every day with "updates" of inventory for every airman assigned to the base. Complete inventories, mind you, not daily deltas. The program intercepted and deciphered the printer stream, building inventory information that would then compare to and update (marking deltas) a DBX database which was fronted by a FOXPRO program (not written by me) for review and reporting. This was estimated to save four or five boxes of paper every day. At every base where this was done. I'm sure they don't do that any more.
I could have mentioned video game experiments I did working at Shuffle Master, including a distributed (OK, multiple clients accessing the same database rather than the automatically shared work distributed computing I think of today) simulation that worked through every move in Vegas-rules solitare to see how many hands a person really could win. In the week we dedicated the machines it completed some 47 million hands of solitaire, mapping and counting every fork, and following each outcome from them until stalemate or completion. Each hand resulted in hundreds or millions of possible branches. 47 million hands seems like a lot, but there are 52!/8 (fifty-two factorial divided by eight; because the suits don't matter as much as the colors, so some reduction is allowed if you consider swapping all hearts and diamonds, and then all spades and clubs, and so on for eight direct-swap combinations) shuffled hands for solitaire, or roughly 1.0e67 (yes, one followed by sixty-seven zeroes--about ten thousand trillion trillion trillion trillion trillion trillion). Tricky because it's the only game where you endeavor to use all of the cards, and to the best of our knowledge the actual odds of winning hadn't been calculated due to the derivations involved. (I didn't calculate that number...this guy did, and gives a good concept of how big that number is. http://www.czep.net/weblog/52cards.html)
I could have spun yarns about how I wrote my own RADIUS server when building my ISP because all of the other RADIUS servers available wouldn't integrate my both dial-up equipment and our database server, and therefore couldn't authenticate against user accounts in the registration, billing, and accounting system I'd written for my little company. In the end, we were able to allow self-registration and bill payment on our website, and track our dial-up call activity to the second.
I had a ton of other ideas rip through my head while driving away from the place. Most of them, like these last, are work-related, some boss or job driven. Ultimately, though, very few were what I'd want someone to call "hacks." Most of the work I've done has been with good and clean code, almost all with some level of design up front and consideration for maintenance in the end. Even these few work-age hacks above were job related. And outside of a security class, I haven't done anything, well, too malicious.
I should hope I'd have a few stories since I started writing software in about 1977 (if you count the padlock program). I should have plenty of opportunity to dazzle them with stories of computing conquest.
I guess, as long as I'm not put on the spot.
Sounds a lot less lame than most intro games places come up with but not sure what I would have come up with on the spot. Most of my true “hacks” would have been high-school and college and if you take out malicious that eliminates a lot of my college stuff. My first hack was probably in high school writing a self-rewriting BASIC program on an Apple II (re-wrote itself on floppy). It tabulated surveys and the thing took like 10 hours to run for a couple hundred surveys. To this day I wish I had a copy of that code to see if I could figure out what I was thinking.