There is Nothing More Depressing Than a Bad Motivational Speaker

Today, I had the misfortune of having to sit through a motivational keynote speech at a local college.  Without a doubt, it was the worst motivational speech that I have ever heard.  I spent most of the first 30 minutes plotting my escape.

The speaker had no real life experience, no real accomplishments, aside from starting a motivational speaking and training business.  His crowning accomplishment was, “breaking six figures,” which he accomplished by working full time in addition to running this business.

Thankfully, about 30 minutes in, the speaker had everyone stand up for some “active participation” (for the third time), so I able to politely walk out while he asked everyone to introduce themselves to the strangers around them (for the second time).

I quickly left the auditorium and skipped the remaining breakout sessions.

I have to say that I’m continually surprised at how some people are able to carve out careers and succeed within the fabric of our society.

If this guy can be a success anyone can.

Terrible Motivational Speaker
Posted in Uncategorized | Leave a comment

Douglas Crockford on JavaScript and JSON

One of the things I both love and hate about being a professional software developer is having to continually learn new technologies and languages.  I started writing code in Applesoft BASIC and 6502 assembly, drifted through my Pascal phase and entered my professional career using C.  Later came C++ and Java and a slew of APIs, operating systems and hardware platforms.

Early in my career, it was possible for you to know everything about a computer platform — from the boot loader to the file partitions to the drivers, to the user mode code.  And write code for any and all, as it was necessary.

Now, as I get older, especially with web technologies I see a continual cycle of software churn. 

In the past, like many professional software developers, I had very low opinion about JavaScript, because amateurish way it was used and grew up.  I would always reach for any “better” way of doing something before I defaulted to JavaScript in a web page.  Anything seemed better than JavaScript. 

But lately, I’ve been writing a lot more JavaScript application and I’ve had to take a fresh look at my JavaScript development.  So when I saw Doug Crockford’s presentations, they resonated with me, so much so that I’ve decided to share them here.  

Watch Douglas Crockford At Google Speaking On “JavaScript: The Good Parts”

Doug Crockford gave this presentation, one of the excellent Google Tech Talks, where Doug goes over the ideas behind his landmark book, JavaScript: The Good Parts, and dives into the areas of what JavaScript got right and what it didn’t.

The JSON Saga

Douglas Crockford tells the story of how JSON was discovered, the history behind it and how it became a major standard for describing data:

Posted in JavaScript | Leave a comment

Rebates and Refunds Take the Form of Nearly Useless Prepaid Debit Cards (and how Citibank Lost a Customer)

Long ago, I gave up on rebates.  In most cases, most of the rebates I sent in were simply never honored.  Now, when I see a rebate for a product, I don’t buy the product.  Period.

As a result, I never noticed the shift in the rebate industry from paper checks to debit-card-like-gift-cards.  Companies are now issuing are issuing debit-card-like gift cards instead of rebate checks, which come laden with so many restrictions and catches it renders them nearly useless.

Unfortunately, these debit-card-like gift cards are becoming malignant and encroaching on other areas of my life so I cannot avoid them.  I received one from the university that enrolled at, just in case I get a refund.  I noticed today that a local community college is now issuing them to every enrolled student for the same purpose.  You don’t have a choice.

However, I was personally surprised when I received a rebate debit-like gift card from Proctor and Gamble.  It took a few minutes for me to connect the $203 rebate card with the refund I was expecting for returning a Braun shaver that broke in the first 30 days after Christmas.  Eight weeks after returning the expensive broken electric shaver at my expense,  I received a shiny new card, “for [my] convenience.”

The debit card is so convenient that:

  • it cannot be used at an ATM;
  • it has a $3.00 monthly maintenance fee after three months;
  • it cannot be used at the gas pumps, it has to be used inside the service station, but only as a credit transaction (not a debit transaction);
  • it can only be used for a maximum of 12 transactions in a single day;
  • it cannot be used to pay your other credit cards;
  • it has a convenient $6.95 replacement fee if you loose the card;
  • it must be run as a credit card, not a debit card.

A paper check would have been far more convenient.  Seriously.

Most importantly, I’ve found that the cards are a tremendous hassle at best.  Why?  Let me give you an perfect example.

At first, there wasn’t any issues.  I successfully used it at three restaurants.  However, when I tried to use what was left on the card, things got progressively more difficult.  If you use the card at a self-service checkout, you cannot split the transaction.  You can only use one card.  Some retail cashiers simply cannot understand the concept of splitting a retail transaction on multiple cards.

The card was denied when I tried to make an online order for some tools at harbor freight.  I sifted through the internet looking for clearance sales on things I wanted to no avail.

Frustrated, I finally decided to burn the rest of the card and turn it into an gift card.

I logged into Citibank to check the available balance.  The card had $65.61 left on the card.  I ordered an gift card for $65.61, and after a few minutes I received an email telling me that the card had been denied.  I called the number on the back of the card to find out what happened and I learned two things: 1) it is impossible to navigate the phone system to talk with a real human, and 2) the available balance on the card is $64.61.  One dollar was missing, probably as an authorized hold.

