Amazon Product Differences

Recently, on March 27th, I bought an Ice Pick from Amazon and found that I like making drinks from chipped ice significantly more than cubes made from an ice machine.

Since I’m now stocking multiple locations, I needed another for my boat. I ordered the exact same part from Amazon and it was delivered on June 6th.

What I found interesting is that the first item had a cherry finish stain to the wood, while the second has a much lighter and less red finish. Either one is fine, and I wouldn’t have a problem if I had not seen the other. I just wish they were the same and prefer the darker finish.

Functionally they are the same, and really nice for breaking up blocks of ice to put in drinks.

Canon CanoScan LiDE 400

I’ve had a Canon CanoScan LiDE 210 for at least 7 years. One of the deciding factors when I bought it was that it used a single USB cable, with no need for a second power cable.

The 210 used a mini-usb cable, which was sometimes difficult to make sure it was inserted in the correct direction. I occasionally had problems with the software driving losing communication during a scan. I switched lengths of cable at various times, with shorter cables seeming to be more consistent, but never truly conclusive.

Recently the scanner stopped moving the scan bar back to the starting location before each scan. First it would leave the scan bar at the finish location, and move to the beginning position when I would start the next scan, but then that functionality stopped and it would only return to the start position when it was first plugged into the USB port. If I tried to scan a second page without unplugging the USB cable, the movement motor would make a nasty grinding sound as it tried to move the scanner further down the page, and would result in a messy black page in the scan results. It was especially frustrating if I was trying to create a multi page PDF.

I read several online reviews, and decided to get another Canon scanner. The reviews recommended saving $20 and getting the less expensive scanner, but from my reading, only the more expensive scanner used the USB C plug, which has the advantage that it can be plugged in either direction.

I found it fascinating how similar the new packaging is to the old packaging. The old box was designed with a carrying handle, while the new box is not. I expect that’s largely due to the predominance of mail order over retail purchase. The dimensions of the new scanner and the box are pretty much the same. The boxes can be stacked 13 high. The temperature range on the old one could go 5° to 35°C while the new one goes from 0° to 40°C. Each scanner lists a maximum 4800 dpi. The 210 reported 10 seconds per page. The 400 reports 8 seconds per page.

The new software is slightly nicer working with the most recent version of windows 10, but still nothing to be too excited about. My biggest issue is that the settings for the Auto button on the scanner will not allow me to specify it will always save a JPG file. I could do that with the old scanner software. Now, to make sure I always get the format I want I much launch the software and initiate the scanning from the PC.

Motorcycle Seating Position

I’ve owned three motorcycles, and ridden several others. I prefer the sportbike seating position to the standard cruiser riding style. I’ve never liked the idea of having my heels forward and down.

I came across the https://cycle-ergo.com/ website earlier today and had some fun with it.

I bought a Honda CBR600F3 in mid 1997.

I bought a Honda VFR800 when the new model was released in late 2001, as a 2002 model year. I was never as happy with the VFR800 as I had been with the CBR600. I owned them both for a while, during a time I was splitting my time between Texas and Washington state. I had the CBR600 in Washington and the VFR800 in Texas, then in 2003 consolidated everything to Washington. The flat four in the CBR was a smoother machine than the V four in the VFR. The CBR had a shorter wheelbase and was a more nimble machine. The VFR looked better, and I sold the CBR to a friend in 2004. I was in a collision with the VFR in 2006, and when I got the check from the insurance company, I didn’t get around to replacing the motorcycle for several years.

In 2018 I bought my first used motorcycle, a 2014 Ducati 899 Panigale. A Ducati had been on my wish list for many years, but the desmo valve operation, maintenance, and general cost, had kept me away. I’ve been extremely happy with this bike since I’ve owned it. It’s the most powerful and lightest bike I’ve owned and easily the fastest. Maintenance hasn’t been the issue I was worried about, beyond Seattle Ducati dealerships closing up and replacements not being close to home.

One of the things I’ve noticed is that I remember with wither of the Hondas. When I was driving leaned forward significantly, my elbows would rest against my knees. When I’m riding fully forward on the Ducati, this doesn’t happen. playing around with the cycle-ergo website showed me why. The reach forward to the handlebars is more in the Ducati than it was on the Hondas. The Ducati hip angle is 20° difference from either of the Hondas.

