Friday, September 25, 2015

Following through on a threat

I threatened to tell as many people as I could, so I need to follow through on that threat.  If you don’t follow through on your threats, you get a reputation for making idle threats. I don’t want to be that kind of person. The only one learning a lesson in all this is me, but I follow through on my threats, damn it! So here it goes--I had a terrible experience attempting to make a purchase on BestBuy.com and I will never buy anything from them on-line ever again.

There. Half the threat is complete. When I die and I have not made any further purchases on BestBuy.com, the other half of the threat will be complete. Yes, I can admit it, I am an idiot.

I have a history for holding long grudges against businesses that provide poor customer service. I once didn’t step foot inside TGI Fridays in Rochester for ten years because of terrible service I received on 3 separate occasions. They eventually closed up and went out of business in Rochester. I win. That TGI Fridays was replaced by Wild Bills, where I once received such poor service it was legendary.  I still tell the story of that experience to people, but I also still go to Wild Bills. You have to really piss me off to lose my business. I can shrug off one bad experience. I can shrug off several poor experiences if I am ultimately satisfied.  Best Buy has shown me a pattern of poor customer service, and my list of grievances is long enough to warrant the life time ban I have placed on them.

The short version of the story is this: BestBuy.com sucks, and only suckers would use it.  The long version follows.

**** WARNING: LONG BORING VERSION OF BESTBUY.COM STORY FOLLOWS ****

Due to my own privacy concerns, sharing too much online can be dangerous, I will be vague in recounting events. In the last 18 months I have attempted three purchases from BestBuy.com, all for in store pick-up, all using the same payment type. Two were ultimately successful, one was a failure, all of the purchases had problems.  The first two had problems with the pick-up portion of the transaction, but I eventually got what I paid for, so I can forgive a couple inconveniences, no problem.  The third one wasted three hours of my afternoon, required several phone calls and emails to both Best Buy and my payment company. I’ll try to describe what happened.

On Monday I tried to buy an item on BestBuy.com. What that was is not important to the story, but it should be understood that I could buy this item from many other places in Rochester. I tried to buy it online because I don’t want to deal with sales people. I just want to walk in, pick up my purchase, and walk out. That is how this was supposed to work.

On their website, I got through the 4 page online sales process to the point where you submit the order, but when I clicked the submit button I received a strange error message. The message was strange enough that I knew that the order had not been place, but I was also unsure of how to proceed. So I clicked on the “Support Chat” button to get some help. I got “Kelsey”. I told her the problem I was having…after a minute or two she responded that they were having trouble with the form of payment I chosen to use and that I should try to use a different form of payment. I told her that I don’t have another option, a small lie, and that I will just purchase it from somewhere else if we can’t get this figured out. Then strangely, she asked if there is anything else that she could help me with. I told her that since she didn’t really help me in the first place, no there was not. I was keyed on the word “else” in her statement, but she took that to mean that we were done and she ended the chat. “Else” means something different to programmers, I guess.

At that point I decide to end the whole ordeal and closed the browser.

A few minutes later I got an e-mail from my payment company about the purchase I had just made from Best Buy, stating the dollar amount that I just paid, and that it qualified for some promotional terms. Rather alarmed, I logged into my account website to see that the payment had indeed been processed to Best Buy for the dollar amount of the item I just tried to purchase.

I was little confused, so I logged into my BestBuy.com account to look at order history. There was nothing there. The last item I had purchased was 6 months ago, and there were no open orders.
I first called my payment company to inform them of the situation and I asked to cancel the transaction. She politely refused. There was nothing she could do at that point.  From their perspective I had authorized the transaction and it was successful, so I would have to take it up with the vendor. She was polite, and said that she would send them an e-mail stating what she had told me, but she also gave me the order number to use with Best Buy to get the transaction canceled.

Next I called Best Buy’s toll free support number from their website and I got their automated system, which is really not set up to deal with problems like mine.  It asks you for the purpose of your call, you tell it, and it guesses what department you want.  I spent a long time trying to tell it my problem, and it suggesting incorrectly the department I was asking for. The system eventually just picked the Geek Squad for me, and connected me to someone who was thrilled to have to reroute me to another department. I eventually did get to a person who kind of knew what to do.