I burned the $64.61 and hopefully the $1.00 will be available in the next week so I can order another gift card for precisely $1.00.

Next, I thought about how Citibank had done just about everything it could to keep me from getting all of my money, forcing me to use the card so they could rack up swipe fees while I try to get the full amount of cash out of the card.  Why on earth would I do business with Citibank?

The pettiness within me prevailed and I self-righteously decided I would cancel my Citibank AAdvantage card, which had just sent me a form letter informing me that they were raising the yearly membership fee, probably “for [my] convenience.”   

I called the number and while talking to the first customer service representative I got imagedisconnected mid sentence.  I called back and had to listen to two advertisements about balance transfers and the Citibank AAdvantage card before having to wind my way through the telephone navigation system.

I cancelled the Citibank AAdvantage card and tonight, I’m no longer a Citibank customer, or at least I won’t be after I get my last $1.00 from that card.

Posted in Finance | 1 Comment

How Nyan Cat Saved My Web Servers from Evil Chinese Hackers

Screen shot 2012-03-10 at 12.55.32 PMMy websites were under constant and never ending probing from overseas.   All day and all night, my site was being hammered with requests for software I didn’t even have installed.

As an aside, if you are thinking about outsourcing the setup of your webserver, I’d want to make sure the person with whom you are contracting knows what they are doing.  Many of the scripted attempts center around looking for PHPMyAdmin and other web based administration packages that may be poorly configured or installed.  I’ve decided never to use those packages, and if I did, I’d sure as heck install it somewhere other than the default path.

Screen shot 2012-03-10 at 1.11.01 PMIn any event, I was getting probed like crazy and my error logs were littered with requests or various packages for lazy administrators and 4-hour work week outsource-your-life types.

At first, I started writing a script when someone tried to access one of the paths, which would add a dynamic rule to the firewall to block them at the IP level, or better yet simply block Chinese IP address blocks en mass.   Then I thought there might be a better low tech way to handle the problem.

I decided to add a simple page redirecting the user to a YouTube video of Nyan Cat.  Nyan Cat is an 8 bit animation with a loop of music.

Then something amazing happened.  The probing has almost stopped and now my error log only contains broken links that I need to fix (or new packages that have security vulnerabilities) and weird SEO reverse link spam.  Further more, the Nyan Cat video now has over 67,073,617 views.

Thank you Nyan Cat.

Posted in The Interweb | Leave a comment

Book Review: Getting StartED with Dojo


One of the clients that I’m working for is actively porting a large client/server application into JavaScript/Dojo.  The current application is several hundred thousand of lines of code in Java, XHTML, and JavaScript.

When finished, this will probably be the largest and most complex Dojo applications ever created.

The total sum of training received by the permanent team members consisted of a single class in JavaScript, and several shared copies of Peter Higgins’s book, Getting StartED with Dojo.

The consultants, of course, were not permitted any training, but when I saw this book being passed around, I purchased it for myself just to see what it contained.

Since I’ve read several other books on Dojo and this one was my third, I thought I would give my opinions on the book.  Overall, the text is an easy read, and the examples are extremely basic.  The author obviously took pains to explain the material.

However, be warned that some of the code examples are broken and won’t work.   As far as I’m aware, these haven’t been corrected, and there is only one edition of the book.  The book references Dojo 1.3; The current version is 1.7, but that really doesn’t matter considering what isn’t covered in the book – a lot of stuff.

The book is segmented into nine chapters. 

The first two try to cover basic JavaScript.  If you guessed that teaching someone a dynamic language like JavaScript within the scope of two chapters would be a recipe for two poor chapters on JavaScript, congratulations! You guessed right and have now finished 1/4th the of the book.

Furthermore, the book is punctuated by blocks of text with headers like, “NotED,” “ExplainED,” and “LinkED.”  While other authors would write notes like these as a inset sidebar, this author injects them randomly throughout the text which is disturbing if you are reading on a Kindle.  While reading about a topic, injected within the middle is a block pointing towards a website, a note, or a reference to another chapter.  On the kindle, these can span a page or more.

At this point, I have to wonder if Peter Higgins hatED his English teacher, or just had a crush on someone with the initials E.D., with the kind of love that burns so hotly it must be stamped on books.  What does ED mean?  Erectile Dysfunction?  Only Higgins knows for sure.

The next chapters cover in detail: dojo.byId, dojo.query, dojo.forEach, dojo.filter, dojo.create, dojo.attr,, dojo.connect, dojo events and listeners, dojo.fadeOut, dojo.FadeIn, animations, slides, and a few more tidbits.  To Higgins’s credit, he explains these concepts far better than anyone else.

Ajax is sparsely covered, but no server software or scripts are covered.  So in essence, it is only discussed.

The rest of the book discusses various topics, with few actual examples.  The last chapter entitled, “Where do you go from here?” has a few pages about ShrinkSafe, but doesn’t cover actually using it or setting up a custom build.

What it does not cover: the build system, building a custom version of Dojo, charting, the data grid control, any details about any of the widgets (calendars, pickers, etc), or the contents of DojoX.

