New Github repo: URLParams

I spent more time than I’d have liked last week fixing an issue related to the intermittently incorrect appending of UTM parameters to URLs. Basically, the code worked fine if the link was “basic”, but if it already had  parameters, a second question mark would get added. Since URLs cannot have two question marks, the link would break.

Adding parameters to links sounds simple, until you “roll your own code” and discover issues like– making sure your parameters are URL encoded, and checking to see if the link already has parameters, etc. I decided to capture these hard-won lessons in a JavaScript class called URLParam, and it’s freely available at GitHub.  (It’s worth mentioning– although ES6 classes enjoy wide support across Chrome, Firefox, Edge, Safari, etc., they are not supported in any version of Internet Explorer.)

I hope you’ll find this useful– both in the sense of finishing a coding task faster, and having fewer issues to resolve after deployment.

Book Review: HTML5 Applications

I picked up Zachary Kessin’s book, HTML5 Applications, at a used bookstore and tried to read it recently. It was not a pleasant experience.

To be fair, this book was published in 2011 and a lot of the specific details have changed in the seven intervening years.  The BlobBuilder() function, for example, has been subsequently deprecated. It would be unreasonable to expect a printed book to anticipate and adapt for this kind of change, obviously, and I don’t fault the author for this.

Here’s an example of the kind of frustrating problems I had with the book in addition to the material being changed:

Because JavaScript is a case-sensitive language, the correct methods should be fadeIn and fadeOut, rather than all lower case. Granted, developers already familiar with jQuery will know this and adjust accordingly, but a technical reviewer should have caught this and set it right before it got to print.

Similarly, in a later portion of the book where Kessin is explaining the filter() method, an even function is referenced– even though it is never defined anywhere else on the page. Again, an experienced JS developer will be able to infer the need to define an even() to make the code work, but expecting readers to “just know this” and “fill in the blanks on their own” doesn’t contribute to a positive reader experience. It’s precisely these sorts of omissions which make learning new material frustrating instead of enjoyable, because you feel like you’re spending more time fixing someone else’s code rather than learning new material.

The section on Testing JavaScript Applications with QUnit and Selenium were fairly decent, and some material in the New Tags chapter was helpful, but I’ve found it necessary to put notes in the margins of several pages to keep track of omissions and updates.

Education Through Minification

While puttering around with JavaScript minification earlier this morning, I noticed this:

if ( a % 5 === 0) { b += “buzz” }

was transformed into this:

a % 5 === 0 && ( b += “buzz”)

I’ve seen similar JavaScript cleverness with the OR operator to either preserve a previously defined object or create a new one if it isn’t already defined, but it never dawned on me a similar thing could be done with an AND operator simulating an if statement.