Dan J.

Full-stack VC and Big Picture Thinker. Certified MUMPS Guru. Better than Lyle.

May 2014

Case-Closed Captioned

by in Tales from the Interview on

Computers do... funny things to people. With alarming frequency, capable, adult professionals of all stripes just can't seem to overcome the most basic obstacles involved in the everyday practice of computing. When your grandmother struggles to understand that sending email doesn't require postage stamps, it's kind of endearing; when it's your co-workers, who grew up with computers just like you did and use them every day to do every aspect of their jobs, it's... less so. That so many people still fail so frequently leads one to wonder: can everyone really be this feckless, or are we, the creators of the software they struggle to master, just incapable of creating something usable?

Sometimes, the answer is emphatically the former.


Fear the Puppetmaster

by in Feature Articles on

Russell had been a systems engineer for many years, but he'd only earned a nickname once while working for a comparison shopping site in West L.A.

The DevOps team had been struggling to automate configuration and deployment of servers when Russell arrived with his favorite tool: Puppet. It took some time to hammer the procedure into everyone's heads, but eventually nothing reached their production systems without being recorded in a Puppet manifest first, meaning servers could be built and re-built without manual intervention.


Giving Excel the Run-a-Round

by in CodeSOD on

There are entire books — entire bookstores — dedicated to the truisms of business. One truism that doesn't get written about very often is this: before it gets big enough to have IT resources, every enterprise will run on a clutter of VBA-ridden Excel spreadsheets masquerading as line-of-business software. And, as surely as the sun rises in the East, such a company's first few developers will spend most of their time maintaining these. Sometimes those first few developers, with no one on the hiring squad able to vet their capabilities, will even create a few tabular terrors of their own. Dash found himself opening one of these, an Excel workbook created by a long-gone predecessor whose resume had claimed "extreme familiarity with Microsofts XL", to be faced with this:


Private Sub Worksheet_Calculate() 
 
'...snip... 
 
 If Not Intersect(wsTS.Range("Q11:Q35"), wsTS.Range("Q11:Q35")) Is Nothing Then 
   For r = 11 To 35 
     If wsTS.Cells(r, "N") <> "" Then 
       If wsTS.Cells(r, "Q") < 1 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.00" 
       ElseIf wsTS.Cells(r, "Q") < 10 And wsTS.Cells(r, "Q") >= 1 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.0" 
       ElseIf wsTS.Cells(r, "Q") >= 10 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0" 
       ElseIf wsTS.Cells(r, "E") = "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.0" 
       End If 
     End If 
   Next r 
 End If 
 
 If wsTS.Range("D42") < 1 Then 
   wsTS.Range("D42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D42") < 10 And wsTS.Range("D42") >= 1 Then 
   wsTS.Range("D42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D42") >= 10 Then 
   wsTS.Range("D42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G42") < 1 Then 
  wsTS.Range("G42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G42") < 10 And wsTS.Range("G42") >= 1 Then 
  wsTS.Range("G42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G42") >= 10 Then 
  wsTS.Range("G42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J42") < 1 Then 
  wsTS.Range("J42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J42") < 10 And wsTS.Range("J42") >= 1 Then 
  wsTS.Range("J42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J42") >= 10 Then 2
  wsTS.Range("J42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O42") < 1 Then 
  wsTS.Range("O42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O42") < 10 And wsTS.Range("O42") >= 1 Then 
  wsTS.Range("O42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O42") >= 10 Then 
  wsTS.Range("O42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q42") < 1 Then 
  wsTS.Range("Q42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q42") < 10 And wsTS.Range("Q42") >= 1 Then 
  wsTS.Range("Q42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q42") >= 10 Then 
  wsTS.Range("Q42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("D44") < 1 Then 
  wsTS.Range("D44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D44") < 10 And wsTS.Range("D44") >= 1 Then 
  wsTS.Range("D42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D44") >= 10 Then 
  wsTS.Range("D44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G44") < 1 Then 
  wsTS.Range("G44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G44") < 10 And wsTS.Range("G44") >= 1 Then 
  wsTS.Range("G42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G44") >= 10 Then 
  wsTS.Range("G44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J44") < 1 Then 
  wsTS.Range("J44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J44") < 10 And wsTS.Range("J44") >= 1 Then 
  wsTS.Range("J44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J44") >= 10 Then 
  wsTS.Range("J44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O44") < 1 Then 
  wsTS.Range("O44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O44") < 10 And wsTS.Range("O44") >= 1 Then 
  wsTS.Range("O44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O44") >= 10 Then 
  wsTS.Range("O44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q44") < 1 Then 3
  wsTS.Range("Q44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q44") < 10 And wsTS.Range("Q44") >= 1 Then 
  wsTS.Range("Q44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q44") >= 10 Then 
  wsTS.Range("Q44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("D46") < 1 Then 
  wsTS.Range("D46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D46") < 10 And wsTS.Range("D46") >= 1 Then 
  wsTS.Range("D46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D46") >= 10 Then 
  wsTS.Range("D46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G46") < 1 Then 
  wsTS.Range("G46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G46") < 10 And wsTS.Range("G46") >= 1 Then 
  wsTS.Range("G46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G46") >= 10 Then 
  wsTS.Range("G46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J46") < 1 Then 
  wsTS.Range("J46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J46") < 10 And wsTS.Range("J46") >= 1 Then 
  wsTS.Range("J46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J46") >= 10 Then 
  wsTS.Range("J46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O46") < 1 Then 
  wsTS.Range("O46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O46") < 10 And wsTS.Range("O46") >= 1 Then 
  wsTS.Range("O46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O46") >= 10 Then 
  wsTS.Range("O46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q46") < 1 Then 
  wsTS.Range("Q46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q46") < 10 And wsTS.Range("Q46") >= 1 Then 
  wsTS.Range("Q46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q46") >= 10 Then 
  wsTS.Range("Q46").NumberFormat = "0" 
 End If