Mar 29 2019

Book review: Intermediate Method by Justin Sandercoe

intermediate_courseIt is possibly inevitable that my guitar playing has leaked into my book reviewing, or that time I should have spent practicing has gone into reading books, or buying gadgets. So far I have been well-behaved on the guitar buying front, my guitar count is still at one.

However, I have bought a Boss Katana 50 amplifier which counts as saving money since it simulates other amplifiers! As well as 5 amplifier models it allows for 3 effects to be chained together to such as reverb, chorus and overdrive. has a whole section on the amplifier (link), this includes downloadable settings which if you’re playing correctly will give you the same tone as Justin and the original track. Any differences in sound will be down to your skill.

But back to the next book, Intermediate Method by Justin Sandercoe is the follow up to the Beginner’s Course I reviewed previously. I reviewed the Beginner’s Method when I’d worked most of my way through it, this one I’m reviewing after just reading it and trying out a few of the new things.

The Intermediate Course contains five stages in contrast to the nine in the beginners stage, it finishes with a section on different improvisation styles including jazz and fingerstyle playing. The stages tend to develop ideas in previous stages rather than each stage representing a new area. Four months after I started playing it is probably a bit soon for me to be working seriously on this course, although I have a good memory for chord shapes and the minor pentatonic scale my playing is really slow which I think will only be fixed by practice. I could do with learning some more songs too. Justin pitches this very much as an optional course, the Beginner’ Course should leave you competent to play a wide range of tunes.

Barre chords were introduced towards the end of the Beginner’s Course, in this course they are expanded and developed further — indeed barre chords are the main chord work of the book. The beginner’s course just looked at the Major E-shape barre-chord, here we meet the variants of the E-shape (minor, dominant 7th and minor 7th), as well as other shapes (the A-shape and the diminished/half-diminished). One of my achievements playing guitar is a fairly good barre –gained by practicing bits of Creep by Radiohead excessively – it isn’t yet entirely useful since I can’t change very quickly.There are still some of the one minute chord change exercises which I found really useful in the beginner course.  

A new feature of this course is an introduction to standard musical notation. TAB notation works very well for guitarists since it tells you where to put your fingers but it doesn’t provide a visible sign of the rise and fall of a melody also other musicians don’t speak TAB.

The beginner’s course introduced the minor pentatonic scale, here we learn the major scale, the blues scale and a hybrid scale. The importance of scales is that they provide a basis for improvisation.

The intermediate course also covers some more advanced techniques including note bending and hammer on/flick off. This is handy because any cursory glance at guitar tutorials on YouTube will show tutors using these techniques fairly casually. As for the beginners book, Intermediate Course works best in combination with the video tutorials on the website (which are free). I read the Blues material but the website pulls it together more clearly than the book and certain technical skills are very hard to learn off a page. nI particular the online course talks very clearly about using licks (short runs of individual notes) as “words” in a Blues language.

Alongside the course books there are also Songbooks, I have the Beginners Songbook and the Rock Songbook. These complete the online videos well, provided a record of chords and TABs for what can be complex songs.

I should probably review my “learning journey” at this point, I think the way forward here is to pick a few songs and learn them properly, maybe making a recording. Ideally these should focus on improving particular skills. So far I’ve learned riffs from a few songs – Seven Nation Army, Smoke on the Water, Teenage Kicks, Creep but not really the whole thing. The only exceptions to this are Link Wray’s Rumble, which is pretty simple and I’ve been practicing a 12-bar blues which varies from the version Justin teaches with an intro and an “outro”.

Although I’m not ready to work through this book systematically I’m glad I got it now.

Mar 20 2019

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.

Feb 18 2019

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.

Feb 13 2019

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.


Jan 30 2019

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.

Older posts «

» Newer posts