Category: Book Reviews

Reviews of books featuring a summary of the book and links to related material

Book review: JavaScript Patterns by Stoyan Stefanov

More technology related reviewing next, JavaScript Patterns by Stoyan Stefanov. This is part of my continuing effort to learn JavaScript.

For me this isn’t a question of learning the nuts and bolts of a language but rather one of learning to use it fluently and idiomatically.

I thought this book might be in the spirit of the original “Gang of four” design patterns, but although it mentions these design patterns it is more generally about good style in JavaScript. The book is divided into eight chapters including an introduction.

The first substantive chapter on “essentials” talks mainly about variable declarations and some odds and ends. The most interesting one of these was the behaviour of parseInt which converts a string into an integer. Except if the string starts with a zero, as ISO8601 days and months would, then parseInt assumes it is a number in base 8 (octal)!! I can foresee many long hours trying to debug this problem without this forewarning. This chapter also discusses the importance of coding style conventions.

The second chapter talks about literals and constructors. It strikes me that much of this is about unwinding the behaviour of developers more used to statically-typed languages. The JavaScript way is to create objects by example, rather than take a class definition and derive from that. Although in the permissive manner of many languages it will let you do it either way. Since this book was written JavaScript has gained a “class” keyword which allows you to construct classes as you might in Java or C#.

Next up are functions, JavaScript shares Python’s view of functions as objects, allowing them to be passed as arguments. This is particularly important in JavaScript to provide “callback” functionality which is very useful when doing asynchronous programming. I learn here that the “currying” of function is named after Haskell Curry, who also has a whole language named for him. I always feel when passing functions as arguments that I am fiddling with the underpinnings of reality – it can make debugger difficult too.

I found the idea of functions that redefine themselves on first run interesting, it sounds useful and dangerous at the same time.

The chapter on object creation patterns is all about introducing module like behaviour and namespacing to JavaScript which at the time the book was written were not part of the language. Also covered are making private properties by hiding them in function closures.

The code reuse chapter is largely about patterns for achieving inheritance-like behaviour. This introduces a range of patterns which build up to almost exactly replicate class-based inheritance.

Finally we meet some of the classic Gang of Four design patterns. Some of these patterns, such as the iterator pattern, have been absorbed entirely into the core of languages like Python and more recently, JavaScript. The Observer patterns is implemented in web browsers as events, which are ubiquitous. Perhaps the lesson of this chapter is that some of the Gang of Four patterns have been absorbed into the core of languages, we use them almost without thinking. The Strategy Pattern, which determines algorithms at runtime, fits well with the chapter on functions and JavaScript’s view of functions as objects.

The book finishes with a chapter on patterns for the Document Object Model, or rather JavaScript in the browser. It includes well-known advice such as not testing for browser type but rather testing for functionality. It also has advice on optimising JavaScript for deployment.

There is minimal mention of specific tools or libraries in this regard, although Yahoo’s YUI library is mentioned a few times – Stefanov has worked on this library so this is unsurprising, and not unreasonable.

This book had more of the air of Douglas Crockfords’ JavaScript: The Good Parts than a book on patterns which was what I was expecting. Alternatively perhaps “JavaScript for users of statically-typed languages”, as such it probably works pretty well for Python programmers too although modules have always been built-in to Python and there is a “class” keyword for specifying classes.

JavaScript Patterns is readable though, I’m glad I picked it up.

Book review: The Birth of Loud by Ian S. Port

birth_of_loudMore guitars next with The Birth of Loud by Ian S. Port, this is the story of Leo Fender, Les Paul and assorted musicians and other guitar and amplifier makers.

As a recently started electric guitar player, and long time listener of guitar based rock, this is right up my street. It is most likely that any electric guitarists reading this will have a guitar with either the Les Paul or Fender name on it, or like me, have a cheaper variant of something like the Fender Stratocaster.