It took me a while to describe the issue, but she let me get through my story. She asked me for the order number. This is the number I had been given in my previous call, and she used it to look up the order. She went off the line for a bit, but she came back and gave me some instructions. I was to email someone at bestbuy.com with the subject “GHOST ORDER” and give them the order number and ask them to cancel the order and provide a refund.  I asked her what the problem was, but she said that when the order was placed it was not transmitted to all the relevant systems.
Her explanation seemed strange, but what was even stranger to me is that I had to e-mail someone to do a job that a support person should be able to do. If nothing else, she should have sent the e-mail for me. E-mail? Really? Well, at least she didn’t ask me to FAX someone.

I sent the email. I then had to wait 4 hours and 45 minutes for a response. In the response email, Best Buy tried to blame my payment company, but I felt that the technical explanation provided was not correct. I know a few things about payment processing, and the explanation could not have been accurate. To be fair they didn’t have to provide any sort of explanation, so even an inaccurate one is better than none…if you enjoy being lied to. They apologized for the inconvenience, and stated I could try to place the order again.

This is the part that caused them to receive the ban. There were many times along the way where Best Buy could have resolved the situation to both of our satisfaction. They had already been paid. All I really wanted was the item. They seemed incapable of completing the last step of the transaction and getting me what I had paid for.  The thought of having to go through all of that again is so negative in my mind that I would not be willing to chance it again. Online ordering is supposed to make things convenient. I order my pizza online. I order almost everything else from Amazon.com. I make several dozen purchases from Amazon.com every year. I’ve been doing it for years, and not once, not ever have I had to call their support line. Their customer support is tops because I don’t even have to think about it. There is now an implicit trust that if I click
 that it will show up at my door in two days, no problems.

I used to buy expensive tech items from Best Buy, but not anymore.


I then promptly bought the item for pick-up from Walmart.com. That didn’t go exactly as planned either, but I was at least holding my purchase in my hand by lunch time, and I didn’t buy it from Best Buy.

Later in the day I received an email asking me to take a survey about my experiences on BestBuy.com. Without that e-mail I wouldn't be typing this. The questions pissed me off. The whole situation pissed me off. So I made the threat that I would never use BestBuy.com ever again, and I would tell as many people as I could.

Curiously I have received an email from BestBuy.com every day this week telling me that I have an item in my shopping cart ready to check out, but when I login to the site there is nothing in my shopping cart. Their site as definite software quality issues.


Tuesday, September 15, 2015

Getting reacquainted with an old friend

I was goofing around on the great wide interwebs today and I found an interesting data dump file from a MySQL database. Oh, MySQL, I knew her well when I was a sysadmin. I really want to have a look through this database so it's time to get to know her again.

The last time I used MySQL was on a Linux distribution that doesn't even exist anymore. That was two jobs and nine years ago. I expect that as easy as things have become using Ubuntu this should be cake.

Using the fine install instructions provided on the MySQL site it ended up being:
 shell> sudo dpkg -i mysql-apt-config_w.x.y-zubuntu14.04_all.deb   
 shell> sudo apt-get update  
 shell> sudo apt-get install mysql-server   

And with that the database server was installed. Easy.

I then started up MySQL and created a new test database.
 mysql> CREATE DATABASE TESTDB;  
 Query OK, 1 row affected (0.00 sec)  

All that was left was to import the data.
 shell> mysql -u root -p TESTDB < supercool.dump  

Then poked around the database for a while. It is interesting how quickly it comes back, but it takes some thinking and a little use of Google to get going in the right direction. I've been on the Microsoft stack for so long now that I can't really remember Python anymore. I used to love Ruby. I should really make a point of getting to know those old friends again some day soon.

Monday, September 14, 2015

Have Compiler, Will Code

A few months back I changed jobs. I kept the same title, but whereas I used to code on an almost daily basis, I do absolutely no coding now. This is a big life change for me. I'm still not entirely sure how I feel about it, but if I had to name the emotion is would be "blah".

