Upgrade PhantomJS 1.9 to 2.0 on AWS

phantomjs-logoIt’s a gamble to do this, and according to the build script it’s going to take a long time to complete, but to try and solve some issues that PhantomJS has with CasperJS 1.1-beta3 (latest version) I wanted to upgrade to Phantom 2.0.

A lot of things have changed, and it’s been suggested that a number of features that CasperJS wants to use, are deprecated in the 2.0 version of Phantom. But forward I’ll forge regardless.

Step 1 is to locate the source, download and unzip:

wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.0.0-source.zip
Length: 110092872 (105M) [application/zip]
Saving to: ‘phantomjs-2.0.0-source.zip’

unzip phantomjs-2.0.0-source.zip
Archive: phantomjs-2.0.0-source.zip
a2912c216d06df4d8b51f12ad4082a48c5fc7ba6
creating: phantomjs-2.0.0/
inflating: phantomjs-2.0.0/.gitignore
[…]
inflating: phantomjs-2.0.0/tools/preconfig.sh
inflating: phantomjs-2.0.0/tools/qscriptengine.h
inflating: phantomjs-2.0.0/tools/src.pro

Step 2 – install required dependancies

You may or may not have most of these from your previous PhantomJS 1.9.x install, but I found that most of these were required to start the PhantomJS build.Here are the ones that I’ve confirmed I needed:

  • gcc
  • gcc-c++
  • make
  • flex
  • ruby
  • openssl-devel
  • fontconfig-devel
  • sqlite-devel
  • libicu-devel
  • libpng-devel
  • libjpeg-devel
  • freetype-devel
  • bison
  • gperf

Installing the packages went smoothly:

sudo yum -y install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel

Following this I grabbed the source code to install freetype2. Although freetype successfully installed, the required header files where not found. I decided it was bet to grab it and build from source:

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.6.tar.gz
gunzip freetype-2.6.tar.gz
tar xvf freetype-2.6.tar
./configure
[…]
configure: creating ./config.status
config.status: creating unix-cc.mk
config.status: creating unix-def.mk
config.status: creating ftconfig.h
config.status: executing libtool commands
configure:
make & make install
[…]
/usr/bin/install -c -m 644 ./builds/unix/ftconfig.h \
/usr/local/include/freetype2/config/ftconfig.h
/usr/bin/install -c -m 644 /usr/local/freetype-2.6/objs/ftmodule.h \
/usr/local/include/freetype2/config/ftmodule.h
/usr/bin/install -c -m 755 ./builds/unix/freetype-config \
/usr/local/bin/freetype-config
/usr/bin/install -c -m 644 ./builds/unix/freetype2.m4 \
/usr/local/share/aclocal/freetype2.m4
/usr/bin/install -c -m 644 ./builds/unix/freetype2.pc \
/usr/local/lib/pkgconfig/freetype2.pc
/usr/bin/install -c -m 644 /usr/local/freetype-2.6/docs/freetype-config.1 \
/usr/local/share/man/man1/freetype-config.1

Now following that build, due to some inexplicable continuous oversight on the part of freetype’s maintainers.. OR.. phantom.. a link has to be make so that the build process can find the actual libraries required:

ln -s /usr/include/freetype2/freetype /usr/include/freetype

Step 3 – build

Now bulid.sh script. NOTE: if you are executing the compile on a VM (or in this case AWS), it’s recommended that the build process Does Not try to run parallel build jobs on the virtual cores. The PhantomJS website was not clear (to me) why.. but it did recommend using the –jobs 1 flag on the build.. which I am doing. You may omit that if you’d like to experiment.

cd phantomjs-2.0.0

./build.sh –jobs 1
—————————————-
WARNING
—————————————-

Building PhantomJS from source takes a very long time, anywhere from 30
minutes to several hours (depending on the machine configuration).
We recommend you 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 4 – 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 56587060 Sep 30 17:16 bin/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.0.0

YOU ARE DONE!! It was just that easy

F-22 Raptor at the California International Air Show

Below are photographs of the Air Force’s latest superiority fighter, the F-22 Raptor. In addition, there are also photos of the USAF Heritage Fly-by with the F-22 and P-51 Mustang in tight formation.

Photos taken at the 2015 California International Air Show – Salinas California.

F-22 Raptor


F-22  Raptor
F-22 Raptor showing some vapor during a high speed turn.

F-22  Raptor
F-22 Raptor right at the threshold of MACH 1.
F-22  Raptor
F-22 Raptor with afterburners lit
F-22  Raptor
F-22 Raptor in a high-speed pass.

