I’ve started the project to replace the standing rigging on my 1979 Morgan 462 ketch. The original rigging is stainless steel wire with swage fittings.

I replaced the main cap shrouds, main backstays and mizzen cap shrouds first, pulling both masts to do it. I wasn’t comfortable trying to replace those shrouds and stays with the masts still stepped. I only replaced those six because I wanted to get the masts back in the boat as soon as possible. I’ll replace the remaining shrouds and stays with the masts in the boat.

The rig uses four different sizes of wire. I found a supplier of Type 316 stainless steel 1×19 wire in Oakland, CA. The wire was made in Korea and the vendor had the test certificates for the wire. The largest diameter wire cost less then $2.50 per foot.

To cut the wire, I made a jig from a block of polypropylene. I drilled a hole through it and then cut a notch perpindicular to that hole. I used a 32 teeth per inch bi-metal hacksaw blade and cut the wire by hand. The cutting was low effort and made a clean cut.

For the terminals, I used Hayn Marine compression fittings. I chose these because I wanted to assemble them by hand and I also want to be able to disassemble them, to either clean and inspect them or to replace a damaged wire. The terminals are pricey, but I’m quite satisfied with them. I needed about an hour to assemble the first one, figuring out how to un-lay and then re-lay the wire and to get the pieces of the Hayn fitting in the right place. The subsequent fittings only needed about 15 minutes each to assemble.

For turnbuckles I used Type 316 studs and bronze open bodies. To prevent seizing and galling I applied some TefGel to the threads on both ends of the body.

Now that those six shrouds and stays are back on the boat and the masts have been tuned, I’m ready to replace the main lowers, mizzen lowers and the triatic. I plan to use the same wire and compression fittings, but to install the new rigging one cable at a time, without removing the masts. One thing I will be more careful about is the size of the Clevis pins on the bottom end of the shrouds. The new turnbuckles used a larger diameter pin than the old, so I had to enlarge the holes in some of the chainplates.

As mentioned in a previous article, I bought a project which looks like a sailboat. I made an attempt to start the engine in December of 2015, on what has proven to be the coldest day in 2015 and, so far, the coldest day in 2016. Needless to say, the engine wouldn’t start. This old boat has a 1979 Perkins 4-154 which was built without glow plugs.

Now, just prior to this failed attempt to start the engine, I had re-routed the valve cover vent tube. A previous owner had decided to connect that tube to the engine air intake. The end result was crankcase oil being sucked into the intake manifold and the air intake screen being plugged with crankcase oil.

After re-routing the vent tube and cleaning the air intake screen is when I attempted to start the engine (on the coldest day of the year) and failed. Then began a longer than it should have been process of troubleshooting the cause and eventually starting the engine.

I first checked the tank to make sure more than 160 gallons of diesel hadn’t suddenly disappeared from the tank. Next, I held my hand above the intake manifold while someone else pressed the starter button, to confirm these was still vacuum and no backflow out the intake manifold. Since the only thing remaining was fuel to the injectors, I loosened one fitting and had the same person press that starter button. I saw fuel spurting out so I admitted to being stumped. I assumed at this point that it was just too cold for the fuel to ignite.

Since the engine doesn’t have glow plugs and since I was hesitant to use starting fluid, I found a heat gun. I used it to warm the injector pump, the secondary fuel filter and the injectors. I then rigged it so it would blow hot air into the intake manifold while I pressed the starter button myself. Still, not a peep out of the engine.

I decided to do some more research on using starting fluid with diesels. I found a consensus that starting fluid can be used with diesel engines, but one must be careful. Before using starting fluid, confirm the following:

  1. any glow plugs are cold
  2. any intake manifold heater is cold
  3. there’s not other source of heat or spark which could ignite the starting fluid

Then, while someone engaged the starter motor for five to ten second bursts, I sprayed very small bursts of starting fluid toward the intake manifold. Each time we did this, the engine would fire, burn the starting fluid but not actually start.

I was still missing something, so I decided to walk away and await inspiration.

I returned the next day. I had never actually inspected the fuel lines or filters myself. The boat was delivered to me and the fuel had been polished and the filters had been replaced before motoring all the way up the California coastline without any trouble. However, when I finally crawled into the engine room and shined a flashlight into the sediment bowl of the primary fuel filter, I saw that it was full of mud. I opened the drain petcock on the bottom of the bowl, but absolutely nothing came out. I had found my culprit.

