Latest posts
Error'd: Password Perplexity
3/19/2010 9:00:00 AM
J Watson experienced password complexity at its finest.

"I was searching for a news article in a specific country when I realized that there were two countries that I've never heard about," writes Brett Wilson

"I ordered a Demand Draft from ABN Amro Bank for EUDD-II'GZB," writes Ashish K Mondal, "after seeing the ' replaced with a ', I felt confident that they take XSS quite seriously."

"I suppose the first part of the error is odd enough," writes Nicholas, "but the impossiBe situation makes any resistance futile!"

"I was trying to check-in to my flight," Timo writes, "the site asked for a booking code and nothing else. Fulfilling that request, I was met with this curious cry of discontent. "

"I got this message when I inserted my Sandisk USB drive," Reinier wrote, "I'm not quite sure what it wants me to do."

"I was setting up a StarWing iSCSI target," Chris S writes, "and I put in my default testing password ('test123password'). I guess it was way too short."

Corné das Ottaar experienced this weird error... err, message after a crash?

"TODO," writes Matthew, "remove 'Notes to Self' from alert() boxes."

"I was changing the secret questions on my Yahoo account and got this," Glenn J writes, "Error=puzzling."

Classic WTF: Meaninglessness
3/18/2010 10:30:00 AM
With the Webinar I'm doing this morning, I didn't have a chance to finish today's article. So instead, let's do a classic! Meaninglessness was originally published on April 19, 2007.
As you may or may not know, my day job is a Software Developer at Inedo, and I work on a pretty cool application called BuildMaster that helps software teams build, configure, and deploy their software applications. Years before, however, Inedo was a custom-software firm that was primarily focused on building all sorts of businessy software that does all sorts of businessy things for all sorts of businessy, erm, businesses. Bank stuff, manufacturing stuff, health care stuff, you name it. Most days, it was a challenging and satisfying job; I’d go home thinking, I accomplished something today. But every once in a while, I couldn’t help but wonder, why am I spending my life building cold, meaningless business applications?
I had found that the feeling of meaninglessness came especially after the “Deployment Celebrations” of some big, “productivity-increasing” system. Congratulations! We saved MegaCorp shareholders millions each year in labor costs, and we got a fantastic bullet point to put on our resumés. But we also put an entire floor of nice, hardworking people out of work. Now, I’m sure a lot of you have felt this sense of meaninglessness as well. Fortunately, folks like Ferdy remind us that, while we may not be doctors, or astronauts, or really anyone in a position to change the world, making it run a little more efficiently every can be a good thing.
Like many computer science students, Ferdy started down the path of Information Technology because it just seemed like the right thing to do. Before college, he was a big computer buff and had a lot of fun hacking around in BASIC and doing all sorts of other geeky stuff like Bulletin Board Systems and USENET. Computer programming as a career was just the next logical step.
Much like any other computer science student, Ferdy went through all the different CS courses — data structures, digital theory, operating systems — and was finally ready to move on to the Real World. Well, almost. Before he could graduate, he’d have to do a semester-long internship at some company.
Ferdy was fortunate enough to find an internship where he’d actually be responsible for completing a real project. It was an engineer planning application that would be part of the company’s brand-new “Intranet” (it was a new-fangled word back in those days). The project sounded pretty exciting at first, but ended up being rather boring once it started. There were boring meetings, boring paperwork, boring conference calls — even the programming itself was pretty boring. It even felt meaningless.
On one of his many “boredom walks” around the facility, Ferdy ran into a couple of older fellows working inside of a cramped, little room with a sign outside that read “Stock.” The room was filled with all sorts of electronic devices, measurement tools, and miscellaneous gadgets that were used by engineers out in the field. The guys — Louis and Frans — were responsible for receiving, calibrating, and certifying all of these various pieces of equipment. And they were very grumpy.
Louis and Frans, in addition to doing their day to day calibration tasks, were responsible for going through the system — some proprietary DOS-based database application — and “recoding” each and every device. You see, sometime back in the 70’s or 80’s, someone decided that they would use the date “99” (as in, 1999) to indicate that the device never needed to be calibrated. And lo and behond, a few decades later, 1999 was starting to become a “real” date, and one that was just around the corner. Obviously, that was going to cause all sorts of problems.
To “recode” the devices — the 30,000 or so — Louis and Frans would have to load up the device search screen, find a device with a calibration date of “99”, load it, change the date to “50” (1950 or 2050, who knows), and then save it. In the year that they had been working on this project, they had only managed to go through a few thousand of the devices. The software manufacturer (who recommended using “99” and then “50” in the first place) advised that this was the only possible way to do it.
As a reminder of this herculean task, a note was taped to the little terminal: “Louis and Frans, please remember to use all of your spare time to recode the devices.” Needless to say, it was not how they had envisioned spending their last few working years before retirement. Ferdy, being the helpful fellow that he was, went back to his desk to research this little application. He found that it used some ancient dBase database and could easily be opened and fixed with a few queries. And so he did that. He backed up the database files, ran a single query, and in a matter of seconds, all 30,000 of the “99”-dated records were now “50.”
He took a trip back to the room labeled “Stock” and replaced the notes at Louis and Frans’s computer: “Louis and Frans, please remember to use your spare time to buy the intern coffee.”
These days, Ferdy works as a software architect at one of the bigger electronics manufacturers. While he does occasionally wonder if what he does is meaningless, he always thinks back to Louis and Frans’s 30,000 device nightmare. And saving a few folks from a few years of rushed, data-entry hell — now that has meaning.
Announcement: A Culture of Quitting, The Webinar
3/17/2010 4:30:00 PM
A few weeks ago, the fine folks at the IASA invited to speak at one of their webinars to discuss an article I wrote a little while back. It's a free webinar, and runs tomorrow (Thu, Mar 18, 2010) from 11:00 AM - 12:30 PM Eastern:
If you’ve worked at enough companies in the IT industry, you’ve probably noticed that the most talented software developers tend to not stick around at one place for too long. The least talented folks, on the other hand, entrench themselves deep within the organization, often building beachheads of bad code that no sane developer would dare go near, all the while ensuring their own job security and screwing up just enough times not to get fired.
Conventional wisdom tells us that the solution is “retention”: simply entice the talented developers with benefits, stock options, growth opportunities, etc, and certainly, there’d be no reason to ever leave, right? In reality, these programs do little more than extend the inevitable, and worse, can even leave employees resentfully staying just to get their vesting.
Today, I’ll discuss a new approach. In short: embrace turnover, encourage separation, and don’t even think about saying “careers, not jobs.” Oh yes, it’s Employment 2.0.
You can register for free here, and remember that space is limited. Hope to see you there!
CodeSOD: A Better Date Diff
3/17/2010 1:30:00 AM
It’s a pretty common programming problem: given two dates, determine how many days are between them. Most programmers have the benefit of built-in library code, whether that’s DateTime in .NET, Calendar in Java, and so on. Some – MUMPS programmers, probably – have no choice but to parse and then re-implement the same “30 days hath September…” algorithm. And then of course there are the few who re-implement it anyway, perhaps because they figured that no one else in the history of computing had ever solved that unique problem.
But an even rarer breed are those that, like Paul’s predecessor, who to use built-in code… but from an entirely different platform. Take this method, found in production code, that inputs two dates and a TimeDifference to determine how far apart the dates are. An easy enough concept in C# that’s implemented with a trip to the database.
public static int DateDiff(DateTime date1, DateTime date2, TimeDifference td) { string sql = string.Empty; switch (td) { case TimeDifference.Hours: sql = string.Format("SELECT DATEDIFF(HOUR,'{0}','{1}')", date1.ToString(), date2.ToString()); break; case TimeDifference.Minutes: sql = string.Format("SELECT DATEDIFF(MINUTE,'{0}','{1}')", date1.ToString(), date2.ToString()); break; case TimeDifference.Seconds: sql = string.Format("SELECT DATEDIFF(SECOND,'{0}','{1}')", date1.ToString(), date2.ToString()); break; default: return 0; } return Convert.ToInt32(DataLayer.DataManager.executeScalar( sql, CommandType.Text, new NameValueCollection())); }
Scaling Project Mountain
3/16/2010 9:00:00 AM
When Hassan joined Meteor's IT department in 2006, he was pleasantly surprised to find everyone abuzz with excitement.
Months earlier, the previous CIO retired, and a new Head of IT had just been appointed, bringing with him the mandate that old Pentium III PCs that sat on each desk had to go. With 128MB, they struggled to keep up with Windows NT 4.0 and Office 97. He had persuaded the board to allocate millions to replace every workstation and server, and upgrade the infrastructure to match. The company would move on up to the heady delights of Windows XP SP2, Office 2007 and Exchange 2003.
Because the project to do this was going to be such an uphill struggle, and the fact that at the new Head of IT had come from an organization where kitschy meant progressive, it was named Project Mountain. "Mountaineers" were appointed, and they met in the "Summit Room" wearing specially commissioned T-shirts on a section of the 5th floor set aside for the project’s offices named “The Matterhorn”.
Hassan was double fortunate to have started when he did, as he was nominated to work on the project.
As part of a licensing deal worked during the project, employees were offered the chance to obtain a copy of Microsoft Office for use at home. This news was broken to all employees in the company and when it landed, everyone cheered at the chance to get a free copy of the office software. The email stated that the only catch was that employees needed to print and fill out a "completely anonymous" feedback survey to be submitted along with the form.
Everyone, Hassan included, didn’t mind filling out a survey to score a free copy of Office - but something about the whole thing bugged him.
Hassan figured that there were over two thousand employees in the company who had received the offer. When considering that a lot of employees would be happy to send two forms in to get a free copy, Hassan imagined the terrible task that would face some poor clerical-type who would then have to cope with processing thousands of sheets of paper. He knew there had to be a better way.
Though only a new Mountaineer, Hassan had no problem getting ahold of an old Windows NT server, and then turning it into a web server. While he had some experience in VBScript, he knew little about ASP programming. Undaunted, during his lunch hour, he went to the local library and borrowed their one and only book on ASP. By chapter two, he had found all the information that he needed.
By the next day, he had whipped up a simple Access database and a form on a web page which fired the answers into the database using VBScript. He added some rudimentary form validation and got the help desk to test it. After wiping perspiration from his brow, Hassan stood back and looked at his mighty proof-of-concept, and felt it worked rather well. It was ready for prime time.
Hassan tactfully emailed the Project Mountain office, and explained his proposal and included a link to his little web page on his outdated server.
The following day, a reply arrived from one of the head “Sherpas” from the Project Mountain team. They were very impressed with his skills, and were very interested in putting his application to good use.
Three weeks passed and Hassan hadn’t heard one word about the app he had made. He thought about following up, but he was up to his elbows gathering requirements for Project Mountain, and was too busy to add any additional meetings into his schedule. As fate would have it, when Hassan landed in the Project Mountain offices, he ended up being assigned to a cubicle sitting opposite a temp named Miranda. One of Miranda's jobs was dealing with the free Microsoft Office offer, so naturally Hassan was intent on listening in as she proceeded to call numerous people.
"Hi, it's Miranda from the Project Mountain office here. It's about this form you sent in. I can't quite read the writing. How do you spell your name?"
"Hi, it's Miranda from the Project Mountain office here. Yes, about the form you sent us - you've forgotten to tick the box at the bottom to accept the terms and conditions."
"Hi, it's Miranda from the Project Mountain office here. We've received your form, all I need to know is your cost center, your department and your manager's name."
Initially, Hassan didn't want to rock the boat, but he felt that he had to follow-up with one of the Sherpas to find out why they weren't using the form that he made.
"Sorry for the misscommunication," the Sherpa's response email read, "your little web application is absolutely wonderful, and it's being put to great use already. In fact, just earlier today, Miranda said that she loved using the web app because of how much more efficient it was than trying to enter names, addresses, and survey results into her spreadsheet. Thank you again for your extra efforts."