People started to attach amplifiers to guitars in the 1930s, the problem with a guitar is that it is not very loud when compared to other instruments. The problem with naive amplification of an acoustic guitar is feedback. The body of the guitar is a natural amplifier, it resonates at particular frequencies. Couple it with an electric amplifier and once you get above a certain volume the electric amplifier makes the body of the guitar vibrate, which it then re-amplifies making a horrible squealing noise (when done accidently). I know all this because feedback is an important part of undergraduate physics courses! Solid-bodied guitars avoid this problem by having no natural amplification.

Les Paul was a musician who experimented with instruments, guitars in particular and recording technology. He had a string of hits in the 1950s with his second wife, Mary Ford. He gave his name to the first solid body guitar from the Gibson company. More importantly he demonstrated what the new electric guitar could do. In terms of guitar hardware Les Paul feels somewhat incidental, as a musician he experimented with his guitars and recording equipment but he had very little involvement with Gibson and the guitar that bore his name.

Leo Fender on the other hand was a technician, an expert with design and electronics. He collaborated closely with musicians to bring them the instruments and amplifiers they wanted but he did not play music himself.

Both men had produced solid-body guitars in the 1940s which were pretty close to fence posts with strings and pickups attached. Such devices worked as guitars but ergonomically and aesthetically they were poor. They weren’t alone though, Paul Bigsby made what is arguably the first practical solid-body guitar and lap steel guitars with solid bodies had also been around for a number of years 

Fender’s first solid-body commercial guitar was the Telecaster launched in 1950, renamed pretty much at birth from Broadcaster because Gretsch had a drum kit called the Broadkaster and threatened to sue. This was followed by the Precision Bass (1951) whose design is also apparent in the Stratocaster which came later (1954). These instruments had somewhat prolonged and difficult births. Fender was keen to perfect them, and whilst his sales team led by Don Randall went out and sold them there were frequently long waiting times in the early days and designs were finalised and production ramped up. The early Fender factory sounded rather chaotic, and there were problems with product quality. The Gibson Les Paul was first released in 1952.

It strikes me that the Les Paul / Leo Fender rivalry is actually relatively unimportant. Les Paul was one a a range of musicians whose demands drove the development of electric guitars and amplifiers. If Fender had rivals it was with Gibson, Rickenbacker and other guitar companies. They vied for the imprimatur of the popular artists of the time, Les Paul initially but then musicians like the Beatles, Eric Clapton, and Jimi Hendrix.  

Carol Kaye is also introduced, I first came across her in a BBC4 TV programme Guitar, drum and bass. She appeared as a bass player on an enormous number of hits from the sixties, playing as a highly sought after session musician at a time when you get the impression that songwriters didn’t bother writing a bass part but left it to the session player to come up with something on the spot. The link with Fender is the Precision Bass she used.

I had fun hunting down some of the tracks mentioned in the book, Dickie Dale and the Del-Tones – Misirlou is a particular favourite which I’m trying to learn to play. Fender’s contribution to Dickie Dale were robust high watt amplifiers with spring reverb which made the surfer rock sound. And if you want to hear Les Paul then Lover published in 1948 is an important milestone. It is like nothing else that went before.

The bulk of the story ends at the close of the sixties with an epilogue describing what happened to everybody in the aftermath. Both Fender and Gibson became parts of larger organisations, CBS and Norlin respectively. They both seemed to have suffered from corporate neglect, leading to poor quality products, until they experienced a revival in the late eighties following sales to private investors. Gibson recently filed for bankruptcy whilst Fender seems to have thrived.

The book is comprised of many short chapters with long titles. It’s a very easy read, and a nice story. There’s a lot of the descriptive prose of imagined meetings and scenes that I associate with this style of journalistic story telling. It is well referenced, and the final sections of the book provide ample pointers to those who wish to learn more about the history of the electric guitar.

Book review: Eloquent Javascript by Marijn Haverbeke