Is this book the best book to learn Dojo?  Absolutely not, but it is an super easy introduction to get you started.  While it isn’t enough to implement a full blown Dojo app, it will give you just enough to start adding some widgets to your website. 

I have to note, this would be a excellent book to throw at someone to get them stop asking you basic questions.  If you are a lead on a Dojo project and are assigned resources without any JavaScript/Dojo knowledge, I would hand them this book and tell them to tell me when they are done so I wouldn’t have to teach them Dojo from the ground up.  That in of itself makes it useful.

If you are motivated and can setup a simple LAMP stack, you can finish the book in two days, including typing in and debugging the examples. 

Posted in Reviews | 1 Comment

Bose QuietComfort 15 (QC-15) Long Term Review


Three years ago, I purchased a set of the Bose QuietComfort 15 Acoustic Noise Cancelling over-the-ear headphones.  Here is my long term review of the product.

I’m easily distracted by noise.  A slammed door, shrill giggle, or foreign language conversation can destroy my productivity by pulling me out of the zone. 

So I after I flew back from Japan in business class, and used a pair (provided by American Airlines) for eight hours, I decided to purchase a pair of QC15s.  After 8 hours, there was no pinching, and pressure points.  Oddly enough, I wasn’t as mentally tired when I arrived in Houston. 

Since I would be wearing them for six to eight hours a day in a noisy environment, it seemed like a perfect fit.

What I liked

  • The cord is replaceable, so you don’t have to worry about a chair rolling over the cord and having to figure out how to repair the headset – you simply unplug the damaged cord and plug in a new one.
  • The sound quality is fantastic.
  • The headphones are very comfortable.  I wore them for six hours a day, only taking them off when I left my desk or someone stumbled into my cubicle.

What I didn’t Like

  • If you don’t have a battery, you don’t get any sound. I was using a battery every two weeks, so I had to keep a stash of batteries at my desk.  I switched to rechargeable batteries, and quickly found that I was changing the battery every week or week and a half.
  • Within the first year, the black leather in the ear cushions started to flake off.  I would end up with black specks of leather on my ears and face.  At first, it wasn’t entirely obvious to me it was from the ear cushions.  I would go into the bathroom, look up in the mirror and I had these dirty specks on my face.  This appears to be a common issue.
  • Next, the adhesive holding the fake leather to the inside of the ear cups gradually let go, exposing the foam insulation.
  • Lastly, during the third year, the headphones would develop a loud piercing high pitched feedback squeal. 

The squeal would start around the four hour mark and then if I turned my head I would get a high decibel squeal, like someone lets loose with an air horn.  I kept using the headphones, but the time to required to produce the squeal would decrease every week. 

I ultimately cracked the headphones open and cut the microphone in a futile attempt to get rid of the feedback.  It didn’t work.

I was using the headphones approximately six hours a day, five days a week, for 50 weeks a year.  That equates to 250 days, or 1,500 hours of usage per year.  $300/4,500hrs = $0.6666 per hour, or approximately $.40 per day to experience black flakes randomly appearing on my clothes or face with air horn quality shrieks.

Ultimately, the headphones lasted about 3.5 years and ended up in the trash can. I’m intensely disappointed in Bose.

I’m now using some Sony in ear buds that cost $20.  If they last 3 years, the cost per hour will be $4.444 x 10-3.  Much better bang for the buck and no flakes or shrieks.

Posted in Reviews | 21 Comments

How to Use RescueTime to Improve Productivity

Screen shot 2012-01-30 at 12.13.12 AMLately, I’ve been a bit overwhelmed by the sheer volume of tasks I need to accomplish. 

In the past, I’ve tried GTD with limited success, only to create a bunch of un-prioritized lists, categorized by context.  As a result, I ended up accomplishing a great deal of unimportant (yet satisfying) tasks, but ended up missing some deadlines with some painful consequences.

In one case, payroll provider neglected to deposit the required tax deposit on time and I was hit with a usurious penalty.  It wasn’t entirely my fault, but still it hurt.  It still took me months before I was able to properly fire them, move to another payroll provider, and fix all of the accounting issues.  It was a tremendous headache.

I learned a valuable lesson: prioritize your tasks, which doesn’t fit well within the GTD system.  GTD is focused on getting the most done, not the most important things done.

So this month, I renewed my focus on becoming a better manager of my time.

After I saw Randy Pausch’s Lecture on Time Management, I decided to audit my time with RescueTime.  I’ve been going on a week and so far, Randy was right on the money.  I was surprised at home much time I was wasting.

RescueTime is a great tool to help you get a handle on how you spend your time, and it compares your time against the average RescueTime user.  Today (Sunday) I’m hitting 74%, and I’m more productive than 91% of people.   There even a badge that highlights your efficiency compared to the user users.

A few days ago, I learned that I was spending way to many hours at home reading news and looking at MLS listings.  I stopped and my productivity shot upwards quickly.  Tonight, I’ve hammered out  a slide deck, completed several class assignments, and am coding again. 

Maybe you should give RescueTime a try too.  It is free.  What do you have to loose?

Posted in Time Management | Leave a comment