tunnel rat posted on June 25, 2007 16:14

Gee, I must have pissed off some CEWPs (Curry Eating Wage Pirates), because the day after I posted my last blog my ISP got hit with a massive DOS attack that shut it down for a few days.

Now, I’m not pointing any fingers, but it wouldn’t surprise me if some CEWPs in Bangalore or some other open sewer of a city in India got together and slammed my ISP’s servers after reading my post. That would be typical of a culture that spent their time and energy developing nuclear weapons instead of fixing their decaying infrastructure that forces men to piss in public urinals in full view of female passerby.

I can’t believe these offshore companies are even trying to recruit American programmers in the U.S. I keep getting calls from thick-accented Indian recruiters with unpronouncable names, wanting me to work on contracts on the other side of the country. And if you mention that maybe working for Indians may not be the best scenario for an America developer, you are met with outright indignation, albeit in broken English. Maybe they are starting to get some push back from American clients who find themselves forced to deal with shoddy programmers who can barely speak English.


And evidently, the Indian diet evidently has caused some issues in the American workplace, as this post from Craiglist’s best shows.

But enough about the CEWPs – I need to wrap up the
TCTSRN thread.

Six weeks into my gig at that non-profit, where I was SAD (Supervisor, Applications Development), I finally had my chance to get rid of Charlie.

We had launched the Online Inquiry App, and it took all of a day for the Senior Business Analyst who gave me the specs and tested the app to figure out that it was broken. Like, major security, HIPAA violations broken. Like, anyone could see confidential patient data which they did not have authorization to see. It had something to do with the hacks buried in the login process. Easy fix, and it would only take a few minutes to correct the issue.

But there was one problem -- I wasn’t around when they found out about the bug.

I was spending the day in Leadership For Results training class with a bunch of ladies, and one or two male middle-managers, doing role-playing games and other worthless exercises dreamed up by HR consultants.

By the time I got back to the fourth floor that afternoon, all hell was breaking lose. Mr. Whiteboard was running around dealing with some other production break, and the analyst filled me in about the nature of the Online Inquiry App problem.

“Did you tell Charlie?” I asked her. As worthless as he was, he could have fixed the bug pretty quickly.

“Yes, I told him this morning.”

“And?”

“I haven’t heard,” she told me before rushing off to put out another fire.

I made my way over to Charlie’s cube. He wasn’t around. Neither were Mr. Coffee, or the TAC. It must be Starbucks time for the Asian developers, I thought.

So I decided to wait in Charlie’s cube. I prepped for an ambush. Lock and load, bitch.

He showed up five minutes later. He looked freaked out when he saw me sitting on his desk.

“Hi Charlie.”

He said nothing as he scurried to his chair. The cube was small and L-shaped, and I was on one end looking over his back as he logged in. I had a good field of fire.

“How are we coming on that production problem?” I asked calmly.

“Wud problem?”

“You know. The Online Inquiry App.” His computer screen opened up, displaying a bunch of code that was part of his “Massive Architectural Framework” that I had told him to stop working on.

“Uh, I dun know. I havend look ad id.” He started shutting down windows on his computer, hiding his work.

“So we have a production break, and you’ve known about it since this morning, and you haven't looked into at all?” I triggered the Claymores and initiated the ambush.

“Huh?”

“What’s the deal? It looks like an easy fix,” I told him.

“Why you giving me heat? I dond do nuding unless you tell me.” He was returning fire.

“Don’t you think this a serious problem?” I was laying down rounds in full-auto.

“I dun know.”

I started putting down some covering fire and securing the perimeter. “How about the server migration project? Where do you stand with that?”

He tried to outflank me. “I still working on dat.” He showed me a half a page of worthless specs.

“That’s all you got?”

“Uh, I don’t think I like this…You giving me heat.” He was withering under the barrage of small arms fire.

I was done bullying him. Yeah, I admit, I corned the little creep and pushed him around a bit. But I wanted to let him know that goofing around and taking leisurely coffee breaks when things were blowing up was not standard operating procedure. He was using my extensive oversight of his work as an excuse to do nothing.

But he was too clever for his own good. I had layed a trap.

Nothing intentional, but I had taken a legitimate production issue and his lack of response to it and used it too my advantage.

I had enough here to pen-fuck Charlie.

I went back to my desk, fixed the code, and rolled it into production. Not like I had to worry about a QA department to test the fix or anything.

With that fire out, I went to the HR portal and found the CAR (Corrective Action Report) form. Six pages of red-tape, but the first step in documenting Charlie’s wayward response to things. I was doing things by the book, just like the HR lady had suggested.

I got set for the next ambush. Charlie’s days were numbered.


Posted in:   Tags:
Tunnel Rat posted on June 8, 2007 16:24

Man, it’s hard to blog consistently. It takes a lot to drag yourself out of bed an hour early everyday and write a few interesting, coherent paragraphs.

But I found myself on some other blogger’s blogroll (Scruffy Looking Cat Herder), and that gave me some newfound inspiration. BTW, that’s a pretty good blog from another passionate developer.

I’m tempted to blog at work, but that is not very smart. For one, my manager has a tendency to walk by my cube and glance at my monitor. Like most middle-age guys, he needs reading glasses, but I think he scan my screen from five feet away and figure out that I not typing code. Secondly, it’s hard to get in the writing groove in a fairly busy office. Finally, the company may be monitoring what I am doing with their computer, although I doubt it. They can barely monitor their own web site and keep it running.

But some things are starting to get my blog juices flowing, so I am covertly typing this text inside what looks like a functional specification document with a bunch of tables and techy mumbo-jumbo. God, I wish I had my own office again.

Now, what I really want to write about is CURRY EATING WAGE PIRATES.

You know -- HI-Bs from India.

Those folks that you can’t understand because they speak and write in broken English.

The ones who make foul smelling food that they eat at their desk.

And write really bad code for a fraction of the price of an American coder.

You know, the foks who always nod in agreement, even though they have no idea what you are saying to them.