New B&G Zeus™ 3S 9

This week I replaced my old Garmin GPSMAP® 740 with a brand new B&G Zeus™ 3S 9 chartplotter with C-MAP cartography. I’m excited about using this because I’ve used older B&G Zeus products on friends boats and this has everything I’m used to with more processor speed.

I had earlier upgraded to communication in my boat to connect the older Raymarine Seatalk instruments to the NMEA 2000 network using a Raymarine SeaTalk1 to SeaTalkng converter kit (Part Number E22158) with a blue DeviceNet adapter connecting to my NMEA 2000 backbone, and a white DeviceNet adapter connecting to my Garmin GPSMap 740. This allowed my garmin to show a few more details and my raspberry pi to capture and log the data from the depth and wind instruments.

I was hoping that beyond the physical changes to my instrument pod with the installation of the new B&G unit, the wiring changes would just require disconnecting the Garmin from the NMEA2000 connection and connecting the B&G to the same connection.

I did that. Then when I powered on the B&G, it asked for confirmation to discover all connected devices, which I had it do. It wasn’t seeing the results from the raymarine devices on the network, though it was getting AIS targets from the Garmin AIS 300 receiver and seeing my new fusion radio, both on the NMEA2000 bus. The communication path to either of those units was via the Seatalk converter, so I was confused as to if the B&G couldn’t see the old instruments, and spent a couple of days looking for possible solutions.

Most of the solutions I seemed to run across made me think that there may be too much power loss on the length of NMEA2000 backbone cable reaching from inside nav station to my outside pedestal. When I’d originally installed the converter kit, I spliced in power in the pedestal. Power was supplied directly to the converter, and it provided power to the NMEA2k backbone. During my installation of the B&G I attempted to do some wiring cleanup. I removed the power to the converter, and provided power to the NMEA2k bus in the nav station.

Here are several links to discussion that suggest power across the length of the backbone may be my problem:

I took video of the status led blinking on the converter, and it never was reporting low voltage. It was definitely reporting something with data, but I wasn’t sure if it was the first or second from the list.

I wasn’t excited about cutting and splicing my pedestal power connection again to provide power directly to the converter, and while playing around and power cycling everything, I realized that if I power cycled the converter/nmea2k bus, and brought up the B&G and just looked at the instruments, the converter was visible in the B&G!

If I selected it, I could see all the data it was publishing from the instruments on the NMEA2k bus.

That seemed like success! (The Sea Temperature reading has been whacky since I’ve bought the boat, and I can’t seem to figure out how to get it to read the correct temperature on the original ST60+ Tridata either.) So I told the B&G to auto select it’s data sources again.

After doing that, the Seatalk converter no longer was visible in the list of devices, or the data it was publishing. I also figured out that my Raspberry Pi stopped logging the data from the instruments when this happened. (I’m pretty sure my raspberry pi is the device at the top of the device list with — under both Model ID and Serial No. Fixing that is a low priority task for me. If you know how to properly configure the Pi please leave a comment pointing out what I should do. This is the platform I’m running.)

After several tests, I figured out that my Raymarine instruments continue working and putting data on the NMEA2k bus as long as I don’t have the B&G auto discover sources. I manually went through and configured the sources in the B&G settings, and was able to get things configured as I want.

I’m not 100% satisfied because I don’t think I should be able to take the converter offline with whatever commands the B&G is sending over the NMEA2k bus, but I’m happy that I didn’t have to splice more cables this week.

First Multi-Day Trip on Sola

My first multi day trip on Sola was over Memorial Day weekend 2021. I wasn’t good at planning, with every boater in the area also trying to take advantage of the perfect weather, but things worked out well and it was a good learning experience.

I loaded all of what I thought I’d need on my boat, returned my car to my apartment, and walked the two miles back to the boat. That meant that I didn’t pull away from my slip until close to noon on Friday. I then went to the fuel dock in Shilshole and added 14 gallons of diesel to my tank. I learned that the price of ice at the fuel dock is almost exactly the same as the nearest QFC. It was a little past 1:30 by the time I was away from the fuel dock.