I opened the primary filter body, removed the black (formerly white) filter cartridge and then removed the entire body from the fuel lines and the engine room. I disassembled the body and scooped out all of the mud. I used a grease solvent to clean the body and sediment bowl before reassembling it and re-installing it in the engine room. I added a new filter cartridge and filled the entire body with fresh fuel. Since I had a spare handy I also replaced the secondary fuel filter, after first filling it with clean fuel too. I didn’t learn about it until later, but I now know there is also a screen on the input of the fuel lift pump, which I should clean too.

After bleeding the secondary filter, then both sides of the injector pump and finally all four of the injectors, I attempted to start the engine again. After about 30 seconds of cranking, on a day which was also about 20 degrees F warmer than the initial attempt, the old engine started and ran very well. Just as preventive maintenance, I added some biocide to the fuel tank, just in case it still had a bacteria colony, even after the polishing.

The last thing I did was to recently test the performance under power. Prior to all of this fuel filter adventure, I was concerned about the speed under power. The best I had been able to achieve, in optimal sea and wind conditions, was about 5.5 knots. Yesterday, I easily ran the engine up to 3,000 RPM and was able to quickly make 7.5 knots under power.

Time well spent!


SparkFun offered a discount on some components useful for home weather stations, so I finally bought them recently. More importantly, I assembled them and installed them outside.

The sensors consist of:

  • wind speed anemometer
  • wind direction
  • air temperature
  • relative humidity
  • rainfall
  • barometric pressure

I’m using an Arduino Uno to collect the raw data from the sensors and publish it via the USB port to my local server. On that server I then run a Python script which reads the incoming weather sensor measurements and, every minute, uses the Weather Underground API to publish to them. To be able to publish, I registered with wunderground, which means I can now use them for real-time, local weather conditions. It’s the same place I also use as a store of historical data.

At the moment, I’m still tuning the location of the air temperature sensor. It’s not in direct sunlight, but I think it’s getting too much radiation from the garage exterior wall.

I live in the US and have two-phase, 240 VAC, 60 Hz electric service to my home. I’ve wanted to better understand the electricity consumption patterns at my home, to see if I could reduce that consumption. I had a WattNode from a previous project in my inventory, so it was time to finally put it to good use.

The WattNode model I have is capable of monitoring up to three phases, so I’ll only use two-thirds of its capacity. Communication with the WattNode is via an RS-485 bus, so I’ll need a way to connect it via USB to my dedicated monitoring server. For that I plan to use an opto-isolated USB-to-RS485 device from B&B Electronics.

I’ll write the monitoring software myself, using Python and the MinimalModbus module. I have not yet found a good off-site place to publish and store my consumption data, so I’ll store it locally in an RDBMS. I have a basic class written in Python, which I’ll use to collect the frequency, voltage and current measurements from the device.

The next step is to install the WattNode in my primary electrical panel and then pull some low-voltage wire from it to my server.

The Radxa Rock Pro, running the Linaro (ubuntu) 14.04 Server image, provides access to the serial console. This can be very handy for troubleshooting if the device isn’t connected to a network.

In order to use the SparkFun FTDI Basic USB-to-serial, you’ll need some jumper wires, in addition to the FTDI device.

DO NOT CONNECT the FTDI 3.3V to the Radxa Rock.

Using the jumpers (because the pins are arranged on the SparkFun device in a different order than on the Rock Pro) connect the three as follows:

FTDI Basic      Rock Pro

Gnd                  GND

TXD                  RX

RXI                    TX

You can then use a Linux terminal emulation program, such as minicom. Set the data rate to 115,200, the protocol to 8, None and 1 and disable hardware flow control. You may have to press the Enter key  when you first connect. If you send a BREAK condition, you’ll enter the FIQ debugger mode. Type “console” and you’ll leave the debugger mode.

Last month I bought my third boat. I found a 1979 Morgan 462 ketch in southern California. This particular boat is hull number 21. It is a center cockpit with a large aft cabin and two heads. It doesn’t have the Scheel keel design. As best I can tell, I’m the seventh owner of the boat. With that many previous owners and over that many years, there have been many changes to the boat and each owner had a particular part of the boat which interested him and others which he neglected.

My plan is to restore and upgrade the boat to blue water capability. I’m hoping to find the community of other Morgan 462 owners. I want to do the usual comparing of notes and sharing of ideas.

Today I’ll return to the boat to finish undoing the changes made to the galley, which include extracting a household fridge.