The ones that are imported by big companies that claim that they cannot find enough qualified coders in the U.S.

I am surrounded by two of them as I write this. One is really, really obnoxious, so I don’t talk to him. His name is Babo, but I like to think of him as Bababooey.

He talks really fast about technical stuff and makes no sense whatsoever. He’s a blowhard that rolls his r’s. And of course, he makes stinky lunches.

But the worst thing is that he has a habit of sneaking up behind me and reading my screen, and making asinine comments about what I am working on. I guess in his country they are used to looking over your shoulder while you code, probably because the ratio is ten programmers to one computer over there.


“Ah, a VinForms app. You shoood yoooz Vindows Presentation Framework…yada yada yada….”

And you should go back to that shithole sub-continent you came from, Mr. Stink-Boy, I wanted to tell him.

At first I was polite. Now I just ignore him, even when he stands over my shoulder, mumbling about the work I am doing. I act like I can’t hear, or say something like “what, you wanna read my email now?”

Bababooey once tried to suck up to me by sending me PDFs of course material he had copied from an AppDev class. He said he had all sorts of digital manuals, and showed me a ring full of thumb drives that he pulled out of his pocket.

“You vont need do buy any booooks, jus ask me, I have dem.”

I reminded him that we have copyright laws in America. He sneared and mumbled something sarcastic about China.

I sent an email to the AppDev company and said some programmer was peddling their copyrighted material, and it looked like he's in a piracy ring with his H1-B buddies, trading curry recipes, software, and digitized tech manuals. They were not pleased – the courseware runs about a thousand bucks a pop.

And the recent controversy about the Senate immigration bill really has me worked up. The politicians actually want to bring in more Bababooeys to illegally duplicate courseware, write bad code, mumble their way through the day, and nod like retards. They say that there is a shortage of skilled programmers, and the only way to solve the problem is to increase the H1-B quotas.

Bullshit.

If there really was a shortage of developers, I would be making twice what I made 10 years ago, not 60% of that amount. And I’m a free-markets kind of guy, and don’t mind competing in the global workplace. But dirty, nasty, maggot ridden truth about Indian programmers is that they are usually horrible programmers, and for the most part, insular, passive aggressive snakes.

Part of the reason has to do with the caste system. Because of aggressive affirmative action policies inacted by the Indian government, there are a huge amount of "untouchables" that have made their way into Indian software companies. They have a modicum of education, but are severely discriminated against by the Brahmims and other upper-caste members of the society because of their poor communication skills and lack of social graces.

The offshore companies send most of these "Dalits," as they are known, to America so that they won't have to deal with them at home. So, if you find yourself staring at the blank face of a mumbling, dull-eyed H1-B, rest assured that he was not even allowed to sit in the same room with his bosses back home.

I once had a client ask me to do a phone screening of some potential contractors for a project that needed some more bodies. I talked to three, and the most adequate was a man with a pleasant Hindi accent. He was fairly articulate on the phone and answered most of my questions correctly. I recommended him to the client.

The body shop sent someone across country the next day. Needless to say, this was not the same mofo that I had talked to on the phone. This guy could not speak a lick of English. Plus, he was surly, confused, and utterly worthless. It was the old bait-and-switch. My dumbass supervisor told me to get him up to speed on the project and parked his curry-eating ass next to my desk for two weeks.

It was a hopeless cause. The guy could barely read English, much less code. Plus, to add insult to injury, I had to spend so much time getting him to do the simplest things, I missed some of my own deliverables. When the burn rate got to be too much, they let me go with half a day's notice. The firm was obligated to give my Dalit friend two week's notice of termination, so he ended sitting around for a while longer, grimacing, fumbling around with some code, and frowning at everybody else on the project until he was shipped back to New Jersey.

Honestly, has there ever been a successful commercial software product produced by an Indian company? Even the rigid Germans have SAP, but that is understandable because those guys are such great engineers, they found a way to exterminate 12 million poor souls very efficiently. Bastards.

But the Indians have nothing. All they do is send indentured servants to America, where they take up residence in poorly run IT shops. And any IT manager that thinks they are saving money by hiring H1-Bs is fucking idiot.

No, really -- if you are doing that, you are a dumbass. How do you expect to get complex applications written by people who come from a country that still has the plague? Did it ever occur to you that the thick accent that makes it impossible to understand the H1-Bs you filled your shop with also makes it hard on your native programmers, who now have to deal with a language and cultural barrier?

I have a theory. The IT managers who bring these ill-dressed, mumbling buffoons into the country and pay them below-market wages have no clue about programming. To them, tech-speak may as well be Latin. They don’t understand complex programming issues even if they are explained to them by an articulate, patient, American programmer. So it doesn’t matter to them if a musky-smelling H1-B is feeding them a load of geek bullshit. It’s all the same, so why not save a few bucks?

Sorry for jingoistic rant, but the Wall Street Journal’s editorial page said today that we need more foreign computer scientists. Sure, and we also need more editorial writers working out of some Bangalore slum – I am tired of paying so much for that paper. I think a nickel a copy is about the right price, and I am sure all those journalists with degrees from Columbia wouldn’t mind stagnant wages for the rest of their careers.

But H1-Bs are a reality, so I’ll be content to be a festering ball of rage, giving Bababooey the stink eye and relaying my numerous anecdotes about working with his ilk. Trust me, it’s not only their lunch that stinks – it’s their fuckin’ code.

Stay tuned…


When all you have is a hammer, everything is a nail. For the folks at TCTSRN, all they had was a 20 ounce ball peen called T-SQL to solve their IT problems. That’s fine if all you need to do is generate file extracts or shuttle data from one source to another behind the scenes of an enterprise application that had a front-end. But after a few years, the TCSRN users started to demand more, like custom intranet applications. If you have been doing nothing more than data-diddling for a long time, you are woefully ill-equipped to deliver anything more than crap to the end-user.

I was trying to get that point across to my team – they didn’t know shit, and they were going have to get with the program. I was more than willing to show them the way, mentor them, coach them, whatever. But they where going to have learn something more than SQL.