After clearing the breakwater, I as able to engage the autopilot and stow all my fenders and docking lines. The wind was nice enough for sailing, so I raised the main sail and unfurled the head sail and sailed downwind towards Blake Island.

I passed the western shore of Blake Island about 4pm, and all of the mooring balls were already in use, with several additional boats anchored. Because I was moving nicely under sail power and the sunset is close to 9pm, I continued down Colvos Passage towards Gig Harbor.

I was able to sail all the way to the entrance of Gig Harbor, arriving about 7pm. After motoring into Gig Harbor and passing through a fleet of anchored boats I picked a spot and dropped my anchor with about 30 feet of water below me.

After my 80 foot chain, plus some of the rode, was off the boat, I was hailed by a large motor yacht to the south of me, with them saying that I was probably over their anchor, and that they had about 200 feet of chain out. I sat there for about 5 minutes, then pulled my anchor back up and moved north to another open area and dropped the anchor a second time. That location I stayed the night.

I’d previously taken the boat to Gig Harbor and anchored when I was racing the South Sound Series #4 on Mata Hari on March 20th. That trip I motored down Friday night, anchored, was picked up from my boat to race Saturday morning, returned to the boat Saturday night, and raised the anchor and motored home Sunday. I had the assistance returning to the dock in Shilshole, which was hugely beneficial. This trip I was planning to be alone the entire time.

I planned my departure from Gig Harbor to ride the tidal currents through the Tacoma Narrows south past Fox Island. I had the anchor up by 6:30am, but that wasn’t too much of an issue since the sun is now up before 5:30am.

South of Fox Island, I attempted to sail for a while, but after a couple of hours I wasn’t making much progress. I was slightly worried about finding a place to stay the night since I’d never been in the south sound to stay before. I powered up and passed Eagle Island between Anderson Island and McNeil Island and saw at least one mooring ball I could have used, and will probably revisit in the future.

I continued on, turning north and finally arrived at McMicken Island. There were two mooring balls on the south side of the island as I approached, one occupied. I was tired from not having slept well the previous night, and took possession of the empty mooring ball, and once the boat was secure took a nap.

I made hot coffee in the morning, but ran out of propane as I was preparing eggs in the afternoon. No more hot food for me. I had plenty of food that didn’t require cooking and it was hot during the day so I didn’t feel the need to heated food.

I spent two nights in the same place, on the same mooring ball. It was very relaxing, and mostly quiet. The south sound reminds me much more of a lake than the waters near Shilshole. I remembered that I had my drone on board, but hadn’t freshly charged the batteries, so each of my three batteries was only at 60%. I was still able to get some nice views of the area.

I was able to take time looking around and comparing what I could see to what the charts were showing.

The most important thing I figured out was that I wanted my dinghy so I could explore the park. I was reminded of the US Navy recruiting phrase: “Join the Navy, See the world.” and the army joke that went with it: “We own the part you can walk on.”

After two nights on the south side of McMicken Island, I motored to the south side to see what was available there. There were more mooring balls, and plenty of protected anchorage, but there was also a lot more boats in that area. My solitude on the south side had been nice while there was very little wind or weather.

I’d decided I wanted to explore Jerrell Cove State Park and then stay at Tolmie State Park on Monday. I had some nice south wind and was able to sail for a while going north in Case Inlet and around the northern point of Harstine Island, then dump the sail into the sailbag and motor into Jarrell Cove and back, then raise the sail and sail southwards again. I only sailed about 7 miles total, but it was certainly nice to not have the diesel running for a few hours.

I ran out of wind as I got a little farther south than I’d started the day. While it was now Monday of the long weekend, I wasn’t certain about where I was staying the night, and preferred to arrive and use a mooring ball instead of dropping anchor. I needn’t have worried, as there were three empty mooring balls when I arrived, and one boat anchored nearby. The location was exactly what I was hoping for. Quiet and flat, and an easy location to start back home from. There was 40 feet showing on my depth finder when I connected to the mooring ball. The views of Mt Rainier were incredible, and the water was glasslike in the morning.