eloquent_javascriptThis is a review of a more technical book, Eloquent JavaScript by Marijn Haverbeke. The book has the appearance of being about learning programming from scratch but I suspect anyone using it as such would struggle. However, if you have some background in programming it is something of a delight.

The book is divided into three parts, on JavaScript itself, the web browser, and node.js – where JavaScript can run without a browser. Along with a description of the core features of the language there are some significant examples, elaborated over full chapters.

These are quite engaging although a bit off the wall. One concerns were-squirrels, another crows, making a pixel art editor and a platform game seem rather tame in comparison. These examples show you how you should use language features, rather than just giving you a pile of bricks from which to construct your building.

JavaScript has evolved since it was first introduced in 1995 with a major update in 2015 including modules, promises, and generators amongst other things – Haverbeke covers these (highlighting what is new). This is useful to know since I started programming in JavaScript a while back where I observed, for example, that arrays were looped over by index, but now I find I no longer need to do this.

Coming to JavaScript from another language I find the event driven, asynchronous features of the language most difficult to understand, and the older JavaScript way of using callbacks to handle these features produces code which is difficult to read – certainly to my eyes. Promises offer a clearer way of implementing asynchronous code. 

Importing modules still feels like an area undergoing much needed development. Originally JavaScript had no built-in functionality to handle modules, but this gap was filled with third party libraries. Now module management has been built into the language but a lot of legacy code uses incompatible third party libraries, and node.js doesn’t fully support the new module features (as far as I can tell).  Haverbeke mentions how some of these difficulties are handled with the toolchain associated with JavaScript.

JavaScript seems to have some pretty wacky features: month numbers start at zero, exactly like absolutely no system of date description I have ever seen. The case-switch syntax seems really odd, although I understand it is inherited from C/Java like languages. JavaScript’s try/catch functionality is indiscriminate by default which is considered bad style in Python although there are workarounds for this. 

Although I’ve been working with browsers and JavaScript for the last 6 years or so, I still learnt new things about how browsers work. Such as the different applications of the onclick attribute and addEventListener, the former only allows for one listener per element.

One of the examples uses “long polling” to demonstrate how to update a web page at regular intervals, or when the content changes due to actions elsewhere.

The material on node.js was new to me. I’m aware I should probably be writing tests for my JavaScript code, and node.js is the easier way of doing this. node.js is based on the Chrome V8 JavaScript engine with extensions for handling Input/Output amongst other things, features which belong on the server side rather than the browser, client side.

I quite like that, in common with Python, JavaScript uses convention to make class methods private. Basically programmers agree not to use a method if it’s name starts with an underscore! 

Python (my favoured language) and JavaScript both have the air of being little things designed to smooth your path rather than serious languages for serious projects like C, C++, Java, Fortran, and C#. However, Python is arguably the most important language in data science applications and many of the big internet companies have significant investment in Python code. Whilst JavaScript is arguably the most important language in the world at the moment, almost everything that happens in a web browser has JavaScript behind it.

The book finishes with a chapter on performance, I found this really interesting. JavaScript engines have a multi-stage approach to compiling JavaScript into executable code. It starts with a quick and dirty compile, but then returns to do optimisations if code is run frequently. Somewhat disconcertingly different JavaScript engines handle the programmers attempts at optimisation differently i.e. you can optimise your code for Google Chrome only to discover it runs more slowly in Microsoft Edge.

There’s no description of the JavaScript dev environment or tool chain in Eloquent JavaScript. Although I missed this it is probably best not to include in a book such as this – tools change rapidly and what works for one developer doesn’t work for another both in aesthetic and practical terms.

I think this is one of the most enjoyable programming books I’ve read. It covers the core features of the language concisely but then goes on to illustrate how to use those features. It also discusses the key environments in which JavaScript runs.

 

Book review: How brands grow by Byron Sharp

how_brands_growThe next book is another in my marketing theme How Brands Grow: What Marketers Don’t Know by Bryon Sharp. The core message of the book is that marketers have a lot of wrong ideas and empirical, scientific research can disabuse them of these notions, Sharp terms this new world “evidence-based marketing”.