They didn’t like that idea.

For one, SQL is a procedural language. It’s great for linear thinkers. The code at the top runs before the code at the bottom. Nice, top down paradigm.

Secondly, you could keep monkeying with a query until you got the results you wanted. Hit EXECUTE, and you get instant gratification.

So, with the nice procedural nature of SQL, and the immediate results that show up in your editor when you hit F5, it becomes a very comforting programming environment. Sort of like a application development security blanket. Always there. Stable. Controllable. Complex enough to keep you awake. But even if you are trying to solve complex data issues, all you need to know is the basic syntax, and you could hack your way to a solution. The language hasn’t changed in over a decade.

But developing applications requires more. Event-driven programming, object-oriented programming, multi-tier development, remoting, etc. – some of that is hard shit that requires some creativity, tenacity, and curiosity. My team had none of those traits.

This became painfully evident when Mr. Whiteboard asked me to work on a web project with the TAC (Thick-Accented-Cambodian).

“I don’t want you to do the coding, but help him out,” the shovel-faced bozo had asked me.

That would be rather tough, I had thought to myself, since the TAC had never coded anything but SQL. But I took it as an opportunity to demonstrate how things can and should be done in the shop. This would be the app that I could leverage as a learning exercise for the team.

On the surface, it was a simple page that queried the massive back-end system, combing through millions of records to return just few, depending on the specific criteria the user entered. With the brute force approach of building a dynamic query and passing it to a stored procedure, it would take minutes to return a result – a worthless solution. But with some sophisticated front-end work using AJAX, a solid middle-tier object that does the bulk of the processing, and a basic stored proc that returns small recordsets, the app would rock.

Not that the TAC was going to be able such an app – he was a SQL-writing idiot who knew one way of doing things – brute force. His stored procs sometimes where 5000 lines long. He thought temp tables were a gift from the heavens – and fancied himself to be a genius for knowing how to use them.

Get a clue, you data-diddlers – temp tables are no big fucking deal. If not used properly, they are just a way to get yourself in more trouble. And most of you are really lacking in the creative side, so I see a lot of brute force in those nasty stored procs you SQL hackers are so proud of. So many of you write like you get paid by the line of code. The rest of us are not impressed – after all, there is something called elegant coding. But I digress.

To top it off, the TAC has a nasty habit of nesting sub-queries. His code looked a lot like this:


Select
YADA_YADA
From TableYada Where YADA_ID IN (Select
YADA_ID
From Where YadaYadaID IN (Select YadaYadaID
From Table YadaYadaYadaId)))…

... And so on, and so on and so on…

You get the idea. It was like the TAK would curl himself up in a little ball of logic and fuck himself.

So I decided to lead by example. I came in on a Saturday (that was getting to be a habit), and wrote a nice prototype ASP.NET application that solved the problem. Leveraging some 3rd-party AJAX components (not some Atlas vaporware), I had a UI working in hours that queried that database and offered drill-down functionality without post-backs and excessive delays. It used one stored procedure that was twelve lines long.

I commented the C# code, excessively. I wanted the TAC to get the idea -- not everything can be solved by SQL.

It didn’t take long for me to figure out that the TAC was not impressed. I met with him the next Monday in my office.

“Did that code make sense?” I asked him.

“Uh, wud, the web page thing?”

“Yeah, notice how the middle-tier database code reduced the round-trips?”

“Uh, ummh, maybe,” he stammered. “But maybe, uhmm, it not so good. Maybe you can make it stored procedure, so not so much C sharp code.”

Really, I thought? Little shit-for-brains SQL boy thinks we need more spaghetti code…

Fuck, I was going to loose it….

“And how would we debug that?” I asked. “There are four levels of detail, each with its own query.”

“Uh, maybe you use PRINT statements,” he said. I realized that this marble-mouth cretin had never used a debugger. It was a lost cause. All he had was a hammer, and the world was one big nail to him.


Posted in:   Tags:

I've been away from the blogging routine for awhile, and have had some time to reflect on a few things. You see, I have been doing some heads-down coding for the last six months and haven't had to deal with any management or political issues, and I've come to a conclusion.

Most programmers are shitty employees.

No, not bad coders. Bad employees. Of course, I generalize.

But is there a group of people more anti-social, belligerent, unjustifiably arrogant, and plain unproductive than programmers?

And God-forbid one should dare suggest that. If so, prepare for indignant rants, suggesting that management is always the problem. After all, how dare someone expect an employee to communicate professionally, follow some standards, and for the most part, not be a fucking self-indulgent, quasi-autistic jerk all the time?

As someone from both sides of the great programmer/manager divide, am starting to realize that maybe the poor reputation of I.T. managers is not very accurate. Some suck. Some suck more. Some are very, very good.

As for programmers, most are horrible people to work with, and especially, to manage.

For example, my current contract has me working in a cube on a floor that is primarily filled with salespeople, and I’ve noticed a few things.


  • They dress nicely.
  • They smile when they pass you in the hall – even if they don’t know you.
  • They banter, flirt, and generally engage in polite social mannerisms during the workday.
  • They hold the door open for you.
  • They say ‘excuse me.’
  • They are polite to coworkers and bosses.
  • They wash their hands after using the toilet.

Most programmers do none of these things.

OK, I’m sure the trolls are ready to flame me and say “If you weren’t such an asshole, people would be nice to you!”

But even the programmers I don’t know, the ones that work on different floors, that have no reason to think that I am an asshole, share these common traits:

  • They are rude.
  • They dress poorly.
  • They are downright mean. Like “fuck you, I can code” mean.

Just an observation, and I am probably over-generalizing. But I try to counter the stereotype by being somewhat polite, holding doors open for people, and whipping the anti-social sneer off of my face when I am not staring at the screen.

So for an IT manager, there is a huge hurdle that has absolutely nothing to do with technical competence that impedes their ability the get things done and successfully manage projects -- their staff are assholes.

