DevDisasters

A Matter of Fax

That dinosaur of an office appliance -- the fax machine -- plays an unexpected role in Jason's Web site registration puzzle.

Not long ago, "Jason" (not real name) inherited ownership of Minitrode's old and buggy customer-facing Web site with its (marginally) functional VB.NET back end. This wouldn't be remarkable except that, years ago, it had been originally coded by the now highly-regarded technical director of the company. Apparently, it was an "honor" to receive ownership of the codebase.

Just in time for the ownership transfer, there were reports of sporadic issues with the new user registration process. As the final step in the registration process, new users of Minitrode's site should receive an e-mailed activation code -- a six-digit number -- and click the link in the e-mail to activate their account. However, sometimes the e-mails would not get sent, making the process quite the hot-button item.

At first, mostly owing to the fact that he was new, Jason had some difficulty locating the property on the account object that stored the activation code. However, speaking with the technical support team gave him some direction on where to search.

He learned that whenever a customer called in after not receiving their code, a rep would simply go into the CRM system, navigate to the company record, find the fax number and delete it. This would make the Web site think that the customer's account had been activated.

Armed with this tantalizing (if somewhat puzzling) clue, Jason delved into the code once more, but this time found something that at least made some sense:

_objCompany.Fax  = _strActivationCode
  

Instead of using an Activation code field, the Web site stored the activation code in the fax number field.

Now the registration process flow made sense -- upon activation, the back-end code would delete the fax number and then later, upon log-in, check if the fax number was empty to determine if the account had been activated yet.

"I don't know who decided to go with using the fax number field or when," explained one of the most senior CSRs in a follow-up meeting, "but really, who even has a fax machine nowadays?"

Jason nodded in acknowledgement; even his company didn't have any fax machines. In fact, he couldn't think of when he'd last used a fax machine.

Armed with a partial explanation, Jason went back to his cubicle, but he wasn't fully satisfied. There just had to be more to this story. Yes, the fax number was involved, but how? What if the activation number triggered some oddball bug that made the e-mail program go out to lunch?

Digging deeper, Jason learned that the Web site was referencing a custom DLL, named "Minitrode.Services," and was using the following to generate the random six-digit activation number:

'Create the activation code
_strActivationCode = Minitrode.Services.Data.Formatting.RandomNumber & 
Minitrode.Services.Data.Formatting.RandomNumber & 
Minitrode.Services.Data.Formatting.RandomNumber & 
Minitrode.Services.Data.Formatting.RandomNumber & 
Minitrode.Services.Data.Formatting.RandomNumber & 
Minitrode.Services.Data.Formatting.RandomNumber

"Hmm, that's curious. Why use a custom library for generating a "RandomNumber"?"Jason thought as he made the fateful decision to open up said custom DLL and check the code.

Protected Shared m_objRandom As New System.Random
Public Shared Function RandomNumber() As String
   	Dim _int As Integer
   	_int = CType(m_objRandom.NextDouble * 10, Integer)
   	Select Case _int
	   Case 1 To 9 : Return _int.ToString
	   Case Else : Return "9"
   	End Select
End Function

Knowing that that this code would probably be representative of the rest of the site made Jason feel ill, but it didn't solve the task at hand. Why were e-mails sometimes not sent out?

The reason for that, it turned out, had hardly anything to do with coding. Instead, it was more like a case of the right hand not knowing what the left one was doing.

As it turned out, during sign-up, new users could still (optionally) enter a fax number, and if they went so far as to include any non-numeric characters (hyphens or parentheses), it would break the notification code.

Jason shrugged and commented out loud, "I guess that some people still use their fax machines after all."

About the Author

Mark Bowytz is a contributor to the popular Web site The Daily WTF. He has more than a decade of IT experience and is currently a systems analyst for PPG Industries.

comments powered by Disqus

Featured

  • AI for GitHub Collaboration? Maybe Not So Much

    No doubt GitHub Copilot has been a boon for developers, but AI might not be the best tool for collaboration, according to developers weighing in on a recent social media post from the GitHub team.

  • Visual Studio 2022 Getting VS Code 'Command Palette' Equivalent

    As any Visual Studio Code user knows, the editor's command palette is a powerful tool for getting things done quickly, without having to navigate through menus and dialogs. Now, we learn how an equivalent is coming for Microsoft's flagship Visual Studio IDE, invoked by the same familiar Ctrl+Shift+P keyboard shortcut.

  • .NET 9 Preview 3: 'I've Been Waiting 9 Years for This API!'

    Microsoft's third preview of .NET 9 sees a lot of minor tweaks and fixes with no earth-shaking new functionality, but little things can be important to individual developers.

  • Data Anomaly Detection Using a Neural Autoencoder with C#

    Dr. James McCaffrey of Microsoft Research tackles the process of examining a set of source data to find data items that are different in some way from the majority of the source items.

  • What's New for Python, Java in Visual Studio Code

    Microsoft announced March 2024 updates to its Python and Java extensions for Visual Studio Code, the open source-based, cross-platform code editor that has repeatedly been named the No. 1 tool in major development surveys.

Subscribe on YouTube