Programming language proficiency is a perishable skill. To keep by skills in C# exercised I started some online courses for creating games with Unity. I had a blast, and I've made some games that I think are worth sharing. I spent a good part of the weekend trying out various CMS systems trying to set up a quick personal web site that I could use to server the Unity web player. I failed.

I used Azure to try out demos of Umberaco, Composite C1, Better CMS, and Wordpress until I got tired. None of them met my needs, and each failed at least one of my requirements. It was becoming obvious that all of them solve the same problem, and do it pretty much the same way. If all I wanted was to put up some quick web pages and maybe have a blog each would have been perfectly fine. But I have some requirements that I guess must be unusual.

Long story short, I think it will be easier to code this thing on my own. This will also give me a chance to work on my web development skills.

Monday, August 24, 2015

The Art of Procrastination

I started looking around the web and doing some analysis of the BASIC language over the weekend.

Here how I thought my weekend was going to go:
  1. I'd wake up early on Saturday and gather some language specifications about BASIC from around the web.
  2. I'd have a sandwich and give my mind time to assimilate and digest the information and form a plan.
  3. Around noon I'd put on some pants and start banging out some code.
  4. Around 3 P.M. I'd be debugging code.
  5. 6 P.M. code complete, time for a beer!
  6. Sunday morning I'd wake up and I'd play some BASIC computer games and great fun would be had!