And I’ve noticed a cottage industry developing in the blogosphere that revolves around IT manager bashing, and I am partly guilty of that. But let’s not give the jerk-off programmers that dominate the trade a pass. They are the ones causing management to move jobs to India. I mean, if you want a surly, smelly developer with poor communication skills, you can get one from WiPro or Infosys for a lot less money.

Now for an update – I haven’t felt the urge to get up early and blog lately, and I can’t with good conscience blog at work. But I’ll try to post a little bit more often.


Posted in:   Tags:
Tunnel Rat posted on March 28, 2007 16:02

I got a lot done that Saturday. Now, I’m not a workaholic, and strongly believe in the XP philosophy that if you are going to work overtime, it should be done in small, infrequent intervals. But without much help from my “team,” shit was just not going to happen.

"Team" was a generous term. Team would imply that they could work in a coordinated, collaborative manner. Not so – they worked together like four guys in a circle jerk work together.

When I came in the next Monday, I fired up Visual Studio to wrap up some lose ends on the Online Inquiry app I had worked on over the weekend. The piece of shit site was finally getting stabilized, and if Mr. Whiteboard could get his act together and verify that it worked properly, we could launch in a week. I checked the code into Source Safe and moved on to some other tasks.

Big mistake.

When I finally got some half-assed specs from the overworked business analyst who sorta, kinda, maybe knew how the thing was supposed to work, there were some gaps. Evidently, the security of the system was so well designed that every user had the same login id. The way they differentiated who was who was by assigning a unique password, and the code had to figure who the user was by querying the database for that password, along with the group code (which was being passed around in the query string – in the clear). Not very secure. In fact, a hackers dream. Crack the weak password, guess which one of the four group codes to use, and you are in. Kiddie script stuff.

Not that you would be privy to much, except PERSONAL MEDICAL DATA, like the fact that Juan Esconseco in Orange, California was getting treatment for genital warts, or that Stacy Mooring in Yorba Linda, California had received a prescription for Lithium. Not very important, unless you had just started dating Juan and thought he had beauty marks, or you are married to Stacy and didn’t realize she was bipolar and thought that her violent mood swings were due to PMS.

The fact is, with folks like Charlie and Mr. Whiteboard in charge of your sensitive medical information, the chances of your medical data being secure are slim to none. They have other things to worry about, like their kid’s basketball games (Mr. Whiteboard) or beating some gangsta wannabe in some violent video game at the local internet café (Charlie). Security is an afterthought.

But not to me. I had done what I could to tighten the security holes in the Online Inquiry App, and was ready to circle back around a few days later. I first had to spend a day in a Leadership For Results class. Mr. Whiteboard’s idea. I have a bunch of coddled punks on my team and an impotent boss, and I’m the one that needed the leadership training.

Right. Sit in a class with a bunch of middle managers and department heads and do silly exercises designed to make me a better leader. No fucking way. No amount of role-playing was going to help me deal with the squad of bozos I had. But I went through the motions, played nice with folks like the Director of Coordinated Care and the Manager of Executive Compliance, and kissed a little ass with the HR lady that ran the thing. She was, after all, the one that turned me on to Charlie’s bogus resume and was helping me navigate through the shitstorm that was festering in Mr. Whiteboard’s shop.

When I cracked open the code a few days later, the work I had done was gone.

I did a double-take. Chill-out, I said to myself. Let’s make sure it didn’t get moved around or renamed, or put in folder created by a Vietnamese coder with limited English skills, like “Businez Leyer” or something.

No luck. I couldn’t find the class I had written. I was starting to freak.

It was a very stressful, nerve racking job, pushing the rat's mental state to its limits. Crawling through narrow, pitch black tunnels, sometimes for hours looking for a heavily armed enemy who would if he got the drop on you not hesitate to kill you.Occasionally under the strain a mans nerves would break and he'd be dragged from the tunnel screaming and crying. (Link)


Charlie had laid a trap. But I knew what I was up against, so I prepped myself. I checked the app to see if it would still run. Somehow, it was working like it did when I had wrapped up my changes a few days earlier. That meant the functionality that I had coded was there, somewhere.

Charlie had moved my code around, and didn’t bother to leave any comments, like “I moved your fucking code to class bla-bla-bla, you round-eyed piece of shit.” Just moved it, probably to some place it didn’t belong.

I found my logic lurking in the front-end, mixed in with a bunch of Charlie-code. Charlie-code was ugly, and I could spot it a mile away. I got my shit together and scheduled a meeting with Mr. Whiteboard.

When I walked into his office a few hours later, he looked scared. He always looked scared when I went to go see him. Let me try to “manage up” and help him out, I thought to myself. He wasn’t cut out for this stuff.

“I got the app security stuff working this weekend,” I told him.

“Oh. That’s good.” He flashed me a fake smile. He looked like he was passing a gallstone.

“Yeah, I figured out there are no unique user IDs, so I tightened that up a bit.”

“Yes, I know, we, uhm, came up with that to make it easier to set up users. And there is a “Z” login that you can use to test all the accounts. It’s in the code” He looked ashamed. Deep-down, he knew that wasn’t right, hard-coding a backdoor to make things easier on him. Lazy bastard.

“No prob, I found that. But I had everything working, and now my code is gone.”

Mr. Whiteboard grimaced, like another gallstone was moving through his alimentary canal. “Did you check with Charlie?” he asked.

He was getting wise. At least he was dialed in to the fact that Charlie could, and would, do all sorts of crazy shit to maintain his position as Head Motherfucker In Charge of Code.

“Well, I was about to, but I wanted to check with you first. See, the code was moved around somewhere. I think we need to talk to him, you know, reinforce the need to communicate things.”

He took a deep breath. “Oh boy.” God, he hated this stuff, I could tell. He wanted so much to be adored by his staff, and Charlie was Golden Buy, his pick of the litter. And now he had to do something about his behavior.

Mr. Whiteboard got on speakerphone and rang Charlie’s extension.

“Hawo.”

“Do you have a second, Charlie?”

“Wud you need?”

Maybe you could get your little ass into your boss’ office, I felt like screaming into the phone.