I’ve had a Cisco LinkSys E1000 router/Access Point in my collection for some time now. I’ve been meaning to use it as my router and Access Point, instead of the Comcast cable modem, at home, so I can get a lot more detail about the network traffic between all of the hosts in my house and the Internet. I intend to install dd-wrt on the E1000 before I actually start using it.

Since I have been playing with many LinkSys WRT routers over the years and since I knew that some of them had a serial port on the circuit board, I wanted to be able to use the serial port on this E1000, before I actually started using it. In this article I’ll describe the few simple steps required to be able to use that serial port (which the E1000 does indeed have).

My E1000 is a version 2.1 device, as printed on the label on the underside of the case. Judging by some information I found in other people’s ‘blogs, this circuit board is different from the version 1.0 board.

The serial port is provided via a row of solder points which are labeled DJ2. There are a total of five solder points (actually, holes through the board) and they are:






If you open the case and orient the board such that the word “CISCO” is properly oriented and toward the bottom of the board, the connections are Ground on the left and Voltage on the right. The board uses 3.3 Volt signaling, so it’s not actually an RS-232C serial port. You’ll need a way to convert from 3.3 Volts to 5 Volts if you want to use a proper RS232C serial device to connect to the E1000 serial console. I used a Sparkfun FTDI converter.

Once you’ve established the physical connections, to Transmit, Receive and Ground, the data rate is 115,200 and the protocol is 8 data bits, no parity and one stop bit. It is an ASCII conversation and you’ll be given a BusyBox prompt when you connect. You many have to send one NewLine character to get a prompt from BusyBox.

Next for me is to install dd-wrt on this E1000.


There are several sources of world map data available online today, from the likes of Google Maps, the Open Street Maps project and Nokia Maps. These systems usually make their maps available as collections of tiles and use the Mercator projection system to create the tiles.

In order to request the right tile for a specific set of geographic coordinates, it’s necessary to be able to convert a given latitude and longitude into the column and row for the matching map tile. In addition to the coordinates, it’s also necessary to specify a map zoom level.

Before I jump into the implementation details, it’s necessary to describe a bit of the background. This article refers to the Mercator projection. It works with the latitude and longitude in degrees and represented as signed, floating point numbers. For example, latitudes north of the equator are in the range (0.0 – 90.0] and longitudes west of the Prime Meridian are in the range (0.0 – -180.0]. Although the procedure I’m about to describe will work with latitude values in excess of ±85.5, the values are usually meaningless, because the Mercator projection breaks down near the poles of the earth, due to near infinite expansion in the projection.

The tiles in the projection are identified by column and row, with both beginning at zero. There is also always the same number of columns as rows, regardless of the zoom level. Zoom levels typically begin at 1, the least amount of zoom, and proceed up to around 18, the greatest amount of zoom. Zoom level 1 typically displays the entire map in a single tile, while zoom level 18 displays an area similar to a portion of a US city block . The total number of tiles at a particular zoom level is determined by the formula (2zoomLevel)2.

With that out of the way, let’s look at how to actually convert a latitude and longitude to a map tile column and row. Since it’s easy to read, I’ll use Python to write my “pseudo-code”.

First, convert the latitude and longitude from degrees to radians:

lonRad = math.radians(lonDeg)
latRad = math.radians(latDeg)

and then convert the coordinates into the Mercator projection with

columnIndex = lonRad
rowIndex = math.log(math.tan(latRad) + (1.0 / math.cos(latRad)))

At this point, we have a column and row, but for a set of tiles which has its origin in the center of the collection. Usually, the origin of the collection is in the top, left corner. Also, we haven’t accounted for the zoom level yet. Let’s do that next, with

columnNormalized = (1 + (columnIndex / math.pi)) / 2
rowNormalized = (1 - (rowIndex / math.pi)) / 2

tilesPerRow = 2 ** zoomLevel

column = round(columnNormalized * (tilesPerRow - 1))
row = round(rowNormalized * (tilesPerRow - 1))

At this point, column, row and zoomLevel can be used to request the appropriate tile from a map tile service, which will contain the starting latitude and longitude and will be at the specified zoom level.

Recently, I wanted to play with the latest build of MeeGo on my Nokia N900. I also wanted to try it on a PandaBoard borrowed from a friend. To do that, I needed a better (greater capacity and higher write speed) microSD card than any I had in my collection. That need caused me to learn more about microSD memory cards. The results of learning about microSD and the speed classification were somewhat disappointing.

According to this article on Wikipedia, a Class 10 SD device is supposed to provide a minimum of 10 Megabytes per second in sequential write throughput. What I found is that, in reality, SD Class ratings are on a par with the claims of used car sales.