Here is what actually happened:
  1. I rolled out of bed at 7:30 am (not bad)! Then I realized my head hurt...bad. I guess I had too many IPA's the night before. 
  2. I loaded up on Ibuprofen and water, and helped Megan deliver news papers.
  3. I Went to watch Megan play soccer, and got home around noon.
  4. I had that sandwich and then took a nap.
  5. At 3:30 pm I woke up and decided to have a look and see what I could find for BASIC language specifications on the web. 
  6. 3:40 pm I have a list of keywords. I think there were like 71 of them. WTF!? I don't remember this language being so complex...then I muttered to my self a bit.
  7. 3:45 pm I realized I have no idea what I'm going to do, and writing any code would be a waste of time at that point.  After giving it very little consideration I thought the best thing to do would be to play some Minecraft.
  8. At what I thought was 4:30 pm but was actually 7 pm (Minecraft does that to me), my wife suggested we watch a movie together. We did and it was nice.
  9. After that I played a little Minecraft and then went to bed.
  10. On Sunday I roll out of bed at 10:30 am (now that's more like it), and my wife gave me the task of putting some towel hanging thingy on the wall in the bathroom. She said she likes how handy I have been becoming, and I wonder now if she was being facetious.
  11. The rest of the day passes with me performing chores around the house and generally ignoring the computer.
  12. Late on Sunday I realized it is too late to work on the BASIC project and so I played a little Minecraft and then went bed. 
This is actually how most of my personal programming projects turn out. I've started a bunch a of projects, perhaps hundreds, and finished very few. I realized in the middle of Saturday something very important that hadn't occurred to me until that point. I don't know the first thing about making a programming language.

That's not entirely true. I did take a compiler course in college, or at least I started a compiler course in school. That was a long time ago and I can't remember exactly how that turned out. I do remember the professor standing up there acting smart and yammering on with big words and phrases like "lexical analysis" and "parse trees" and "blah blah blah". I am now remembering that I wrote a parser for the ADA programming language once by hand for a semester project, but I can't remember the details though. I just remember that it was hard. 

Dang!

Friday, August 21, 2015

Back to BASIC

In a previous post I mentioned that when I was a kid I would type BASIC code into the computers I had available to me in order to play games. My folks were teachers in a school which gave me access to computers that perhaps some kids wouldn't have had, but that wasn't good enough for me. I got a paper route when I was 11 in order to earn money to buy my own computer. I'm not sure exactly when, but some time in 1983 I bought a Commodore 64.

It's funny to think back on it now, but I bought it in pieces as I earned the money. First I bought the CPU and hooked it up to a 13 inch black and white TV. It was still usable because it booted to a BASIC language interpreter and I could type in the programs I wanted to run. I did not have external storage, tape or disk, so when I turned off the computer the program was lost forever. So the next piece I purchased a few months later was a Commodore 1541 disk drive which used 5.25 inch disks and could store 170KB of data on disk. Then later I picked up a Commodore 1702 video monitor, and finally a 300 baud modem to complete the setup.

From 1983 to 1989 that C64 was my main computer. It came with the BASIC programming language, so that is what I taught myself. I banged out a ton of BASIC in that time, but this version the language has very little resemblance to the BASIC languages in use today.

BASIC is an acronym for Beginner's All-purpose Symbolic Instruction Code and it is a language that has a long and interesting history. Originally designed in 1964 at Dartmouth college. It was intended to help less technical users and students write programs for their mainframe system. What made BASIC popular was it seemed to be on every microcomputer, or at least it was on every computer I had access to as a kid. It was on the Apple II and TRS-80 computers at the school, and it was on my own Commodore computer. So naturally it was the first language that I learned when I started writing my own programs. Little did I know at the time, but this would make things difficult for me when I first started studying computer science in college.

I recently was going through some old books and I came across my copy of Basic Computer Games by David H. Ahl. This book listed quite a few games written in BASIC that I could enter into my computer and play.

Feeling a bit nostalgic, I thought it might be fun to try run some of these programs and I thought that finding a BASIC interpreter to run these programs would be no problem. I thought wrong. I did find some computer emulators that could be used. I even found a C64 emulator, but that is not what I really wanted. I was feeling nostalgic not masochistic. I just want a simple interpreter I could launch from the Windows Command Prompt. I can't find one. I feel a project coming on.

Monday, August 17, 2015

Coding where the Buffalo Roam

I'm not a real Cowboy. I've never ridden a horse. I don't wear boots. I don't listen to a lot of country music. I am from North Dakota but I've never actually seen roaming buffalo. This is my second go at keeping a blog, and also the second time I've called my self a code cowboy. Why would I do this you ask? I'll explain.

I am a programmer. In the company I work for my title is Senior Analyst/Programmer but I tend to ignore the "analyst" part of that title as nothing brings me more joy in my work than writing code. I doubt anyone would consider me to be terribly successful or even good at my job, but I have over the years pumped out large volumes of code. I've been at this for about 18 years now, and I've been at this company for most of those years. There are many people who have far less experience than I have that that have gone far higher up the ladder while I have been stuck on the same rung for about twelve years. In the moments when I am most honest with myself I have to admit that I am not very surprised. While I believe that I have excellent technical skills, there are other parts of the analyst/programmer job that I am perhaps less skilled at.

A while back I read this article on TechRepublic about 10 types of programmers you'll encounter in the field. I enjoyed the article and was able to fit certain programmers I know into their appropriate archetypes. I thought about which one of these types best described me and settled on the cowboy. Doing a little more research on this topic I found that the cowboy coder is commonly used as a derogatory label of a programmer and generally describes someone who can't follow the rules or work with others. On the C2.com website someone had listed the following attributes of a cowboy coder.

The Cowboy Way:
  • The speed with which I can hack something together determines my worth
  • People who need comments in order to understand my code are too dumb to be working with me
  • People who ask me questions about my code are too dumb to understand it, and (therefore) are too dumb to be working with me
  • Other people's code is just crappy, but mine is self-descriptive and beautiful
  • Exploiting a compiler-dependent language feature to save a line of code is "elegant"
  • Other people on my team cause all of the bugs; I'm the one that fixes them
  • My code is never at fault, always perfect, and I don't make mistakes
  • Since my code is never at fault, I don't need to test it thoroughly, if at all
  • Since my code is always perfect, it never needs to be refactored no matter how long it's been in the codebase or how much has changed around it
  • Since I never make mistakes, I can yell at anyone else who does
  • Since my code is perfect, if the program crashes due to unexpected data, it's the user's fault for entering bad data.
  • Since my code is perfect, if the program fails after a minor machine configuration change, it's the sysadmins fault for changing it.
  • Since my code is perfect, if the program runs too slowly, it's the managements fault for not providing a faster machine.
I find this list to be utter crap and I believe it says more about how the authors felt about cowboys than it does about the programmers they were labeling. I always thought of a cowboy as being a skilled and hardworking type of guy. My perception has also been shaped by the Hollywood portrayal of the typical cowboy as a strong, silent, and honorable character who is perhaps a bit rough around the edges. I don't feel the attributes listed in "The Cowboy Way" reflect the true character of cowboys and I don't think they describe me either. I did like the "force of nature that cannot be stopped" comment from the TechRepublic article. If I could add some other type descriptors they would be:
  • Hard working.
  • Takes pride in their work.
  • Always willing to put in the extra time to see that a project is completed on time.
  • More concerned with getting things done than with career goals.
  • Perhaps a bit more direct or abrupt than most people are accustomed to.
Well, that's the way I see it anyhow. That's the type of cowboy I would want to be if I were one. Giddy-up!

Friday, August 14, 2015

TIS-100: My perfect storm

If you know me then you know I like playing computer games. I can remember the first time I ever touched a computer sometime in the early 80s. It was a Commodore PET computer that was in the library in my school for some reason. The first thing I wanted to know was how to make it play games. I was 9 or 10 years old, I had never touched a computer before, but I somehow knew that it could provide me with super fun entertainment. Since then I have never gotten over the feeling that playing games is the best possible use for a computer.

I also love to program computers. There was a book in the same library name "Basic Computer Games" by David H. Ahl, and I would spend hours typing those programs into the computer just to play them. This led to an interest in learning BASIC so I could write my own programs, which led to my getting a computer science degree, which led to me getting a job programming. Ten year old me thought that I would write computer games for a living. I'm sure he would have been disappointed to find out that 44 year old me still doesn't write games for a living. Maybe if I wasn't playing all those damn games I might of gotten around to it, but the blog post about giving up on your dreams is for another time.

The other day I was poking around in the Steam store looking for something new to play. I'd been on a Minecraft and Company of Heroes 2 kick for a while but I was getting bored and I needed something new. I'm not sure what led to my finding it, but I ran across a game called TIS-100. It looked odd, but it got overwhelmingly positive reviews from its users. It was a programming game! In the game description it states "It’s the assembly language programming game you never asked for!" With a price of only $6.99 it was a no-brainer decision and I clicked the "Add to Cart" button and purchase it.

The game recommends that you print out and read the manual prior to playing. Most game manuals these days are horrible and useless pieces of dookie. This is not the case for TIS-100 as you won't be successful in the game without reading the manual. This manual delightfully describes the language you will use as well as sets the background for the story you uncover while "playing" game. I even enjoyed reading this manual.

The language is Assembly like. It has been 25 years since I programmed anything in Assembly but I recognized the mnemonics used, and the number you are given to use is quite small which is part of the challenge. The registers are small, and strangely only hold values from -999 to 999 (a base 10 computer?). Only ADD and SUB are supported for arithmetic. For an example of how simple the language is, here is some code I wrote to divide a value by two:

  MOV 0 ACC  
  SWP  
  MOV UP ACC  
 L:SWP  
  ADD 1  
  SWP  
  SUB 2  
  JEZ DON  
  JLZ DON  
  JMP L  
 DON: SWP  
  MOV ACC DOWN  

The game challenges you a number of increasingly more difficult programming puzzles. Sometimes I would read the description of the problem and I would think "this can't be possible!", then sit and think about it for long time and eventually figure out a solution. I even found myself thinking out solutions while in bed trying to sleep, and writing notes to myself in meetings and during lunch. It was becoming an obsession with me. I found my self working on problem in my basement office when I realized it was 3 am in the morning and I had to go to work in a few hours. Only special games cause me to make terrible life decisions like that.

Fortunately for me, this game eventually ends. It comes with about 50 puzzles to solve, and when you are done you can go back and try and make your programs more efficient. The game lets you know you well your program compares to all the other solutions that have been programmed by other users, so it has a small social aspect to it. Once I solved all the puzzles and and obtained all but one of the Steam achievements for the game my obsession ended, and I moved on to other interests. The storm petered out so to speak.

This game combined two of my favorite activities: playing games and programming. I enjoyed it, and felt I got the most I could from my $7 purchase. That said, I can't recommend this game to everyone. I'm not sure, but I think it would appeal mostly to people who have an interest in programming. If you have ever been a programmer or are even only slightly interested in programming you might want to check this game out.