“Uhm, we just want to talk about a couple of things about the Online Inquiry app. It will just take a second.” Mr. Whiteboard was begging.

Charlie walked into the office and sat down next to me. No pleasantries were exchanged, just grunts and nods.

It was a short cross examination.

“I wrote some code to handle security in the app, and now it’s gone,” I told him.

“Yeah, I move id do da frond end.”

“Huh?”

“Da frond end.”

“Oh, the front-end. Why?”

“Dad where id belong,” he mumbled.

“How come you didn’t comment your changes?” I asked.

He shrugged.

Mr. Whiteboard had had enough. “Thanks, Charlie.”

That was it. No discussion about the importance of communicating with your supervisor, yada-yada-yada, nothing. He just didn’t have the stomach for it. I wasn’t going to get much backup from this clown, and if I came down heavy on Charlie, or anybody else, Mr. Whiteboard was going to back them up. I was screwed.

“So, what do we do?” he asked.

“I’ll tell him to roll back his changes and leave my code where I had it.”

“But where does it belong?”

Jesus, now I was going have to get into a technical discussion over this? Not going to happen.

“That’s not really the point,” I told him, trying to remain calm. I wanted to pound my fist on the table. “Ideally, the code should be in the middle-tier, it’s more secure that way. But he shouldn’t just move it around – that’s the issue here.”

He stared at me, blankly. He had no clue what I was talking about. I stared back at him, blankly. The meeting was over.


Posted in:   Tags: ,
Tunnel Rat posted on January 2, 2007 18:34

Something was not right.

While doing bug fixes on the Online Inquiry App, queries were timing out. I upped the ADO.NET connection timeout to get around the problem, but that was a short term fix. Users can’t wait 30 to 60 seconds to get a page to load, at least not most users.

Have you ever been on the phone with a customer service rep that is waiting to pull up your record, and they say “Sorry, my system is a little slow today?” This is usually because performance is an afterthought for most developers. Especially those working at non-profit companies in the health-care sector.

I checked the queries. It was painful. The code was dynamic SQL, meaning that they were made up at run time, depending on what criteria the user selected. You did not know what was being submitted to the server unless you stepped through each call to the database. Sometimes the queries would be very fast, other times they would take almost a minute. And the pages would hang.

Oh, yeah, I’m sure there is some DBA pinhead out there reading this and saying “You could run a trace or use SQL Profiler to examine the queries! Gosh, you’re so stupid.” Well, fuck you, Mr. DBA. Most of the time you need special rights to run Profiler, and I don’t like to trace. So get back to your data-diddling, asshole.

Finally, I found an eight table join that was hitting a table with three million records. That is not a lot, but if you don’t leverage the indexes, you’ll be doing a table scan that brings the query to its knees. And some of these queries were hitting columns without indexes.

For the sake of keeping my development momentum, I thought about purging that table of all but 10,000 records. I fired up a delete query. As I was about to execute, I paused.

What if this was production data, I wondered?

After all, the database names weren’t prefixed by intuitive terms like “DEV” or “PROD”. I couldn’t put it past Mr. Whiteboard or Charlie to assume that these queries were read-only, and that it wouldn’t hurt to develop against production data. It’s not like some developer is going to go in there and blow out a few million records of live data, right?
Wrong.

Developers can, and do, purge tons of data in the course of real application development. That is why they need development environments. And QA environments. And Production environments with logins other than sa/password.

But for Cheap I.T. Bastards and Lazy Hacking Turds, having the discipline to not turn your production database into a sandbox is too much to ask. It costs money. It takes time. And it requires you to communicate – which is not a strong suite for someone trying to protect his turf or sabotage a new supervisor.

I was going to bring this up with Mr. Whiteboard. I closed the query window with the delete statement, updated the bug database and got ready to go home. It was Saturday, after all.


Posted in:   Tags:
Tunnel Rat posted on December 28, 2006 18:21

Back to TCTSRN...

As the S.A.D. (Supervisor, Applications Development), I felt it was my responsibility to get my team the tools that needed to be productive. The right software and hardware can make a ton of difference for productivity and morale.

For example, The TAC and Burning Man did a lot of work with massive text files, and this type of task cannot be done with a basic editor like Notepad. I checked online and found the program they were asking for online selling for $39.

Charlie had also been whining about wanting a dual-monitor system. As much as I hated the feral creep, getting him some new gear would go along way in shutting him up and reducing his compulsive tendencies to sabotage me. I had been using dual LCDs for the last two years and it was a huge difference over a single monitor.

Considering TCTSRN had some decent desks, current generation computers, ergonomic chairs, and 17” LCD’s, I thought I could get Mr. Whiteboard to spring for some upgrades.

So I thought.

There is a breed of manager, supervisor, or director in I.T. that can only be described as the CHEAP I.T. BASTARD (CITB). They lurk in the middle tier of companies, and they have the power to make a developer’s life miserable, merely because they hold the purse strings for hardware and software. Mr. Whiteboard was such a creature.

Toiling away for years in vi or Query Analyzer, or Notepad, or worse, a command prompt, they cannot imagine there is a world with programmable mouse buttons, slick IDEs, text editors that show you byte counts, or things called “XML Editors.” The CITB is a bottom-dwelling scavenger, one who takes pride in doing things in the most Spartan manner. And they’ll be damned if they are going to blow a few bucks of their budget to get a developer some widget or, god-forbid, a pair of LCD monitors.


I found this out at my next meeting with Mr. Whiteboard.

“Some of the guys said they need a real text-editor. I found it online for $39,” I told him.

He looked at me, blank-faced. Man, I was getting sick of his vacant stares. Our relationship had declined steadily with the Charlie fiasco.

“What for?” he asked.

“Well, they have to scan a lot of big text files while they work on the extract programs. Notepad doesn’t cut it. Oh, and I think we should get set up with dual-monitors.”

“Dual-monitors? Why?”

“If you take a look at their desktops, they usually have ten or twelve windows open.”

