McLaren Experience 2016 – Monterey Car Week

experiene.banner

What can I say, McLaren knows how to build a car, put on a show and a party. In the past it’s been the 650S and P1 car launches, special events etc; but few things are as fantastic as test driving a McLaren!

Having spent a few days in the amazing MP4-12c (I even rented one for my 50th birthday), then test driving the then brand new 650S around Pebble Beach in 2014, I of course leapt at the chance to get behind the wheel of their latest car, the Sport Series (aka 570).

test.drive.mule.mclaren.sportseries.gt
With an amazing test route loop on the infamous Laurels Grade before me, with great excitement I slipped behind the wheel of the above beauty!

After a quick overview of the vehicle operation, I was off! The first thing I noticed was the steering felt a little more connected to the ground than the MP4-12c, the car was really feeding back information on what was going on. Lucky for me traffic was mostly non-existent as the car rapidly announced that I’d exceeded the road’s speed limit (interesting feature… could really come in handy for those times you sort of get lost in the throttle and didn’t notice a change in the speed limit… for those that care about such things).

It was a spirited ride for certain. On the return leg of the test, I popped the car into auto-mode, and mashed the throttle. I was surprised to watch the tac blast past 8000 RPM as the twin-turbo V8 snarled behind me.. tires complaining… traffic rapidly disappearing behind… I LOVE IT!!

Although the entry-level McLaren.. the 570 is a satisfying drive. And dare I say it.. I think it looks better than it’s “bigger” MP4-12c and 650S family members. I wish I’d had a GoPro with me to capture the experience… but it’s one I won’t soon forget!

If you’re in the market for quarter-million dollar sports cars, give the McLaren Sport Series a drive. With two models (GT and S), you should be able to find what you’re looking for.

MclarenExperience_001
Here are 2 more Sport Series, waiting for the next test drivers to take the wheel. I think you can see a little more of an Italian flare in the front design, and I like it!

MclarenExperience_002
Quite a lineup here… almost the full family was represented here (I did find an F1 the next day at Laguna Seca).

MclarenExperience_003
I’m not much for white cars (which you might get looking at my fleet).. but I think the Sport Series looks pretty good in white. Now.. if one could only graft the GT front end onto the now (relatively) inexpensive MP4-12cs.. it would be a match made in heaven!!

MclarenExperience_004
MclarenExperience_005
Now.. no experience is complete without the fully off-hook full-tilt boogey P1. Here is one showing off it’s full carbon fiber construction. Just an amazing looking and sounding car. For the limited and fortunate few that were able to purchase one… I can only guess how getting behind the wheel must be akin to driving at ’11’.

MclarenExperience_006
The test-drive mule I got to flog.. even in that color I LOVE IT.

MclarenExperience_007
Another really interesting color on a 570. Here the nose clip looks vaguely La Ferrarish; which is what make me feel like this model has a little bit of an Italian flare.

MclarenExperience_008
Again, the P1. All carbon, all the time.

MclarenExperience_010
“The Crew” (most missing Beth, she was busying being part of a documentary McLaren was making that day). Carsten, Shawn, me, Moh. Yeap, we were all having fun driving cars and enjoying the hospitality.

MclarenExperience_011
MclarenExperience_012
One of Emerson Fittipaldi’s M23A/9 F1 car from the 1980s. Despite being 30 years old.. it still looks the business, and more car than my basic skills could manage.

MclarenExperience_013
MclarenExperience_014
This M80/4 CanAm car looked like a beast! The velocity stacks on that V8 look like they could swallow a small dog. What a rush it must be to drive something like that… open cockpit, raging V8 right behind you.. mega down force and all the balls you can manage to jam in your driving suit.

MclarenExperience_015
Here is “The Gang” again (Beth decided to take a break from being a film star to say hello) in front of Niki Lauda’s MP4-2/2 F1 machine. His teammate that year was Alain Prost, whom lost the championship to Lauda by mere points that year; which of secured McLaren a solid manufactures title as well.

MclarenExperience_016
For me, there is just something about a 60’s era open-wheeled car like this M28. It’s like a work of art. 🙂

MclarenExperience_017
Unobstructed view of Lauda’s MP4-2/2 F1 machine.

MclarenExperience_018
And one more look at the 570. I would be thrilled to put one of these in my garage.

