Sunday, January 19, 2014

Beyond "Show, Don't Tell Me"



The Principle "Show Me, Don't Tell Me" is extraordinarily important.

But one can go even deeper, to an even more crucial principle.

That principle is ... well, let's do a case study.  The study is using unusual printer and reader devices associated with magnetic stripe cards.

Today TheHackerCIO saw a Zebra P330i Magnetic Card Printer/Encoder at work. Cards were loaded in the hopper. An attached laptop running Visual Studio was opened. Code pointing to an image, text and numbers was run. The printer whizzed a bit. Out came a card printed with the image. We then opened a 3M document reader, which can perform the OCR on a passport as well as the MSR (Magnetic Stripe Reader). We ran the newly printed card through the reader and voila! In Notepad, we saw the data wonderfully displayed.


Zebra P330i Magnetic Stripe Card Writer

Being shown a new technology is great.

It's so much better than if I had just been told how it worked. In fact, seeing it proved to me that the devices were working. Almost. To really be certain, I'd want to see another test where the data was changed and the changes reflected in the reader. And to be really thorough, before I went to production, I'd need to test that every track of the three available would properly encode data and that the text and image would print properly on the front and back of the card, as expected. But we covered this yesterday, under "Show, Don't Tell Me."

But what is really fascinating was what happened next.

TheHackerCIO didn't just remain satisfied that he had seen how to encode a mag card. He said to the demonstrator, "Let me drive." Thus, taking the Conn, I sat in the Captains Chair, seized the keyboard firmly, and began telling my demonstrator what I wanted to do.

The first thing that became apparent was that I couldn't even find Visual Studio. With a little help from said demonstrator, I found it was listed under "M," for Microsoft Visual Studio. Then, there were several versions, such as Express, 2010, 2012, etc. I had no idea which one to use!!! I discovered that the project had been built using 2010, not 2012, which was more web-oriented.

With this open, I was now able to familiarize myself with the code.

Then I realized I better load up a card. I pulled up the protector, and dropped in a card, face up. My gentle guide pointed out that there was already a card there, mentioning that the device fed from the bottom, and so I corrected my error by removing both cards, setting aside the one that had been on the bottom, and placing my new card at the newly opened bottom position of the hopper.

Returning my attention to the code, when I began to make a change, I attempted to put my name into the code as "James^Rothering." (The caret is used as a separator, I am told)  I got an error when I attempted to build it. Lower case is not permitted, as I discovered. Upon changing my name to "JAMES^ROTHERING" [the ISO 7813 standard uses the "caret" as a field separator] the code compiled and prompted me to enter various fields. I didn't know which of the many drop-down choices to select for the "Printer", but upon asking, the demo-meister told me to choose  "Zebra p330i card printer USB (copy2)". Why copy2 and not copy1 we didn't go into. I also selected "front" for print selections, and too quickly, I hit enter. I had not checked the "magnetic encoder" check-box. I knew this was an error an eyeblink after I did it and exclaimed to the demo-meister that I "messed up." He said, "Yes, I would expect that it will print the card, but not encode the changed data you typed in."

I agreed, and said that I wanted to view the card anyway, to ensure that it had failed as we expected. I then attempted to find the 3M card reader in the Start | Programs and had no luck. Demo-jockey pointed out that he simply had placed the binary in a directory under Downloads. After starting the ".exe" from that directory, I went to swipe the card, but found myself stopped. Demo-jockey said I could now minimize the panel displayed by the 3M reader program, but needed to have Notepad open, having focus at the time I swiped! So, I performed those actions and ... lo and behold. The card was erroneously encoded as it had been before I changed the data. That was expected, as you will recall.

So I went back through the steps of loading a card,  invoking a print, but this time carefully checking the box that caused it to actually encode the track. And this time .... ta da .... In Notepad I saw my beautiful name exhibited just as I had typed it in! Success at last.

The point of recounting this story is to illustrate the importance of taking the conn. Of moving rapidly beyond "Show, Don't Tell Me" onto "Walk Me Through, please!" The learning acquired by actually doing something, with a knowledgeable guide present is incalculable.

Walk Me Through, Please!!!

Walk Me through, now ...

I Remain,

TheHackerCIO