“Mmmm.” It was obvious that he couldn’t image why anyone would need more than a couple of apps open. But then again, he had never been a developer, just a data-diddler, hacking out SQL in Query Analyzer. Sophisticated application development requires numerous windows open, one or two for Visual Studio, several SQL-Server consoles, editors, file managers, and browsers, not to mention iTunes or Pandora.

This was going to get nowhere. The TAC had told me that he had been asking for that cheap text editor for three years. Mr. Whiteboard wasn’t going to spring for it. I thought I could eventually wear him down, but the CITB was a tough creature. Sometimes the only way to get through to them was to bring your own gear in or shame them into laying out some dough. I started to fantasize about showing up at our next meeting with a $39 check made out to TCTSRN.

He changed the subject. “So how are things going with Charlie?”

“It’s a challenge. I’m trying to keep him busy on other things besides the Online Query app. I did talk to HR and did some checking on the procedures and steps that we would need to ---.”

“You talked to HR?”

“Yeah, just to do some checking on the --.“

“I thought we were going to work this out together?” He was pissed.

“I, uh, I just wanted to get some background on the, um, uh, process.”

He glared at me. What an asshole, I thought. I had taken positive steps to remedy this severe personnel problem, and I was getting reamed for not keeping things between him and me.

“Let me know the next time you feel the urge to talk to HR.” It was a threat.

“Sure, no problem.” The meeting was over.

I went back to my desk and inventoried the situation:


  • I took a big pay cut to get supervisory experience.
  • I got conned into running a pathetic team of surly hackers.
  • My boss was a Cheap IT Bastard.
  • I couldn’t fire anyone or hold them accountable.
  • I was not to talk to anyone in HR.
  • I was responsible for getting a shitload of work done by the end of the year.


Barely a month into this gig, things were looking grim. I was going to have to take matters into my own hands.


Posted in:   Tags:
Tunnel Rat posted on December 27, 2006 18:31

I have to take a break while I get some things in my life in order. I am buying a new house and recently got back into the contract programming arena.

To give you an update, I landed a nice gig at an established dot-com survivor that went public in 1999, so it has a mature software shop that values specs, design, documentation, and QA. This is more than I can say for the Web 2.0 space, which is full of flipmeat and the code-and-load culture of open-source, anything-but-Microsoft, make-it-up-as-you-go MySpace wannabees.

Seriously, does anyone actually believe sites based on Ruby, running on a tag-based scripting language like PHP, and hitting a MySQL database can scale and be maintained and enhanced for years? Currently, I am working on some code that is on average five years old. But if it is encapsulated, documented, and done by someone other than a former Starbucks barista or Everquest junkie who downloaded ROR and reinvented himself as a web-developer, I can maintain it. Try that with the vaporware getting VC funding now.

When I look at these job postings for programming gigs at start-ups using PHP (which I used to think stood for Programmers Hacking Porn, because every adult site is written in PHP), Ajax, Ruby, MySQL, yada-yada-yada, I think of one thing: Hacker Sweatshop.

The minute I would try to create a class diagram, or properly model a database, or write a functional spec before banging out some code (all of which are SOP at mature Microsoft shops), I'd be called into an IKEA-decorated office of the so-called CIO. Now, this CIO would probably be nothing more than a twenty-something, Blackberry banging, iPod wearing, excessively-pierced dork who is working for promised stock options. He probably has a case of chronic ADD, mixed in with OCD, so he can never, ever, decide what to obsess over. In addition, he has a perpetually twitchy thumb from years of game-console operation that has progressed to PDA obsession. And most-likely, he has a Bluetooth earpiece that allows him to carry on conversations with his MySpace pals while he holds staff meetings.

And once he discovers that I haven't coded his MySpace/YouTube/Flikr rip-off in the 7 days he thought it would take, he would fire me and say some crap like "we need some heavy-hitters in here" or "we are a results based company" or "we don't have time for all this design stuff, you get paid to code, not design" or "we expect you to work more than 12-hours a day, because we need to launch the site to get mezzanine funding."

So that said, I've been too busy to devote adequate attention to this blog. I find that it takes me an hour or so to properly formulate a post, edit it, and update the blog. I don't feel comfortable posting a few random sentences with links to other sites, so when I do post, I want it to be worthwhile reading for my readers.

So stay tuned, I have a lot of topics to cover in the near future, such as:


  • Cheap I.T. Bastards
  • Why None Of Your Medical Data Is Confidential
  • Dumb Bitches Of The Computer Business
  • Most FTE Programmers Suck
  • Curry-Eating Wage Pirates
  • LAMP, Ruby, and the Code-and-Load Culture
  • Taking Things Up With HR



... And More!


Posted in:   Tags: ,
Tunnel Rat posted on November 29, 2006 17:08

Charlie was bloviating again. Three cubes down, he was going on and on about Active Directory, impersonation, authentication…yadayadayada. Dweebs like Charlie love an audience, and the victim that day was Ferris, a systems guy. He was the Supervisor of Network Systems, or something like that. He dealt with hardware, installing applications and mapping printers.

So why was he dialoging with Charlie? This happened every week; Charlie was writing some application for Ferris, but I wasn’t sure what. I drop an email to Ferris.

“Can we get together sometime and discuss the apps that Charlie is working on for you?”

Ferris met me the next day in a conference room with a big whiteboard.

“I’m sorry, I didn’t even know Charlie reported to you. I have a standing meeting with him on Thursdays. You should probably be in on that,” he said.

Nice. I’d been there a month and there were people who still didn’t know who I was or what I did, or who reported to me. Good job, Mr. Whiteboard. Outstanding way to spread the word and integrate me into your organization, you blank-faced creep.

“No, problem. I’m just trying to get a handle on what Charlie is working on,” I told Ferris.

We spent the next hour diagramming all the various web sites and interfaces that Mr. Bill wanted, and the numerous single-user apps that Ferris had Charlie working on. Small stuff, but a considerable amount of work in its entirety. Apps that integrated with Active Directory and the HR system, apps that talked to eTicket, stuffed that moved data around. After the whiteboard was filled with chicken scratchings, I asked Ferris what he needed done right now.