HUGE Thanks to McLaren and Bernardus Lodge and Spa for hosting us for this event during Car Week 2016!!!

Lola the Dog — we shall now call you… Houdini?

Last fall we adopted a 20lb. rescue dog. She was the only one in the entire kennel that was not jumping and barking and creating general mayhem. She was quiet.. we figured it was OK for our advancing age to get a small quiet, possibly meek dog to be our and our kids companion for duration. She was estimated to be about 2 years old.

Lola_112915

Fast forward a few couple of weeks and we discover…. it was an artfully executed ploy to get adopted. She is completely.. INSANE. Adorable… (which I think is why she managed to survive this long); but who in their right might would let a cattle dog breed with a jack russel terrier? We quickly discovered that being left to her own devices means she pulls books off shelves and eats them (amount a 1000 other things). So.. she can’t be left alone in the house. She goes EVERYWHERE with us.. at least we try to take her (our youngest AJ played for 2 baseball teams this season, she got to watch a lot of baseball with us). At any rate.. can’t leave a dog in a car, and can’t take her into movies.. so.. we devised a plan to lock her out on the back deck (most of it is 20′ or more off the ground).

The first time, it worked like a charm! 12 hours out on the desk with food, toys and water. Came back and she was impatiently waiting to see us.

Fast forward a few more months to Graduation Season, and leaving the dog on the desk. Except last Thursday, when we did this, we returned to find the dog OUTSIDE containment. Not sure how she did it, we tested every opening (by trying to shove her through it) and were unable to determine point of escape.

Last night we had the last of the graduation parties about 1 hour away in Sillicon Valley (where most of my family still resides.. why.. I’ll never understand). This time we doubled up some extra gating on the iron gate from front to back of house:

iron.gate

We figured we had it covered. About 3 hours into the party my surveillance cams alerted me of unusual activity…

broken.containment

We tried to say our goodbyes quickly and get home before dark. We have a mountain lion den just below the property, and a fairly large coyote colony up the hill from us as well. The bobcats we see, not too worried about them. Sure enough, she was out front again. But this time I’d setup cameras… and this.. much to my disbelief pulled this of the motion detection cam facing the gate:

Where there is a will, and a determined dog… there is a way….

casperJS – passing parameters on the command line (cli)

I like using the command line / shell to pass information to scripts and programs. Sure it has limitations but it’s generally pretty effective.

Each language seems to have it’s own method of handing them, and CasperJS does not seem to be any different. What I did find a little different from others, is how CapserJS splits out arguments from parameters (options in CapserJS speak).

Passing Arguments

Passing arguments is a fairly simple affair. His an example of passing some arguments on the command line to a screen capture utility I’m working on:

casperjs generic.screenshot.cjs http://www.someplace.com save_local
[
“http://www.someplace.com”,
“save_local”
]

They are placed into a list (integer indexed array), and can be addressed in the following way:

url = casper.cli.args[0];
mode = casper.cli.args[1];

This would result in ‘url’ = ‘http://www.someplace.com’ and ‘mode’ = ‘save_local’. Pretty straight forward. One major drawback, you must know the order of the parameters, add a new one, get one out of place and the entire house of cards collapses.

There is a better way!

Passing Parameters (options)

Passing options is a fairly simple affair as well. His an example of passing some option on the command line:

casperjs generic.screenshot.cjs –url=http://www.someplace.com –mode=save_local
{
“casper-path”: “/opt/casperjs”,
“cli”: true,
“url”: “http://www.someplace.com”,
“mode”: “save_local”
}

Note: “casper-path” and “cli” are injected automatically

They are placed into an array, and can be addressed in the following way:

url = casper.cli.options[‘url’];
mode = casper.cli.options[‘mode’];

This would result in ‘url’ = ‘http://www.someplace.com’ and ‘mode’ = ‘save_local’. Now, you do not need to worry about ordering of options, and adding more options doesn’t mean that you’ll have to worry about re-coding the variable localization, ordering etc. It’s also CLEAR to any user how the cli is formatted.

Now, go forth and parse, screen capture and automate your testing until your heart is content!

Memories of Rallies Past – Sportbike Northwest 2005

After watching the movie “Wild”, about a hiker on the PCT, I recalled meeting a pair of hikers in WA, who were picking up a shipment of shoes at one of the PCT outposts.