I see a pattern in the form of the marketing books I have read: they both started with short form summaries of the main conclusions of the book. In Behavioural Marketing these were tweet sized chunks. In this book they are a set of laws: double jeopardy law, law of buyer moderation, natural monopoly law. The chapters discuss each of the laws in turn. The conclusion repeats these laws. It follows the scheme my PhD  supervisor taught me for academic presentation “tell them what you’re going to tell them, tell them, tell them what you told them”.

Sharp, who authors most of the chapters, works at the Ehrenberg-Bass Institute, perhaps it is following his own marketing advice but this seems to get mentioned in every chapter, several times.

The core of the laws is that much of the observed outcomes of brand performance really just come down to brand penetration (the share of the market that a brand has in terms of the number of customers and the frequency of purchase), and the essentially random behaviour of consumers. Loyalty to a brand is a bit of an apparition, brands maintain their position not because the same people buy from them repeatedly through loyalty but because consumers move from brand to brand somewhat at random but biased by the market share of a brand. So big brands gain and lose customers from sale to sale in greater numbers than small brands but as a proportion they do slightly better than small brands because an infrequent customer is more likely stumble on a big brand than a small one.

A second important feature is the distribution of buyer frequency. There are few frequent buyers of any brand, the shopper that buys Coca Cola 3 times a day, but there are many infrequent buyers – someone who buys Coca Cola a couple of times a year. Most brands have a distribution of consumers where the top 20% contribution at best half or so of the sales of the brand. This is rather less than the 80/20 Pareto law. It means that the long tail of infrequent buyers is important. Sharp is keen on citing the negative binomial distribution (NBD)-Dirichlet theory. It strikes me this isn’t a theory, it is a description of a distribution, the features of this distribution can be used to explain observed market behaviour.

Sharps conclusions on acquisition and retention are interesting, he argues that brands grow by acquisition rather than reduced retention. All brands lose some customers to their rivals at each purchase but acquisition and loss are generally proportional to the market share.

What surprised me was that even for brands with famous brand loyalty such as Apple, the degree to which “Apple buyers” buy other brands of computer is quite high i.e. 50% or so. And there aren’t really brand demographics, except in extreme cases such as rich people buying expensive items, and children watching children’s TV. There isn’t a “Ford buying demographic” and a “Renault demographic”. It isn’t even that there are generally customers committed to a particular price point, customers buying a premium brand are quite likely to buy a bargain brand as their next purchase. Niche brands turn out to be just a polite way of saying small.

Fundamental to all of this is that consumers care a whole lot less about brands, and their differentiating features, than you, the marketer, ever will. As consumers we just don’t care. And so the role of advertising is to shift the needle in terms of simple recognition. When it comes to my desire to buy a brown, sweet fizzy liquid to drink the special features of a particular brand are unimportant, the image a brand tries to project about itself is unimportant, the special demographic the brand tries to hit is unimportant. All that is important is that I remember the brand, the packaging and that it is on hand when I make my occasional decision to buy a brown, sweet fizzy liquid.

This seems to go against the idea of behavioural or targeted marketing, although perhaps the distinction is that the “bad” targeted marketing is based on demographics, age or gender, whilst the “good” targeted marketing is based on behaviour, abandoned baskets or opened emails.

I enjoyed this second foray into marketing, How Brands Grow is well-structured and relatively easy reading. I found the ideas it contained intriguing and the methodology is in tune with my background as a physical scientist.

Book review: Hedy’s Folly by Richard Rhodes

Back to some history of technology with hedys_follyHedy’s Folly by Richard Rhodes. This book concerns the patent granted to Hedy Lamarr, Hollywood actress, and George Antheil, experimental musician, for the frequency hopping radio communications system. Originally it was intended to allow secure, jamming resistant communications between torpedoes and their control aircraft or ships, nowadays it is most notably the basis for Bluetooth and WiFi communications.