“There’s this Phonebook Admin tool that Charlie almost has done,” he said. “The phone dude needs it to manage all the different extensions.”

“Ok, I can’t promise anything, but I’ll get all this work in the queue, prioritize it and see about getting some of it wrapped up.”

I went back to my desk and cracked open SourceSafe. Now, in a normal, healthy organization (is there one?), I would have just walked over to Charlie and asked him for a status on these projects. But since he wasn’t even answering my emails, I figured I'd get better results by snooping around the archives then by trying to get meaningful data out of that surly, evasive, ground-dwelling turd.

I started at the root and drilled down to what looked the stuff Ferris was talking about. Nested three projects deep was a folder called “PhoneBookManager.” I dragged the source code down to my PC.

Man, that’s a lot of code I thought as I watched the “Copying files…” dialog. I fired up VisualStudio and started digging.

A half-hour later, I finally got the app to run. What I had stumbled upon was Charlie’s sandbox – a one-page, one-user app that was going to be his pilot project for every new technology he was curious about and wanted to explore. Never mind that the users were clamoring for basic functionality and Mr. Bill was pissed that the Online Inquiry app was late. Nope, Charlie had more important business to attend to.

It was like an elevator to the moon.

This measly one-page web site did nothing more that manage the data in a single table that stored user names and their phone extensions. But in this app, Charlie had managed to incorporate Atlas (Microsoft’s feeble attempt at Ajax), web services (required by Atlas), and his own hand-rolled framework of data classes and security components.

Now, without any supervision and no accountability, most developers would go hog wild and do what Charlie had done, which was basically turn the company’s IS department into his personal playground. Not that it made any fiscal or strategic sense, but Charlie didn’t care. He was having too much fun.

I had come across Ajax development not that long before. It was a hot new technology, but very demanding. It involves a lot of asyncronized communication between the web client and the web server. In its purest form, it requires tons hairy JavaScript. After writing a few Hello World apps with raw Ajax, I found some third-party components (ComponentArt) that encapsulated all the nasty client-side stuff. With Ajax, you can create slick web pages with UI features that used to only be possible with Flash.

It drove the creative types crazy, because now a lot of their wacky designs could be done in ASP.NET, with all the benefits that a non-Flash application has. Things like readability, reusability, object-oriented development; concepts completely alien to the pierced-eyebrow, perpetual three-day beard, dingy ball cap crowd known in the trade as “graphic designers.”

But Charlie was doing it all wrong.

He had jumped aboard the Atlas bandwagon. Atlas was Microsoft’s lame attempt at competing with the Google-driven onslaught of Ajax-enabled websites that were all the rage. Things like Google Maps were full of high-fidelity web interfaces with minimal postbacks and all sorts of eye-candy. As usual, Microsoft was late to the game and trying to catch up. They had hastily thrown together a mishmash of components that supposedly abstracted the vagaries of Atlas and posted them on a web site.

It was garbage.

Atlas was barely documented, wildly buggy, and a typical Microsoft “lets throw something out there to keep people guessing until we come up with something solid” delay tactic. It was pretty much vaporware. Joel Spolsky called it “Fire and Motion,” just an attempt to keep moving forward. Atlas was for hobbyists and hackers with too much time on their hands. Charlie fell into the latter category.

Now, I'm sure there are some readers that are just dying to flame me and say that third-party tools are a waste of money, and Atlas is a robust Ajax framework, and having to create a web-service to get an Ajax callback to work is no big deal (unless you need to change the URL of the web reference), and I'm just a big pussy because I don't want to get my hands dirty with bleeding edge technology...yadayadayada...

Bullshit.

One of the skills a developer learns over the years is to recognize immature technologies and stay away from them. Atlas was such a technology. Ajax.NET is no better. After all, if Ajax.NET is in beta, what the hell was Atlas? Alpha? For those out there hacking away at Ajax.NET, enjoy. I have better things to do than try to get things like "rounded corners" and "accordians" to work. Now if you happen to work at one of those "not invented here" shops, or your manager is a Cheap I.T. Bastard (more on that later), and your work doesn't involve deadlines or profit motives, be my guest. I myself prefer to drop a server-side control on a page, write a couple lines of JavaScript, and spend the rest of my time setting control properties and working in the code-behind.

Ok, enough ranting about Ajax. I added the PhoneBookManager to my list of crap to cleanup. My whiteboard was filling up quickly.

Posted in:   Tags: , ,
Tunnel Rat posted on November 21, 2006 17:04

While the whole Charlie mess was going on, I was trying to get my team on the same sheet of music. I had laid the groundwork for the version control system, and needed to standardize the development process. To that end, I was holding weekly staff meetings where I would try to introduce some new technologies and development principles.

These meetings were less than successful. I tried to keep them interesting. I even started each one with a Dilbert cartoon or some funny video I had found on YouTube. But for the most part, my team could care less about best practices, standards, reusable code, documentation, or configuration management. And it showed.

Charlie would doodle. Aggressively. Now, I too used to have a serious doodling habit, but I have since learned to curb it in meetings. When a programmer really wants to show you they don’t give a fuck about what you have to say, they doodle furiously in your meetings. Heads down, elbows flying, hard-core doodling. Some even erase their doodles and make a lot of noise wiping away the eraser rubber. They never really told me how to deal with such insolence at Toastmasters.

Mr. Coffee would nod off. For as much coffee as that ass kisser would drink, he was shockingly narcoleptic.

The TAC would ask some questions. Hard to understand questions, but he at least was faking interest.

Burning Man would look scared and bewildered. He would ask questions about the most mundane of things. One time he asked “What is IIS?”

I thought he was kidding. “Uh, it’s, like, the Microsoft web server,” I answered calmly. I tried to be patient.

But I started to wonder if this guy was ever going to do more than hack out SQL scripts for the rest of his days. Seriously, if a developer just took a .NET class, and works in a Microsoft shop, and still does not know that IIS stands for Internet Information Services, he’s beyond clueless.