It was August 2005, and I’m pretty sure it was my first trip to a new motorcycle rally event in the Columbia Gorge, called Sportbike Northwest 2005.

It was quite great time, spent with many friends from both the Pacific Northwest VFR and local ADV groups (I’d just purchased my 2nd Ducati powered machine, a Cagiva Gran Canyon). (Side note; in the PNW VFR group page, my yellow 2000 VFR800 is 5th bike from the left)

While looking up references for this post, I found that a few of the pictures that three of the photos I’ve taken at SBNW events are at the summary photos shown by Google.. sorta cool)

Google images for SBNW 2005
Google images for SBNW 2005
.

I know that I took MANY more photos from the event.. but these are the ones that I’d posted to my original blog (long dead), back in 2005.

Many things on that Rally were not photographed, for a variety of reasons… Here are a few of the places that were enjoyed on the various rides/tours during SBNW.

Stonehenge
Yeap.. there is a Stonehenge in WA. Created by a visionary man named Sam Hill. [ More Info ]

Maryhill Loops Road
A private road opened just a few times a year to special Motorsports events. Maryhill Loops is an amazing ribbon of tarmac. During SBNW, the road is run one-way only, much like a race track. A similarly paced group of riders ascend; then when all have reached the top, the road is reversed and you descend. This is repeated many times for the small, limited group of people that purchase special tickets for this part of the rally. IMHO, a MUST DO!

Vista House
Vista House and the amazing section of road to (and from it), provides amazing views of The Gorge. I few years later I was fortunate enough to spend the day here riding with Reg Pridmore, his wife and my friend Mike. It was a great day of riding with a riding legend and a couple of good friends. Check out that road!.

Route 30 Porsche Museum and Ice Cream
What a treat Route 30 is! Literally. :). As a 911 owner in the past, this was a great treat. It’s not very big, but the ice cream is a welcome respite from the often extream temps that time of year in The Gorge. I still have the Valentino Rossi jacket I bought there.

>Bridge of the Gods
Yes.. this bridge is rather impressive (and also part of the PCT). Bridge of the Gods is a crossing point I used often to get from WA to OR during the rally. There is also a pretty good breakfast joint at the base of the bridge on the OR side. Give it try!

There are more things that I’ve forgotten, than remembered. Maybe I’ll update the blog if/when I do.

It sure was fun looking 11 years back at where I was, the things I did and the people I rode with. Times have changed, yet so many things remain the same. 😀

Income Inequality – two views of the same “problem“.

Income Inequality – two views of the same “problem”.

I read two articles this morning. The first referenced the 2nd. I’m glad it did, because the 2nd was actually coherent. The first was mostly the same table pounding you hear at 99%er and Bernie Sanders rally’s “Wealth is Evil!” or something to that effect.

The first article from the Washington Post [ The urgent need for Silicon Valley to lead a smart and civil conversation on inequality ] is written by Vivek Wadhwa at Stanford University. My main gripe with his article is the amount of projection it uses: “Everyone feels this..” or “We all agree that…” Any time I read that in an article, I know it’s opinion, and generally heavily biased from reality. I don’t think I’m wrong here either.

This quote here, I took issue with:

“From the extreme left to the extreme right, everyone is angry about the one percent who have the majority of the wealth.”

Are they? I’m not. To me it’s inspirational that some people can attain such heights from small beginnings. I harbor no jealousy of those that “figured it out.”

“Already, in Silicon Valley, the Google bus has become a symbol of inequity.”

Again.. although I find them annoying on some level (they are big), I know that I’d wished the big Silicon Valley companies I worked for in the 80’s and 90’s (Hewlett-Packard and Sgi) would have offered such services to employees. In all fairness, HP did have a corporate air service for people commuting form the Bay Area to Roseville… it was but a handful of people that were able to take advantage of that I believe).

The second article by Paul Graham, founder of Y-Cobminator [ Economic Inequality ]. The point I like about this article is that is debunks the zero-sum fallacy. Wealth can be created without diminishing the wealth of another. It’s not to say that there are not plenty of ways that people get rich while degrading others.

I’m not always for “Big Business”. I think there is plenty of evil and wrong doing in the corporate environment. I am particularly “disenfranchised” by bit banks, with their fancy ‘vehicles’ of investment.. most of which are geared to siphon money out of the pickets of others without creating much measurable wealth (benefit). The cesspool of the credit markets being a prime example.. one that was a major factor in the 2007/2008 economic downturn. But let me digress…