I’ve previously read Richard Rhodes “The Making of the Atomic Bomb”, which is a massive tome, Hedy’s Folly is a rather more modest affair. It provides some biographical material on Lamarr (born Hedwig Kiesler) and Antheil but only in as much as it leads to the patent of the title.

Hedy Lamarr was born in Austria in 1914, to a wealthy family – her father was banker who clearly cultivated her interest in how things worked. Following a brief career in European theatre and film she married Fritz Mandl in 1933. He was an arms manufacturer and one of the richest men in Austria. He didn’t want to see his wife continue her acting career. On the death of her father Lamarr resolved to leave her husband but in the interim she paid close attention to the technical discussions on armaments which she was party to. In all likelihood she was doing this throughout her marriage, despite his controlling nature Mandl clearly valued her opinions (even if he didn’t like them). Lamarr then moved to the States with Louis Mayer of MGM for whom was to make a number of films. In this milieu she met George Antheil.

Antheil in Trenton, New Jersey in 1900. He travelled to Europe in 1921 where he composed the Ballet Mécanique, originally intended as the score to a film it ended up twice the length of the film. As originally envisaged Ballet Mécanique required 16 player pianos and an aeroplane propeller – amongst many other sound making devices. Essentially Antheil vision was much in advance of what technology in the twenties and thirties could deliver. The player piano plays a part in the story. Player pianos were briefly popular as a way for everyone (who could afford one) to make music, they were automated pianos programmed using a paper roll with holes directing the music. The operator simply had to provide power and rhythm. They were supplanted by radio. The important feature was the ability to control sound automatically.

Antheil returned to the US, to Hollywood, in 1936 where he turned to writing film scores, his experimental music proving rather unpopular. It was here he met Hedy Lamarr.

The spirit of the Second World War in the US was that everyone would do what they could to help. Antheil had a sideline in writing about endocrinology, and made suggests on how to defeat the Nazis by this approach. Later in the war Hedy Lamarr was to do considerable work in encouraging Americans to buy government bonds to support the war effort, as well as volunteering at the Hollywood Canteen – entertainment for servicemen.

Lamarr was an inventor in her spare time, her background meant she knew the problems faced with torpedo guidance. So it was not unsurprising for her to work with Antheil on a frequency hopping patent for torpedo guidance. The central idea of the frequency hopping patent was to transmit radio instructions between controller and torpedo over a series of radio channels at different frequencies switching synchronously between channels. In the original patent the number of channels used is relatively small (less than 10), hops are relatively slow – of order minutes and were controlled by a player piano style roll.

The US Navy chose not to develop the patent, stating that the apparatus was too bulky. This seems to be a bit of a misunderstanding – the player piano inspiration was indeed quite bulky but could easily reduced in size using current technology. More likely was the fact that US torpedo performance at the beginning of the war was abysmal – 60% of torpedos experienced technical failure, so it was likely they had other priorities. 

Lamarr and Antheil’s patent on frequency hopping expired in 1959, the US military implemented several frequency hopping systems from the beginning of the sixties. As technology improved it evolved to so-called spread spectrum techniques. The difference between frequency hopping and spread spectrum is really just one of scale. These techniques finally became public in 1976.

Spread spectrum techniques eventually found important applications in Bluetooth and WiFi. Originally designed to be resistant to jamming – the deliberate use of noise to block signals – it is also resistant to unintentional noise. Furthermore it can be used with very low power transmissions so it can cohabit with other signals used for longer range applications and parts of the electromagnetic spectrum where there is a lot of noise.

Hedy Lamarr’s part in the development of frequency hopping is finally being recognised, and George Antheil’s more experimental music is finally being recognised too – technology has now reached the point where his original vision can finally be realised.

This is a fascinating little book, focused on one small invention with huge consequences. It isn’t a biography of Hedy Lamarr, and it isn’t a biography of her co-inventor George Antheil.