USAF Heritage Fly-by (F-22 & P-51)


F-22 & P-51 Heritage Fly-by
F-22 & P-51 Heritage Fly-by

F-22 & P-51 Heritage Fly-by
F-22 & P-51 Heritage Fly-by

SOLR 5 — Fixing SSL WEAK SERVER EPHEMERAL DH_KEY

I ran into this short stopper today, which prevented access to the Admin interfaces of my Solr indexer:
ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY

Screen Shot 2015-09-09 at 10.48.15 AM

Recalling how difficult it was to first enable SSL with my Solr cluster.. I suspected this would be a major issue (and for the most part it was)

STACK OVERFLOW TO THE RESCUE!
Using this article: How to fix ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY I was able to modify my Solr 5 / Jetty configuration to stop use of the weaker DH keys.

The first solution using the wildcarded names did not work for me. After a couple of hours of testing and looking at my logs, I found that another un-voted solution fixed the issue without much hassle.

The Fix

The configuration file I modified to resolve this is the jetty-https-ssl.xml. It is located in /opt/solr/server/etc on my server.. your situation might be a little different (you’ll need to find that file that is in use by Solr yourself if it’s not in the above location).

[root@]cd /opt/solr/server/etc
[root@]vi jetty-https-ssl.xml

Locate the block where you have your SSL config. This is what mine looks like:

<Call name=”addConnector”>
<Arg>
<New class=”org.eclipse.jetty.server.ssl.SslSelectChannelConnector”>
<Arg>
<New class=”org.eclipse.jetty.http.ssl.SslContextFactory”>

<Set name=”keyStore”><SystemProperty name=”jetty.home” default=”.”/>/etc/solr-ssl.keystore.jks</Set>
<Set name=”keyStorePassword”>9290j2039fh09209h390h8f23</Set>
<Set name=”needClientAuth”><SystemProperty name=”jetty.ssl.clientAuth” default=”false”/></Set>

</New>
</Arg>

<Set name=”port”><SystemProperty name=”jetty.ssl.port” default=”8984″/></Set>
<Set name=”maxIdleTime”>30000</Set>
</New>
</Arg>
</Call>

 

Within the NEW block, below existing values.. I added this complete section, verbatim:


<!–  //START ADDED   9-SEP-2015 for  Diffie-Hellman  group size Fix –>

<Set name=”ExcludeCipherSuites”>
<Array type=”String”>
<Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
<Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
<Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<!– Disable small Diffie-Hellman key exchange to prevent Logjam attack —>
<Item>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
<Item>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</Item>
<Item>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</Item>
<Item>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_DHE_DSS_WITH_AES_128_CBC_SHA</Item>
</Array>
</Set>

<Set name=”ExcludeProtocols”>
<Array type=”java.lang.String”>
<Item>SSLv3</Item>
</Array>
</Set>

<!–  //END  Diffie-Hellman  group size Fix                          –>

Once that was added, I saved the file and I restarted solr:

[root@]cd /opt/solr/server/etc

Sending stop command to Solr running on port 8984 … waiting 5 seconds to allow Jetty process 3861 to stop gracefully.
Waiting to see Solr listening on port 8984 [-]
Started Solr server on port 8984 (pid=4162). Happy searching!

Re-trying my Solr Admin… BACK IN BUSINESS!!! 😀
Screen Shot 2015-09-09 at 11.02.26 AM

Installing Gearman on OSX Yosemite (usually)

logo

Another round of Gearman installs, following the update to OSX Yosemite. (Updated 12-AUG-2015)

Here is your guide to getting it done!

Make sure you have XCode developer tools

First step is to make sure you have the Command Line developer tools installed. To do this, or verify that it’s already done, while logged in as a non-root user, type:

xcode-select –install

A system dialog box should open up and request that you grant it permission to perform the command line install. Follow the steps and instructions in the dialogs to complete this step.

Collected the Packages

You will need the following packages

  • libevent
  • boost
  • gearmand

libevent

The latest version can be acquired here: http://libevent.org/

Unpack and compile

gunzip libevent-2.0.22-stable.tar.gz

tar xvf libevent-2.0.22-stable.tar

./configure

make install

boost

The latest version can be acquired here:
http://www.boost.org/users/download/

Unpack and compile

gunzip boost_1_58_0.tar.gz

tar xvf boost_1_58_0.tar

./bootstrap.sh

./b2 –a –build-type=complete –layout=versioned

Note: these paths reported by b2 during build are important to save:

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

/opt/boost_1_58_0

The following directory should be added to linker library paths:

/opt/boost_1_58_0/stage/lib