This quote form the 2nd article really resonated for me:

“There are lots of things wrong with the US that have economic inequality as a symptom. We should fix those things. In the process we may decrease economic inequality. But we can’t start from the symptom and hope to fix the underlying causes. [7]”

I encourage you to ready BOTH articles. Information is power, and maybe you find yourself aligned more with the thinking of the 1st article than the 2nd. That’s fine.. maybe we can have a discussion about that. But one should always endeavor to try and understand opposing views if one wants to opine (although hardly a requirement, obviously).

Do you agree with either, both or have a different opinion? We could discuss it.

Installing CasperJS 1.1.4 on AWS (CentOS)

Installing CasperJS to work with PhantomJSs latest version 2.1.1

This is the current status of my test installation. My perviously hacked version of CaserpJS ( instructions are there: Helping CasperJS 1.1.0-beta3 play nice with PhantomJS 2.0.0 ), however it’s time to rev-up to the non-beta version of the code.

casperjs
CasperJS version 1.1.0-beta3 at /usr/lib/node_modules/casperjs, using phantomjs version 2.1.1

As of today:
Screen Shot 2016-02-08 at 10.42.19 AM

Step 1 — Clone CasperJS from Git

Hopefully you already have Git installed, and you are ready to clone:

git clone git://github.com/n1k0/casperjs.git
Cloning into ‘casperjs’…
remote: Counting objects: 14392, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 14392 (delta 0), reused 0 (delta 0), pack-reused 14385
Receiving objects: 100% (14392/14392), 8.50 MiB | 0 bytes/s, done.
Resolving deltas: 100% (8648/8648), done.
Checking connectivity… done.

Step 2 — Perform Installation

Using hints from the Instructions at CasperJS 1.1.0-DEV documentation, I first located my current casper image, moved it aside, then linked the new one into it’s location.

whereis casperjs
casperjs: /usr/bin/casperjs /usr/local/bin/casperjs /opt/n1k0-casperjs-e3a77d0/bin/casperjs /opt/casperjs/bin/casperjs /opt/casperjs/bin/casperjs.exe

mv /usr/bin/casperjs /usr/bin/casperjs.1.1.0-beta3

ln -sf `pwd`/bin/casperjs /usr/bin/casperjs

Step 3 — Verify Casper

Running casper, I checked to ensure it’s on the latest version:

casperjs
CasperJS version 1.1.0-beta5 at /opt/casperjs, using phantomjs version 2.1.1

This looks like it’s good to go.. now CASPER AWAY!!

Installing PhantomJS 2.1.1 on AWS (CentOS)

phantomjs-logoIt’s a gamble to do this, and according to the build script it’s going to take a long time to complete the compile / install of Phantom 2.1.1.

Note: If you are looking for instructions on building for Ubuntu, the steps are different. I’ve documented that process in this post: Installing PhantomJS 2.1.1 on Ubuntu.

Step 1 — install required dependencies

You may or may not have most of these on your AWS / CentOS system. I found that most of these were required to start the PhantomJS build.Here are the ones that I’ve confirmed I needed:

  • autoconf
  • pkgconfig.x86_64
  • python26-pyudev.noarch
  • python26-twisted.noarch
  • sip.x86_64
  • python27-pyudev.noarch
  • python27-twisted.noarch
  • gcc
  • flex
  • bison
  • xorg-x11-server-Xorg.x86_64
  • xorg-x11-server-devel.x86_64
  • xorg-x11-utils.x86_64
  • xorg-x11-proto-devel.noarch
  • sqlite-tcl.x86_64
  • sqlite-devel.x86_64
  • openssl.x86_64
  • crypto-utils.x86_64
  • openssl-devel.x86_64
  • libfontenc.x86_64
  • libfontenc-devel.x86_64
  • fontconfig.x86_64
  • fontconfig-devel.x86_64
  • libicu-devel.x86_64
  • freetype-devel.x86_64
  • libpng-devel.x86_64
  • libjpeg-turbo-devel.x86_64
  • libXext-devel.x86_64
  • libxcb-devel.x86_64
  • xcb-util.x86_64

Installing the packages went smoothly:

sudo yum install autoconf pkgconfig.x86_64 python26-pyudev.noarch python26-twisted.noarch sip.x86_64 python27-pyudev.noarch python27-twisted.noarch gcc flex bison xorg-x11-server-Xorg.x86_64 xorg-x11-server-devel.x86_64 xorg-x11-utils.x86_64 xorg-x11-proto-devel.noarch sqlite-tcl.x86_64 sqlite-devel.x86_64 openssl.x86_64 crypto-utils.x86_64 openssl-devel.x86_64 libfontenc.x86_64 libfontenc-devel.x86_64 fontconfig.x86_64 fontconfig-devel.x86_64 libicu-devel.x86_64 freetype-devel.x86_64 libpng-devel.x86_64 libjpeg-turbo-devel.x86_64 libXext-devel.x86_64 libxcb-devel.x86_64 xcb-util.x86_64

Step 2 — clone the Git repo to local drive:

git clone git://github.com/ariya/phantomjs.git
Cloning into ‘phantomjs’…
remote: Counting objects: 63695, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 63695 (delta 16), reused 0 (delta 0), pack-reused 63657
Receiving objects: 100% (63695/63695), 129.05 MiB | 4.08 MiB/s, done.
Resolving deltas: 100% (31013/31013), done.
Checking connectivity… done.

cd phantomjs

git checkout 2.1.1
Note: checking out ‘2.1.1’.
[…]
HEAD is now at d9cda3d… Set version to “2.1.1”