I realized that I was going to have to work with Burning Man to get him up to speed. We hadn’t really gotten off on the right foot. He had come by my cube once and I had told him some mocking story about this environmentally sensitive bimbo that I used to work with at SIAN, and how she would cut up the plastic six-pack rings before throwing them out.

“I do that,” he had said.

I had tried to laugh it off, but he had looked at me, sternly, like I was some kind of Neanderthal. Not that I’m not, but I don’t need to be reminded. What a militant tree-hugging fucker, I had thought.

But I was eager to mentor the poor, frightened hippie. There was a project that had got dumped on me by the network guys where I could use his help. We needed to get our web sites off of an old server and set them up on a new server. It was grunt work, mainly loading files and making configuration settings, but for a newbie, it was a daunting task. I wanted Charlie and Burning Man to work together, load the servers, configure them, and document the settings. Then I wanted them to set up a backup server, going off of nothing but the documentation. It was a chance for Burning Man to get up to speed with the web world, and a way for me to marginalize Charlie for a while.

After one of my staff meetings, I went by Burning Man’s cube. He worked in the dark side of floor, where the staff had barricaded themselves behind six foot high cubicle walls so that no one could easily see what they were doing. It created a sense of forbidding personal space that made it awkward for one to just drop in; you had to kind of work your way around their cubicle partition to get to their desk, and you could really freak someone out if you just barged in. There was an unwritten rule in that section of the floor – if you were about to walk into someone’s five foot square domain, you tapped on the partition wall.

“Do you have a second?” I asked, tapping on his cube. His purple mane peered out from behind the partition.

“Oh sure, no problem.”

I sat down in the extra chair he had in his cube. It was dark in there, even though he sat next to a window. The blinds were always closed. Something smelled funny, I couldn’t pin it down. Lotion? Stale soy?

He had stacks of CDs on his desk. He had yet to join the iPod revolution. I looked through the stack, hoping to find some common ground in our musical taste. I saw a Bowie disk. Bingo.

“Hey, you like Bowie?” I asked.

“Some. I don’t really listen to him that much.”

“Cool. I saw him in concert. Over twenty years ago.”

“Uh-huh.” He was wearing scuffed up Doc Martins that must have been ten years old. In my book, shoes that you wear to the mosh pit are not business casual. They just make one look like a dork. A troll. And his purple hair that he had pinned in a bun behind his head was absurd. I had run into him a couple of times in the men’s room, and he was always in front of the mirror, doing something with his hair.

I tried not to think about his appearance. “Yeah, he was excellent.”

“Uh-huh.”

This wasn’t going well. I decided to get down to business. “I’ve got a project that I wanted to talk to you about.”

I told him about the server migration.

“Uh-huh,” he responded.

“Yeah, so if you are interested, I think it would be a good opportunity to learn some new skills. But don’t feel like you have to do it. It’s your call.”

“No, sure, I’ll do it.”

“Great. So you have some vacation coming up?” I had just signed off on his request.

“Uh-huh.” He crossed his legs delicately, and perched his elbow on his knee. He was resting his chin on his palm, like a woman. A pale-skinned, purple-haired woman.

“So, where are you headed?” I asked.

He hesitated. “Uh, have you heard of, uh…Burning Man?” He was almost whispering.

I wanted to appear hip, in the know. In truth, I knew something about Burning Man; at least enough to know that it was little more than a bunch of burn-outs sitting in a dry-eyed Nevada lake bed for a week, tripping and acting “communal.” Fucking hippies.

“Oh, yeah, I know all about it. It’s like some performance art festival thing in Nevada.”

“Well, it’s a lot of things,” he said smugly. What a damn counter-culture snob, I thought.

He went on to tell me what a great experience it was. He had been going for years. “It’s like, uh, you’ll be walking around, and some guy will come out of his tent, and give you a ham sandwich. For free. Money is strictly taboo.”

“Wow.”

“Yeah, it’s all barter. They call it gifting. And the art, the music, it’s awesome. I mean, it’s like a life changing event.” He was getting so intensely serious, like Dennis Hopper in Apocalypse Now when he was talking about god-like Colonel Kurtz. “Like, you survive a week out there, and you’re, uh, just so different than before.”

“Uh-huh. I can imagine.” I faked being impressed. He the spent the next 10 minutes describing a huge cube someone made of light bulbs and the bulbs would go on and off in random patterns, like some kind of 3-D analog screen saver.

Life changing event? Walking around half-naked, or totally naked, for seven days, exchanging mushrooms for ham sandwiches? This was a life-changing event for him?

I mean, we did have some common ground. When I was his age, I too was walking around the desert. Except it was the fucking Kuwaiti desert, and that desert was in the middle of a war zone, and I had a hundred pound pack on my back, and if I wasn’t careful, I could have stepped on a cluster bomb fragment and blown my goddamn toe off . That, you self-absorbed, hyper-sensitive hippie, is a fucking life-changing event, I wanted to say to him. Pussy.

I got up. “Ok, so we’ll get started on that server project when you get back. Sound good?”

“Uh-huh.”

“Ok, cool. Enjoy your vacation.”

“Uh-huh.”


Posted in:   Tags: ,

- Vineet Nayar, CEO, HCL Technologies

Recent Posts

Slumdog Comment Generator

Clueless?
Not Sure How To Respond?
Use the Slumdog Comment Generator!

Calendar

«  June 2017  »
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
View posts in large calendar

Month List

Disclaimer
The thoughts expressed on this blog may or may not be the author's own and are protected by the 1st Amendment. Any attempt to reveal his identity by contacting a slumdog hack at Google, or a corrupt Desi sys-admin at his ISP will be dealt with promptly and severely. Civil and criminal penalties may apply if one is found to have used private information in an attempt to get the author fired at the Hindu-only I.T. ghetto he currently works at. In addition, any Desi who attempts to burn the author's house down because they are enraged over his writing will be prosecuted to the fullest extent of the law. This isn't India.

© Copyright 2017 Life of an I.T. Grunt


View My Stats