Gearman

The latest code can be acquired here: https://launchpad.net/gearmand

It is possible that the compiler won’t find libevent so the following environment variables may need to be set:

export CPPFLAGS=’-I/opt/boost_1_58_0′
export LDFLAGS=’-L/opt/boost_1_58_0/stage/lib’

Unpack and compile

gunzip gearmand-1.1.12.tar.tgz

tar xvf gearmand-1.1.12.tar

./configure –with-boost –with-boost-libdir=/opt/boost_1_58_0/stage/lib –prefix=/opt –with-sanitize –enable-fast-install –with-gnu-ld –enable-ssl

make && make install

At this point, you should be up and running!

If you also need to install gearman for PHP libraries, my post here should help: https://blog.daviddemartini.com/archives/5312

Install Redis on AWS EC2

redis-whiteRedis is fairly simple to install and get running. I found the best way to do this on CentOS based AWS EC2 nodes is to use the following steps.

Install Pre-Requisites

Redis will require several per-requisits. Your system may vary, but these are the cases I ran into when running the build in August 2015 with the latest AWS system updates. Some of these are required to run the tests, others are required for Redis itself.

TCL 8.5 or higher for Test

You need tcl 8.5 or newer in order to run the Redis test

yum install tcl

Download latest Redis package

Assume super user, move to a safe directory (I like /usr/local) and download the latest build:

sudo su –
cd /usr/local
wget http://download.redis.io/redis-stable.tar.gz

Extract Files

Once the main tarball has been downloaded, extract the files and start the configuration process.

tar xvzf redis-stable.tar.gz
cd redis-stable

Build the Binary

Build the binary. Redis does not seem to require ./config to be run, the necessary make files are already in place. Just run make and install!! If you decide to run the ‘make test’ (which I suggest you do), it maybe take 10-15 min. to complete depending on the power of your AWS instance.

make
make test
make install

Set Overcommit to TRUE

Redis is going to complain unless you have some level of overcommit memory enabled. This is easy to do (again, you must be root or sudoer to do this). Add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot, IF you can safely do so on your machine (best to check and make sure there are no live service interruptions or other personnel using the system).

vi /etc/sysctl.conf

Add this to the end of the file:

# Required by Redis to enable overcommit setting:
vm.overcommit_memory = 1

Reboot

init 6

Configure Redis

Create a working directory for the redis disk files. I like to use the following:

mkdir /var/redis
mkdir /var/redis/db

Copy the base configuration file to /etc/ and customize to your environment.

mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf
vi /etc/redis/6379.conf

I made the following changes to the configuration file. I can’t guarantee all or any of these will be correct for your configuration:

daemonize yes

bind 127.0.0.1

tcp-keepalive 60

logfile “/var/log/redis-server.log”

dir /var/redis/db

Copy the startup file into /etc/init.d

cp utils/redis_init_script /etc/init.d/redis

Add the start command to the root’s crontab. Yeah, so this might be a cheater method instead of adding this to the systems rd.X files, but it’s also easy to disable.

crontab -e

@reboot /etc/init.d/redis start

Start Redis Server

Starting the server from the command line is a good way to verify it’s functional. It’s easy to do, just type ‘resis-server’. Hit CNTL-C to kill and exit once you’ve tested launch. If it starts up, you should see something like this:

[root@ip-10-000-000-00 redis-stable]# redis-server

31408:C 04 Aug 21:55:00.578 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
31408:M 04 Aug 21:55:00.579 * Increased maximum number of open files to 10032 (it was originally set to 1024).

31408:M 04 Aug 21:55:00.581 # Server started, Redis version 3.0.3

31408:signal-handler (1438725473) Received SIGINT scheduling shutdown…
31408:M 04 Aug 21:57:53.628 # User requested shutdown…
31408:M 04 Aug 21:57:53.628 * Saving the final RDB snapshot before exiting.
31408:M 04 Aug 21:57:53.631 * DB saved on disk
31408:M 04 Aug 21:57:53.632 # Redis is now ready to exit, bye bye…

If that looks OK, then start using the startup back file. This should start redis as a deamon (service) depending on how you edited the configuration file. If you did it the way I did, then it will start as a deamon.

/etc/init.d/redis start

Starting Redis server…

Test to make sure it’s listening.. by using the ping command. If it’s alive and listening, you’ll receive back a ‘PONG’

redis-cli ping

PONG

FINAL STEPS — Reboot and Verify!

A good and proper final test, assuming you are able to reboot the system without causing trouble to any live services or other personnel… is.. REBOOT, then verify that it has restarted as expected.