git submodule init
Submodule ‘3rdparty-win’ (https://github.com/Vitallium/phantomjs-3rdparty-win.git) registered for path ‘src/qt/3rdparty’
Submodule ‘qtbase’ (https://github.com/Vitallium/qtbase.git) registered for path ‘src/qt/qtbase’
Submodule ‘qtwebkit’ (https://github.com/Vitallium/qtwebkit.git) registered for path ‘src/qt/qtwebkit’

git submodule update
Cloning into ‘src/qt/3rdparty’…
Cloning into ‘src/qt/qtbase’…
Cloning into ‘src/qt/qtwebkit’…

Step 3 — Hack the QT build

It seemed that I needed to set some different flags for the qtbase build. It was not clear to me if this could be done with the build.py options, so I hacked the qt/qtbase/configure script.

vi src/qt/qtbase/configure

First off, I changed the settings of these two values near the top of the config file:

Then commented out part of the section around Werror, so that the build would not treat warnings as errors. The C++ macro options in the code will generate A LOT of errors, most of them from the flags defined in build.py. I tried the route of disabling those flags and ended up with more errors and more issues.. so changing the flags in the config was my next option:

[…]
#CFG_WERROR=auto
CFG_WERROR=no
[…]
#CFG_DEV=no
CFG_DEV=yes
[…]
warnings-are-errors|Werror)
# if [ “$VAL” = “yes” ] || [ “$VAL” = “no” ]; then
# CFG_WERROR=”$VAL”
# else
UNKNOWN_OPT=yes
# fi
;;
[…]

Step 4 — Build!

python build.py
—————————————-
WARNING
—————————————-

Building PhantomJS from source takes a very long time, anywhere from 30 minutes
to several hours (depending on the machine configuration). It is recommended to
use the premade binary packages on supported operating systems.

For details, please go the the web site: http://phantomjs.org/download.html.

Do you want to continue (Y/n)? Y

Step 5 — check the binary

Once the build has completed, you will find the binary to be built in the local directory bin/

ls -l bin/phantomjs
-rwxr-xr-x 1 root root 56736434 Feb 5 11:33 /usr/sbin/phantomjs

To complete the installation, you’ll need to replace the current phantomjs binary with the new one. To find the location if your current binary (if you have one), this should work:

whereis phantomjs
phantomjs: /usr/bin/phantomjs

Copy the new binary to that location and verify version:

cp bin/phantomjs /usr/bin/phantomjs
cp: overwrite ‘/usr/bin/phantomjs’? y

phantomjs -v
2.1.1

YOU ARE DONE!! It was just that easy

Installing PhantomJS 2.1.1 on Ubuntu

phantomjs-logoIt’s a gamble to do this, and according to the build script it’s going to take a long time to complete the compile / install of Phantom 2.1.1.

Note: If you run into build problems with some of the required components, such as the fonts, qtbase, etc., you will want to check my previous post Installing PhantomJS 2 on Ubuntu for some help.

Step 1 — install required dependencies

You may or may not have most of these on your Ubuntu system. I found that most of these were required to start the PhantomJS build.Here are the ones that I’ve confirmed I needed:

  • autoconf2.13

  • pkg-config

  • build-essential

  • qt5-qmake

  • g++

  • python

  • ruby

  • perl

  • sqlite

  • flex

  • bison

  • gperf

  • openssl

  • fontconfig

  • xorg

  • xorg-dev

  • xutils-dev

  • xcb-proto

  • libtool

  • libsqlite0

  • libssl-dev

  • libsqlite3-dev

  • libfontconfig1-dev

  • libicu-dev

  • libfreetype6

  • libssl-dev

  • libpng-dev

  • libpng12-dev

  • libjpeg-dev

  • libx11-dev

  • libxext-dev

  • libxcb-xkb-dev

Installing the packages went smoothly:

sudo apt-get install autoconf2.13 pkg-config build-essential qt5-qmake g++ python ruby perl sqlite flex bison gperf openssl fontconfig xorg xorg-dev xutils-dev xcb-proto libtool libsqlite0 libssl-dev libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libpng12-dev libjpeg-dev libx11-dev libxext-dev libxcb-xkb-dev x11proto-core-dev libxcb-render-util0 libqt5webkit5-dev

Step 2 — clone the Git repo to local drive:

git clone git://github.com/ariya/phantomjs.git
Cloning into ‘phantomjs’…
remote: Counting objects: 63695, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 63695 (delta 16), reused 0 (delta 0), pack-reused 63657
Receiving objects: 100% (63695/63695), 129.05 MiB | 4.08 MiB/s, done.
Resolving deltas: 100% (31013/31013), done.
Checking connectivity… done.

cd phantomjs

git checkout 2.1.1
Note: checking out ‘2.1.1’.
[…]
HEAD is now at d9cda3d… Set version to “2.1.1”

git submodule init
Submodule ‘3rdparty-win’ (https://github.com/Vitallium/phantomjs-3rdparty-win.git) registered for path ‘src/qt/3rdparty’
Submodule ‘qtbase’ (https://github.com/Vitallium/qtbase.git) registered for path ‘src/qt/qtbase’
Submodule ‘qtwebkit’ (https://github.com/Vitallium/qtwebkit.git) registered for path ‘src/qt/qtwebkit’

git submodule update
Cloning into ‘src/qt/3rdparty’…
Cloning into ‘src/qt/qtbase’…
Cloning into ‘src/qt/qtwebkit’…

python build.py
—————————————-
WARNING
—————————————-

Building PhantomJS from source takes a very long time, anywhere from 30 minutes
to several hours (depending on the machine configuration). It is recommended to
use the premade binary packages on supported operating systems.

For details, please go the the web site: http://phantomjs.org/download.html.

Do you want to continue (Y/n)? Y

NOTE: If you want to suppress the warning regarding perils of the long compile, you an use the –confirm flag to bypass the question. This is really helpful if you want to background the process and write it to a log. Where I find this most beneficial is when I want to/need to close the terminal window before the compile completes.

Here is an optional method of running that will background the process, auto-reply to the warning and write to a log file:

nohup ./build.sh –confirm –jobs 1 > build.log &

You might carp about not being able to monitor progress now! Well sure you can.. just do a following tail on the file. Exact command varies with system, I’ll provide the one for typical LINUX and for typical OSX:

For typical LINUX:
tailf build.log

For typical OSX:
tail -f build.log

Step 3 — check the binary

Once the build has completed, you will find the binary to be built in the local directory bin/

ls -l bin/phantomjs
-rwxr-xr-x 1 root root 56736434 Feb 5 11:33 /usr/sbin/phantomjs

To complete the installation, you’ll need to replace the current phantomjs binary with the new one. To find the location if your current binary (if you have one), this should work:

whereis phantomjs
phantomjs: /usr/bin/phantomjs

Copy the new binary to that location and verify version:

cp bin/phantomjs /usr/bin/phantomjs
cp: overwrite ‘/usr/bin/phantomjs’? y

phantomjs -v
2.1.1

YOU ARE DONE!! It was just that easy

Racing, Photography, Software and Politics.