In order to try and objectively establish the actual throughput of various microSD cards, I needed some software tools. I’ve used two so far. ubuntu distributions include the Disk Utility, which will measure disk speeds. I believe the tool will only measure sequential writes, not random writes. It also doesn’t allow for any configuration of the testing characteristics, such as block size or file size or number of testing threads.

I also used the Linux utility fio. This is a much more comprehensive and capable tool, allowing you to configure essentially every aspect of its operation.

Using both of these tools with the first microSD card I bought for this new project, I was sorely disappointed. I bought a new Lexar 8 gigabyte microSDHC Class 10 card. The Class 10 states that the card is supposed to be capable of a minimum of 10 megabytes per second in sequential write throughput. My test results indicated otherwise.

Using both the ubuntu Disk Utility and fio, the best I was able to achieve was less than 3 megabytes for sequential write throughput. Using fio to execute a random write test, I learned that this Lexar card wasn’t capable of even one megabyte per second for a random write.

Now, I’m on the hunt for microSD cards with at least 8 gigabytes capacity, which will give me at least 5 gigabytes of throughput for random writes.

I firmly believe that every job is easier with the proper tool. Often times, when troubleshooting an issue with one of my hobby robotics projects, the proper tool is an oscilloscope. However, my hobbyist budget doesn’t allow for the purchase of a full-feature benchtop digital ‘scope. I also don’t use it often enough to justify spending a lot of money on a ‘scope. Admittedly, I also don’t know enough about all of the intricate details of fully utilizing all of the capabilities of a ‘scope. Therefore, the best solution for me is one of the many brands of inexpensive ‘scopes which rely on a PC (usually a notebook) for the display and the data capture. Through my employer I was able to get my hands on a BitScope. In this article I’d like to describe the ‘scope and my experience with it.

First off, the BitScope is shipped from Australia so they don’t generally show up overnight, just in case you require instant gratification from your electronics purchases. This ‘scope arrived in about a week, none the worse for wear.

The reason I selected this particular ‘scope was, first and foremost, because it’s officially supported in both the Linux and the Windows environments. I’m a Linux user but my employer is an all-Windows shop.

I ordered a model BS325. The back of the unit I received appears in this photo:


This brought me to the first wrinkle. The sticker makes it seem like I received a BS326N. I extracted the board from the metal case (which is very easy to do and a nice part of the design) and looked closely at the board itself.


The board is clearly labeled “BS325N” but the sticker on one of the modules clearly states “BS326N”. At this point I assumed those two model numbers are equivalent.

As I mentioned earlier, this unit only has an Ethernet interface. BitScope also includes a crossover cable, for a direct connection between the ‘scope and my notebook computer. Herein I encountered the next wrinkle.

I attached the crossover cable to the ‘scope and my Windows notebook. The Data LED lit solid but not the Link LED. I moved the cable to my Linux notebook but saw the same behavior. Through some more experimentation, I’ve since determined that the labels on the LEDs are switched: The LED labeled “Data” is actually the “Link” LED. Again, not really a big deal.

The next thing to do was to actually configure and try the software. BitScope includes a CD with the software for Linux, Macintosh and Windows. Seeing this warmed my heart. I installed the software on my Windows notebook and my Linux notebook. Then I attempted to connect the software to the ‘scope. Yes, next wrinkle.

The page in the included paper manual looks like this:


Since I had ordered a BS325N, the board said BS325N and the stickers said BS326N, I assumed I should use the factory IP address for the BS325N. Nope. The IP address actually assigned to the ‘scope was, the one listed for the BS310N. Once again, not a big deal.

I did manage to start the software, connect it to the ‘scope and query the ‘scope. The Windows software identifies the ‘scope as a “BS032600”, by the way. I made a few simple tests and played with the software a bit. I tried the same simple tests on my Linux notebook, but the bitscope-dso software complains and then aborts.

I’m still satisfied with the ‘scope and happy to have it. Obviously, their manufacturing quality control needs some improvement but it’s not keeping me from using the tool. I had also contacted BitScope Technical Support when I was looking at the lack of Link issue. It took them almost two days to respond and I was disappointed to receive the all-too-common Technical Support response. Essentially, I was told “This is almost certainly your problem. Check your firewall and network configuration”. The Technical Support staff apparently either didn’t read my note or doesn’t understand networking issues.

Next, I plan to use the ‘scope to troubleshoot some actual conditions in my lab. I’ll provide some more details on how the device worked for me.