init 6

Connection closed by remote host.

[ec2-user@ip-10-000-000-00 ~]$ redis-cli ping

PONG

CONGRATULATIONS!! You are now the proud owner/maintainer/RP of a Redis server!

NEXT…

Doing something productive with Redis… (to be continued)

Installing GnuPG 2 on OSX

Installing GnuPG onto OSX. If you are using Enigmail to provide your mail client (such as Thunderbird) with PGP signing, etc., this should help you out.

Get latest version of GnuPG

The latest version of GnuPG is 2.1.6. I located that here:
ftp://ftp.gnupg.org/gcrypt/gnupg/
I like to use curl to grab the package. Unpack the directory. You can try to build it right away, but most likely there will be additional libraries that need to be installed first (keep reading..)

curl -O ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.1.6.tar.bz2

To build this, you will need the latest versions of the following modules also installed, before you can start to build out the GnuPG.

Getting the required per-requesites

ibgpg-error

I like to use curl to download the package. Download the package, unpack, configure and build:

curl -O ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.19.tar.gz

tar xvzf libgpg-error-1.9.tar.gz
cd libgpg-error-1.19
./configure
make -j3
make install
ld

libgcrypt

I like to use curl to download the package. Download the package, unpack, configure and build:

curl -O ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.6.3.tar.gz

tar xvzf libgcrypt-1.6.3.tar.gz
cd libgcrypt-1.6.3
./configure
make -j3
make install
ld

libassuan

I like to use curl to download the package. Download the package, unpack, configure and build:

curl -O ftp://ftp.gnupg.org/gcrypt/libassuan/libassuan-2.2.1.tar.bz2

tar xvzf libassuan-2.2.1.tar.bz2
cd libassuan-2.2.1
./configure
make -j3
make install
ld

libksba

I like to use curl to download the package. Download the package, unpack, configure and build:

curl -O ftp://ftp.gnupg.org/gcrypt/libksba/libksba-1.3.3.tar.bz2

tar xvzf libksba-1.3.3.tar.bz2
cd libksba-1.3.3
./configure
make -j3
make install
ld

nPth

I like to use curl to download the package. Download the package, unpack, configure and build:

curl -O ftp://ftp.gnupg.org/gcrypt/npth/npth-1.2.tar.bz2

tar xvzf npth-1.2.tar.bz2
cd npth-1.2
./configure
make -j3
make install
ld

Build GnuPG

Unpack, configure and build:

tar xvzf gnupg-2.1.6.tar.bz2
cd gnupg-2.1.6
./configure
make -j3
make install
ld

If all goes well, you’ll be using GnuPHP 2.x! ENJOY!

Whitewater Rafting – South Fork of American River

AmericanRiverSouthFork016Wow.. what a great time we had! First off, big thanks to Isaac G. for setting up this kick-ass outing. As usual, it was a cast of crazy characters; and also keeping with tradition.. we bought the photos!

For this trip, we went with American Whitewater Expeditions. Screen Shot 2015-07-30 at 11.34.47 AM

AWE is locate in Coloma, CA, deep in the Sierra foothills.
Screen Shot 2015-07-30 at 11.40.37 AM

Starting at Zero-Dark-Thirty in Santa Cruz, we headed over to Fit for Speed, located in Club Autosport to meet up with the group of yahoos we’d be rafting (and swimming) with today.

After fueling up on carbs and caffeine we made the 3+ hour journey out past Sacramento. Everything was going smooth, until we tried to stop for lunch. Someone had the brilliant idea of meeting at Inn-N-Out burger in Rancho Cordova to re-assemble our convey. This part of the plan worked great!

Kevin and Beth AmericanRiverSouthFork001 were traveling with us. It didn’t take for them to start looking up all the awesome ways to order burgers. We had A PLAN!

Once we arrived on location however, things started to go sideways. Someone suggested we go somewhere that had salads. Using the trusty (right…) interwebs, a Mediterranean place about 1/2 miles away was located with GREAT Yelp reviews and we were on our way. We had about 20 min. to eat or we’d be late for our trip, which advised us to have a HEARTY lunch as we’d be on the river for about 5 hours (paddling at least 1/2 that time I might add). I won’t go into all the details but I’ll say that Amore in Rancho Cordova is CRAP! Took us 45 min. to get what food we could (I had to cancel my order) and what we received was over-priced pig slop. Deb and I split a hideous omelet was we raced into the mountains, already very late for a very mandatory on-time trip orientation. Isaac was able to smooth things over with AWE and despite arriving very late, we managed to make it onto the river!