While waiting for the currents to turn to the north, I flew my drone.

I timed the currents northwards and after leaving Tolmie State Park a bit past ten in the morning, I was able to be back in my slip in Shilshole just past four pm. I had about a knot of push during most of the trip, with as much as four knots at times.

Google Chrome Tab Search Button

Google Chrome recently added a tab search button to the title bar. When it was first enabled, it was possible to disable by going to chrome://flags and finding Enable Tab Search and changing it to Disabled.

A quick search of google will find multiple examples of how to disable it. Unfortunately in more recent versions of the browser, it no longer seems to be an available flag to disable.

I realized that my big issue with the drop down menu is it’s location, which Google has located on the left near the minimize button. Google has chosen to not have the traditional windows system menu on the left side of the title bar. The left side would be an ideal location for the tab management button.

SVG, CSS Style, dark-mode, and Apple

In my recent GoveeBTTempLogger Project I’ve been writing SVG files as temperature graphs. I realized I could organize the color combinations with CSS Style descriptions inside the SVG instead of fully describing each element of the graphic. I am using transparent backgrounds by default, and loading the SVG files in a simple index html file like any other image.

Playing with CSS in the HTML, I came across the ability to support dark-mode. I thought that this would be really nice for when I bring up the graphs on my phone late at night, not having everything being in a bright white background.

    @media screen and (prefers-color-scheme: dark) {
        body {
            background-color: black;
            color: grey;
        }
    }

I added the previous block to my style in the index.html file, which overrides the default body style of background-color: white and color: black. It works nicely at the top level, but now the black lines and text in my SVG became invisible, since now they match the background.

I tried something similar in the style for my SVG and it was working great in Chrome or Microsoft Edge. But then I realized that it doesn’t work on my phone. After realizing that it wasn’t working correctly on the phone, I decided to try switching the defaults so my default used grey, and if light mode was selected it would use black. It still didn’t work! It seems that apple is paying attention to my color-scheme selection, but doing something different from any other browser.

	<style>
		text { font-family: sans-serif; font-size: 12px; fill: grey; }
		line { stroke: grey; }
		polygon { fill-opacity: 0.5; }
	@media screen and (prefers-color-scheme: light) {
		text { fill: black; }
		line { stroke: black; }
	}
	</style>

I had a friend who works primarily on a Mac test to see if the problem was specific to the iPhone, or if it occurred in Safari on the desktop as well. Yes. Apple is handling my styles differently from the other browsers I tried.

Safari on Mac
Chrome on Mac
Firefox on Mac

You can see my choices displaying the way I want on Chrome and Firefox, with grey lines and text on a black background, while Safari isn’t showing the grey. Am I doing something explicitly wrong in my style that Chrome and Firefox are forgiving? Or is Apple not supporting the feature properly?

The frustrating thing is that all browsers on iPhones use the Apple rendering engine. That means there’s no way I know to get the functionality I want on my phone, where the phone uses dark mode overnight, but light mode during the day.

Govee H5177 Bluetooth Low Energy Smart Thermo-Hygrometer

After playing with Govee thermometers H5074 and H5075, I came across the H5177 model with similar specs but with a larger display including some buttons and backlight. I decided to give it a try, just to see if it used the same protocol as the previous units.

wim@WimPi4-dev:~ $ sudo ../visualstudio/projects/GoveeBTTempLogger/bin/ARM/Debug/GoveeBTTempLogger.out -v 2 | grep E3:5E:CC:21:5C:0F
 [2020-11-09T00:26:34] 44 E3:5E:CC:21:5C:0F 06 (UUID) 0A18F5FE88EC (Name) Govee_H5074_5C0F
 [2020-11-09T00:26:34] 26 E3:5E:CC:21:5C:0F 88EC000103DE106402 (Temp) 45.842°F (Humidity) 43.18% (Battery) 100%
 [2020-11-09T00:26:35] 44 E3:5E:CC:21:5C:0F 06 (UUID) 0A18F5FE88EC (Name) Govee_H5074_5C0F
 [2020-11-09T00:26:35] 42 E3:5E:CC:21:5C:0F 4C000215494E54454C4C495F524F434B535F485750740F5CC2 (Apple) (UUID) 494E54454C4C495F524F434B535F4857 (Major) 5074 (Minor) 0F5C (RSSI) C2
 ^C* SIGINT: Caught Ctrl-C, finishing loop and quitting. *
 GoveeBTTempLogger Version 1.20201016-1 Built on: Oct 16 2020 at 12:13:28 (exiting)
 wim@WimPi4-dev:~ $ sudo ../visualstudio/projects/GoveeBTTempLogger/bin/ARM/Debug/GoveeBTTempLogger.out -v 2 | grep A4:C1:38:13:AE:36
 [2020-11-09T00:27:05] 46 A4:C1:38:13:AE:36 GVH5075_AE36 (UUID) 88EC (Flags) 05 (Manu) 88EC0002859F4900 (Temp) 61.7502°F (Humidity) 27.9% (Battery) 73%
 [2020-11-09T00:27:05] 42 A4:C1:38:13:AE:36 4C000215494E54454C4C495F524F434B535F48575075F2FFC2 (Apple) (UUID) 494E54454C4C495F524F434B535F4857 (Major) 5075 (Minor) F2FF (RSSI) C2
 ^C* SIGINT: Caught Ctrl-C, finishing loop and quitting. *
 GoveeBTTempLogger Version 1.20201016-1 Built on: Oct 16 2020 at 12:13:28 (exiting)
 wim@WimPi4-dev:~ $ sudo ../visualstudio/projects/GoveeBTTempLogger/bin/ARM/Debug/GoveeBTTempLogger.out -v 2 | grep A4:C1:38:0D:3B:10
 [2020-11-09T00:27:35] 46 A4:C1:38:0D:3B:10 GVH5177_3B10 (UUID) 88EC (Flags) 05 (Manu) 01000101029D1A64
 [2020-11-09T00:27:35] 42 A4:C1:38:0D:3B:10 4C000215494E54454C4C495F524F434B535F48575177F2FFC2 (Apple) (UUID) 494E54454C4C495F524F434B535F4857 (Major) 5177 (Minor) F2FF (RSSI) C2
 ^C* SIGINT: Caught Ctrl-C, finishing loop and quitting. *
 GoveeBTTempLogger Version 1.20201016-1 Built on: Oct 16 2020 at 12:13:28 (exiting)

While I was able to see the device data in Bluetooth advertisements, it’s got some differences. The code snippets above are cherry picked from one device each that I know how to interpret and the new device last.

The Manufacturer data in the new H5177 device doesn’t start with the same 88EC signature, but at least appears to be the same length as H5075, and one byte shorter than the data packet from the H5074.

17.1C 28% matches with (Manu) 01000101029D1664. If anyone can point me to a quick decode algorithm, I’ll update my project to support this device very quickly.

iOS14 Date Time Picker Rant

I upgraded to iOS14 as soon as it was released just because I almost always keep my devices running the most up to date software I can. I don’t care about the widgets or interface customization options that were introduced with iOS14. I think much of that customization is actually what has kept me away from running Android.

The one thing that I really hate that was introduced was the date time picker in iOS14. I’ve included screenshots from my iPhone 11 Pro Max running the new version and my iPhone 7 running the old version.

The old version had the issue that it was not intuitive to be able to pick a minute that didn’t align to five minute increments, but was very easy to select the day, hour, or minute individually and scroll to a reasonable number for the start time, then switch the the end time and do the same. The keyboard was only shown when I was typing the name of the appointment or the location.

The new one uses half of the screen to pick just the day, as well as displaying the keyboard, which does not seem to affect the time. I touch the tiny display with the time, and if I can select the hour, I can scroll my finger up and down over the entire screen to scroll the number. If I miss the number slightly, the screen moves to show my another part of the entry field. Then I have to repeat the same solution with the minute. When I’m trying to hit the hour, I hit the minute, and vice versa.

Because of the size of the calendar entry, I have to scroll the entire screen to find where the end time might be.

This change just feels like change for change sake, and poorly implemented. I wonder if it’s even worse on a smaller screen.