I think a great time was had by all. Our boat didn’t require a safe-word… nuff said about that.

So here my words end, and I offer up the photos purchased from the entertaining, and I think you’ll agree great photographer that captured the fun. Thanks to Kevin at KBar photo for taking the great pics shown here.

This will HAVE to be done again!!

Aprilia RSV4 Track Bike Project (the start)

Aprilia_ RSV4_logoAnother track bike has entered this fleet. This time it’s a 2010 Aprilia RSV4.

Also hailing from Italy, the RSV4 continues my preference for V-engine configurations, but this time with 4 cylinders instead of two. The last time I owned a V4 bike, it was the hefty Honda VRF 800fi (RC46).


Specifications for the RSV4 are impressive:
01-2010-aprilia-rsv4-r

General information
Model: Aprilia RSV4 R
Year: 2010
Category: Sport
Engine and transmission
Displacement: 999.60 ccm (61.00 cubic inches)
Engine type: V4, four-stroke
Power: 180 HP @ 12500 RPM
Torque: 84.8 ft.lbs @ 10000 RPM
Compression: 13.0:1
Bore x stroke: 78.0 x 52.3 mm (3.1 x 2.1 inches)
Valves per cylinder: 4
Ignition: Magneti Marelli digital electronic ignition system integrated in engine control system, with one spark plug per cylinder and stick-coil-type coils
Gearbox: 6-speed
Clutch: Multiplate wet clutch with mechanical slipper system
Exhaust system: 4 into 2 into 1 layout, single oxygen sensor, lateral single silencer with engine control unit-controlled butterfly valve and integrated trivalent catalytic converter (Euro 3)
Chassis, suspension, brakes and wheels
Frame type: Front suspension:
Front suspension: Upside-down Showa fork with 43 mm stanchions. Forged aluminium radial calliper mounting brackets. Completely adjustable spring preload and hydraulic compression and rebound damping.
Rear suspension: Twin sided aluminium swingarm
Front tire: 120/70-17
Rear tire: 190/55-17
Front brakes: Double disc
Front brakes diameter: 320 mm
Rear brakes: Single disc
Rear brakes diameter: 220 mm (8.7 inches)
Mass and Capacity
Dry weight: 405.7 pounds
Power/weight ratio: 1.3118 HP/kg
Seat height: 33.3 inches
Fuel capacity: 4.49 gallons

My Bike:

The bike I picked up in Lancaster CA:
RSV4_01_04
It was already setup for racing, thus perfect for the track-duty I envisioned. Although in great condition, the livery is a little confusing (being Kawaski Green that is).

In the next few days I’ll have more to share about this new Italian machine.

May at Laguna Seca

The Ducati 749 wore a new suit to the track this time around. Although it looked great, it’s mechanical state was not quite up to to the image. It was more show than go for Sunday’s track day.

The weekend started rough and it went a little downhill from there. While finishing the dress-up on the bike (the red gas tank arrived late on Friday), Saturday, the fuel tank o-ring was damaged and required a fast trip to San Jose to get a $25 replacement o-ring. At least the dealer had it in stock and I was able to get the bike back together in time to pull into Monterey for our pre-track-day dinner.

LSeca_05_10_2015_02

The first break in my routing was not unloading my truck on arrival. Once back from dinner it was 10:15 PM, I found that someone had pulled up next to me in the space I’d planned to setup my gear. There didn’t seem to be much point in unloading in the paddock at that point, so.. off to sleep I went:
LSeca_05_10_2015_03

Dawn comes early in Monterey, and despite my original setup plans foiled, equipment was unloaded and the bike was plugged into the generator to start warming up the tires:
IMG_2249

LSeca_05_10_2015_10

With the rest of the crew arriving, we got the bikes into tech.
LSeca_05_10_2015_05

LSeca_05_10_2015_07

Dr. Johnny debut his newly refurbished track bike. He’s a happy camper, as you can tell!
LSeca_05_10_2015_09

Unfortunately, when unloading my 749, I noticed that the bike seemed difficult to move around. After some fiddling around we discovered that one of the front brakes was dragging pretty badly. My first session was going to be spent taking apart the left front caliper.

My pal Isaac was able to score a ride on the damn fine SuperLeggera owned by the track organizer. He was very impressed at the handling.. I guess light

I was eventually able to get the brakes handled and the bike on the track for the last couple of sessions of the day. Things went OK, but it seemed the brake was starting to drag again, so I packed it in; we all loaded up and headed for home.

LSeca_05_10_2015_15

LSeca_05_10_2015_17

Racing, Photography, Software and Politics.