Old Man Yells at Cloud

iOS14.1 was released today, and I’ve already upgraded to it, but don’t see anything I’d consider an improvement to this issue.

Access Windows Share from Raspberry Pi (revisited)

Last year I described a simple method of automounting a directory from my windows server to my Raspberry Pi. Since then I’ve gone down a couple of paths to simplify rebuilding my Raspberry Pi machines.

The method I used last year required modifying the /etc/hosts file, the /etc/fstab file, pre-creating the mount points, and creating a credentials file to store the windows login credentials.

My new method doesn’t require modification of the /etc/hosts or /etc/fstab files, or pre-creating the mount points. Instead I’m relying on two features, Multicast DNS and systemd.automount unit files.

In the old method, to find the windows server, I added it to the local hosts file on the raspberry pi.

192.168.0.12 Acid

Using Multicast DNS, if I simply recognize that I can reach the server with the name Acid.WimsWorld.local the raspberry pi will find the server on the local network. My first step was to modify my /etc/fstab enty to use the local address and clean up my hosts file.

//acid.wimsworld.local/web /media/acid/web/ cifs credentials=/etc/wimsworld.smb.credentials,noauto,x-systemd.automount,x-systemd.idle-timeout=2min,_netdev 0 0

I’d never been happy with modifying the /etc/fstab file as part of my system configuration because in newer installations it is unique to each machine, specifying the boot partitions by their formatted serial number:

proc            /proc           proc    defaults          0       0
PARTUUID=142ff4e3-01  /boot           vfat    defaults          0       2
PARTUUID=142ff4e3-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

In my recent programming projects I’ve been working with systemd unit files to control my service processes and have come to understand how they work for automounting directories as well. I like that each directory has its own unit files meaning that a modification is less likely to cause problems for the system as a whole.

The single line from the /etc/fstab file above is removed and replaced by two unit files, /etc/systemd/system/media-acid-web.mount and /etc/systemd/system/media-acid-web.automount.

[Unit]
Description=Acid Web

[Mount]
What=//acid.wimsworld.local/web
Where=/media/acid/web
Type=cifs
Options=credentials=/etc/wimsworld.smb.credentials,vers=2.1

[Install]
WantedBy=multi-user.target

and

[Unit]
Description=Automount Acid Web

[Automount]
Where=/media/acid/web
TimeoutIdleSec=120

[Install]
WantedBy=multi-user.target

I still had to create the credentials file for this to work, since I wanted the credentials file to be only root readable in a different location. /etc/wimsworld.smb.credentials

username=WindowsUsername
password=WindowsPassword
domain=OptionalDomainName

After the three files are created, systemd needs to reload its database with the systemctl daemon-reload command, the automount needs to be enabled with the systemctl enable media-acid-web.automount command, and then started with the systemctl start media-acid-web.automount command.

The naming of the mount files is important, and described explicitly in the man pages for each of mount and automount. In my case, /media/acid/web gets named media-acid-web.mount and media-acid-web.automount. I didn’t need to create mount points in the /media directory, as systemd automatically takes care of that.

I was able to create all of the above with a simple paste into my terminal with the following string:

sudo bash
cat > /etc/systemd/system/media-acid-web.mount <<EOF
[Unit]
Description=Acid Web

[Mount]
What=//acid.wimsworld.local/web
Where=/media/acid/web
Type=cifs
Options=credentials=/etc/wimsworld.smb.credentials,vers=2.1

[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/media-acid-web.automount <<EOF
[Unit]
Description=Automount Acid Web

[Automount]
Where=/media/acid/web
TimeoutIdleSec=120

[Install]
WantedBy=multi-user.target
EOF
cat > /etc/wimsworld.smb.credentials <<EOF
username=WindowsUsername
password=WindowsPassword
domain=OptionalDomainName
EOF
chmod 0600 /etc/wimsworld.smb.credentials
systemctl daemon-reload
systemctl enable media-acid-web.automount
systemctl start media-acid-web.automount
exit

With the standard Raspberry Pi setup, the cat command is not available as a sudo command while the bash shell is. I’m taking advantage of that by running the bash shell as root and then all of the other commands with root privileges.