2018 Mini Cruise

This month I had the very rare occasion of having some free time so I wanted to get a few consecutive days of sailing done. How about a mini cruise?! October is typically a great sailing month here on the California coast but November is a bit iffy. As winter approaches, the weather alternates between dangerously large swell and glassy seas, with not too many days in the middle.

Still, I had free time now so best to take advantage of it. On the first week the weather was not good, with swells in the 10-15 ft range and winds gusting to 35 knots. The second week looked good though. Too calm for sailing, but that’s how it goes in the fall here.

My plan was to head north from Santa Cruz to San Francisco and then decide based on weather. I had some hope of making it to Drake’s Bay but the weather forecast decided against that. On the day I would’ve been there, forecast predicted gusty winds from the east which didn’t sound very safe. The anchorage there is best in the usual N or NW winds. So instead, I went to Angel Island which is always nice.

Here are notes and photos from each day:

  1. Santa Cruz to Half Moon Bay – 49 nm
  2. Half Moon Bay to Pier 39 (SF) – 32 nm
  3. Pier 39 (SF) to Angel Island – 5.2 nm
  4. At Angel Island
  5. Angel Island to Half Moon Bay – 30 nm
  6. Half Moon Bay to Santa Cruz – 50 nm

So 166 nautical miles in total. Unfortunately, most of that was motoring.

Here is some video of the trip: https://youtu.be/Ndyu3lYQSc8

All in all, despite all the motoring, a fun trip! This was the longest continuous cruise I’ve done so that was a nice experience. I was mostly self-sufficient on the boat during these six days. I didn’t plug in to shore power or fill water tanks at any point. I did buy 4.9 gallons of diesel in Half Moon Bay on day 5.

Of all the improvements I’ve made to the boat, the autopilot is the most significant. I never could have attempted a trip like this without it. Standing at the helm for six to ten hours a day would be too much to even consider. Now with the autopilot, I only had to steer a few minutes a day, in and out of the harbors/anchorages.

2018 Mini Cruise (Day 6)

The final day of the trip was the longer stretch of coast back to Santa Cruz. Going south is always easier as the wind and waves are on our back. Except today there was no wind and no swell, just glassy seas.

N winds 5 to 10 kt. Wind waves 2 ft or less. Mixed swell
NW 1 to 2 ft at 9 seconds and S 2 to 3 ft at 16 seconds. Patchy
smoke.

Would have been nice to have the 10 knots of wind from the forecast, but it was mostly in the range of 0-5 all day. So, another day of nearly all motoring, unfortunately.

The seas were so calm that the jellyfish were on the surface in large numbers, always fun to see. Also saw one fairly small (maybe 4ft) Mola Mola sunning itself.

Didn’t take any photos but I have some video of the jellyfish which I’ll process later.

Arrived in Santa Cruz harbor about two hours after sunset.

Total for the day: 50 nautical miles.

ruta6

 

 

 

2018 Mini Cruise (Day 5)

2018-11-12

The plan for today was uncertain. Having fouled and lost the anchor in Half Moon Bay last time, I didn’t want to anchor out there again. So my plan was to leave early so I could sail all the way to Santa Cruz today if necessary.

With that plan, I left Angel Island before sunrise. The tides cooperated and this allowed me to hit max ebb on the Golden Gate bridge for a fast ride out on the current conveyor belt.

NE winds 10 to 20 kt. Wind waves 2 to 4 ft.
NW swell 2 to 3 ft at 10 seconds. Areas of smoke.

DSC18A_5453Visibility was low between the wildfire smoke and the usual fog. Made for a dramatic sunrise:

DSC18A_5457That’s Alcatraz in the hazy smoke and immediately behind it, the San Francisco skyline (completely hidden in the smoke).

The ebb pushed me out the gate fast (7+ kts SOG). There is often heavy shipping traffic in this area and today was no different. Finally got some good use out of the AIS system! After passing the Golden Gate I could see on the chartplotter that a large tanker was heading in even though I didn’t see the ship until much later.

The seas were very flat so I was able to cut across the south bar earlier than usual. Plenty of dolphins in this area!

Had some really great sailing for a while. Ten knots of wind from the east (very rare direction) made for a beam reach down the coast. A whale quietly surfaced just a boat-length away at one point!

After a while the winds died down as forecast. From there on it was just motor-sailing down to Half Moon Bay. Approaching the PP buoy, I called the harbor to see if any space was available. If not, I’d continue to Santa Cruz for a midnight arrival. However, this time they had some space! So I diverted into the harbor and tied off.

Total for the day: 30 nautical miles.

ruta5

2018 Mini Cruise (Day 4)

No sailing today. Staying a full day and another night at Angel Island.

This is the cruising life! Spent time in the morning just reading and taking in the nice views (although, still way too much smoke in the air).

DSC18A_5375Then I kayaked over to the island and did some hiking and wandering. The cafe was open today (it was closed yesterday due to smoke, said a sign) so I had lunch there.

DSC18A_5391The raccoons at Angel Island have no fear of humans, they wander around the crowds of people, fun to watch.

Eventually I paddled back to the boat and did a bit of maintenance. I dug out my other anchor and hooked it up just in case it’s needed. I also noticed the top port cheekblock for the lazy jack has come loose. Can’t fix that here, it’ll have to wait until I climb the mast.

After sunset, a large group of pelicans (over a hundred, I’d say) had a feeding frenzy right in the cove between the boats. It was really fun to see them dive for fish over and over. It was almost dark so the photographs didn’t come out well, but here’s one:

DSC18A_5421Next day I wanted to get an early start so then it was time to sleep early.

2018 Mini Cruise (Day 3)

After two long days, today was just a short hop over to Angel Island.

Thus, I didn’t have to get up before sunrise and I even had time for a warm breakfast on Pier 39.

The day was windy and choppy, typical San Francisco summer weather, although it is November. So got a little bit of sailing in and then it was time to turn into Ayala cove.

It was the first time I had to pick up the mooring balls (fore and aft) singlehanded but it all went smoothly.

After settling in, I went to the island on an inflatable kayak, walked around for a bit and then paddled back to the boat.

Total for the day: 5.2 nautical miles.

ruta3

2018 Mini Cruise (Day 2)

2018-11-09

The second day started way earlier than I had hoped. I woke up at 12:30am to the sound of water slapping against the hull. And wind. That sounds like a lot of wind! Checking the instruments, 22 knots!

Will the anchor hold? To make matters worse, the wind had turned around making the beach north of the anchorage a lee shore.

I was up until 4am monitoring the situation. The wind kept blowing at 20-22 knots and also making large direction changes every few minutes. Not a fun night!

I had the anchor watch running on the primary chartplotter (which I can monitor on a tablet from the comfort of the aft cabin) and also on a handheld GPS as a backup. Fortunately the anchor never budged, the boat remained in a tight circle all night.

Around 4am the wind decreased to 12-15 knots and I finally was able to get a couple hours of sleep.

My plan for the day had been to leave at 7:30am in order to cross the Golden Gate bridge on a favorable tide. So I was up at 7am to prepare and hoist anchor.

Well.. long story short, looks like the anchor tangled itself with something very heavy. No wonder it never moved an inch even with the repeated 180 degree windshifts and 20+ knots. I spent three hours trying to raise it. Even had a rising tide to help. Eventually I had to concede defeat and abandon the anchor and chain on the bottom.

E winds 5 to 15 kt with gusts up to 25 kt...
becoming NW this afternoon.
Wind waves 3 to 4 ft this morning...becoming 2 ft or less.
NW swell around 3 ft at 10 seconds. Patchy smoke this morning.

The rest of the trip, once I finally got moving, was uneventful. Heavy fog at sea and heavy smoke over land (from the wildfires) meant very little visibility in either direction. Flat seas and little to no wind meant nothing but motoring today.

Given the delay in the morning, instead of arriving at the Golden Gate at a moderate flood, I arrived at max ebb, -4.7 knots of current.

The current runs strongest in the deep water channel. However, the shallow area just south of the bridge often has a counter current so I tried to hide there on the approach. Instead of -4.7 knots just a few hundred feet to the left, I actually had 2+ knots of counter current to ride, resulting in 8 knots SOG towards the bridge! Nice.

Eventually, reaching the bridge, I had to get into the ebb at which point my speed over ground dropped from 8 to barely above 1.

ruta2bOnce past the bridge, it was a short motor into Pier 39 where I stayed for the night.

DSC18A_5363Total for the day: 32 nautical miles.

ruta2

 

2018 Mini Cruise (Day 1)

2018-11-08

The first day was to be the longest and toughest. Heading north from Santa Cruz means the wind will (nearly always) be on the nose and the swell is against us. This is the typical “bash” of traveling north on the California coast.

The weather had been rough for many days prior to this (swells over 10 ft in the 9-10 second range). As winter approaches, the coastal weather here tends to be either glassy calm or boisterous to stormy.

Today the swell was down to a more reasonable level and the forecast over the next 5-7 days looked nice, so the weather window was open. Time to go!

NW winds 10 to 20 kt with gusts up to 25 kt.
Wind waves 3 to 4 ft. NW swell 4 to 7 ft at 12 seconds.

Being November, the days are short, so I wanted to start as early as possible. I left about an hour before sunrise for the long motor-sail to Half Moon Bay.

Had a little bit of everything in terms of conditions on this first day. Long calm stretches, sometimes windy sometimes not. Also an hour or so of a very wet ride in the bumpier swell.

Davenport, just north of Santa Cruz:

DSC18A_5344Pigeon Point Lighthouse:

DSC18A_5345Approaching Half Moon Bay (really, Pillar Point) harbor I called to ask about guest slip availability. Unfortunately, none available! Fortunately there is a large anchorage between the inner and outer breakwaters so that’s where I went for the night.

By 4:30pm I was anchored in the outer harbor. It was very calm inside the harbor but I’m always a bit wary of sleeping while anchored so I let out 100 feet of chain in 12 feet of water.

Due to the large wildfires in California this week, the air was filled with smoke, leading to dramatic sunsets:

DSC18A_5360Total for the day was 49 nautical miles.

ruta1

Duplicate finder performance (2018 edition)

It has been over three years since I did a performance comparison of a group of duplicate file finder utilities. Having recently released dupd 1.7, I finally took some time to refresh my benchmarks.

The Contenders

This time around I tested the following utilities:

I had also intended to test the following, but these crash during runs so didn’t get any numbers: dups, fastdup, identix, py_duplicates.

Based on these and the previous results, I think going forward I’ll only test these: dupd, jdupes, rmlint and rdfind.

If anyone knows of another duplicate finder with solid performance worth comparing, please let me know!

The Files

The file set has a total of 154205 files. Of these, 18677 are unique sizes and 1216 were otherwise ignored (zero-sized or not regular files). This leaves 134312 files for further processing. Of these, there are 44926 duplicates in 13828 groups (and thus, 89386 unique files).

The files are all “real” files. That is, they are all taken from my home file server instead of artificially constructed for the benchmark. There is a mix of all types of files such as source code, documents, images, videos and other misc stuff that accumulates on the file server.

In the past I’ve generally focused on testing on SSD media only, as that’s what I generally use myself. To be more thorough, this time I installed a HDD on the same machine and duplicated the exact same set of files on both devices.

The cache

Of course, when a process reads file content it doesn’t necessarily trigger a read from the underlying device, be it SSD or HDD, because the content may already be in the file cache (and often is).

This time I’ve run each utility/media combination twice. Once where the file cache is cleared prior to every run and another where the cache is left undisturbed from run to run.

In my experience, the warm cache runs are more representative of real world usage because when I’m working on duplicates I run the tool many times as I clean up files. For the sake of more thorough results, I’ve reported both scenarios.

The methodology

For each tool/media (SSD and HDD) combination, the runs were done as follows:

  1. Clear the filesystem cache (echo 3 > /proc/sys/vm/drop_caches).
  2. Run the scan once, discarding the result.
  3. Repeat 5 times:
    1. For the no-cache runs, clear the cache again.
    2. Run and time the tool.
  4. Report the average of the above five runs as the result.

The command lines and individual run times are included at the bottom of this article.

Results

1. HDD with cache

HDDcache2. HDD without cache

HDDNOcache3. SSD with cache

SSDcache4. SSD without cache

SSDNOcacheSummary

As you can see above, the ranking varies depending on each scenario. However, I’m happy to see dupd is the fastest in three of four scenarios and a very close second in the fourth.

To conclude with some kind of ranking, let’s look at the average finishing position of each tool:

Tool aveRAGE ranking
dupd 1.3 1, 1, 1, 2
rmlint 3.0 2, 7, 1, 2
jdupes 3.8 3, 2, 5, 5
rdfind 3.8 5, 4, 3, 3
duff 4.5 4, 3, 4, 7
fdupes 5.8 6, 5, 6, 6
fslint 6.0 7, 6, 7, 4

The Raw Data

-----[ rmlint : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 92.07
Running 5 times (timeout=3600): rmlint -o fdupes /hdd/files
Run 0 took 27.83
Run 1 took 27.75
Run 2 took 27.59
Run 3 took 27.75
Run 4 took 27.66
AVERAGE TIME:
27.716


-----[ jdupes : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 268.6
Running 5 times (timeout=3600): jdupes -A -H -r -q /hdd/files
Run 0 took 5.96
Run 1 took 5.94
Run 2 took 5.96
Run 3 took 5.93
Run 4 took 5.99
AVERAGE TIME:
5.956


-----[ dupd-hdd : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 46.78
Running 5 times (timeout=3600): dupd scan -q -p /hdd/files
Run 0 took 3.24
Run 1 took 3.29
Run 2 took 3.21
Run 3 took 3.21
Run 4 took 3.25
AVERAGE TIME:
3.24


-----[ rdfind : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 90.25
Running 5 times (timeout=3600): rdfind -n true /hdd/files
Run 0 took 8.52
Run 1 took 8.49
Run 2 took 8.53
Run 3 took 8.48
Run 4 took 8.41
AVERAGE TIME:
8.486


-----[ fslint : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 103.64
Running 5 times (timeout=3600): findup /hdd/files
Run 0 took 20.38
Run 1 took 20.4
Run 2 took 20.36
Run 3 took 20.36
Run 4 took 20.39
AVERAGE TIME:
20.378


-----[ fdupes : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 278.11
Running 5 times (timeout=3600): fdupes -A -H -r -q /hdd/files
Run 0 took 15.76
Run 1 took 15.78
Run 2 took 15.72
Run 3 took 15.74
Run 4 took 15.88
AVERAGE TIME:
15.776


-----[ duff : CACHE KEPT : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 935.51
Running 5 times (timeout=3600): duff -r -z /hdd/files
Run 0 took 7.03
Run 1 took 7.01
Run 2 took 6.98
Run 3 took 6.99
Run 4 took 6.99
AVERAGE TIME:
7


-----[ rmlint : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 90.59
Running 5 times (timeout=3600): rmlint -o fdupes /hdd/files
Run 0 took 89.86
Run 1 took 89.4
Run 2 took 90.44
Run 3 took 89.87
Run 4 took 90.84
AVERAGE TIME:
90.082


-----[ jdupes : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 269.69
Running 5 times (timeout=3600): jdupes -A -H -r -q /hdd/files
Run 0 took 268.97
Run 1 took 270.07
Run 2 took 268.52
Run 3 took 268.95
Run 4 took 269
AVERAGE TIME:
269.102


-----[ dupd-hdd : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 46.26
Running 5 times (timeout=3600): dupd scan -q -p /hdd/files
Run 0 took 46.37
Run 1 took 46.43
Run 2 took 46.24
Run 3 took 46.68
Run 4 took 46.62
AVERAGE TIME:
46.468


-----[ rdfind : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 86.59
Running 5 times (timeout=3600): rdfind -n true /hdd/files
Run 0 took 86.48
Run 1 took 87.02
Run 2 took 86.55
Run 3 took 86.57
Run 4 took 86.75
AVERAGE TIME:
86.674


-----[ fslint : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 103.29
Running 5 times (timeout=3600): findup /hdd/files
Run 0 took 103.49
Run 1 took 103.64
Run 2 took 102.97
Run 3 took 103.16
Run 4 took 103.28
AVERAGE TIME:
103.308


-----[ fdupes : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 276.02
Running 5 times (timeout=3600): fdupes -A -H -r -q /hdd/files
Run 0 took 276.88
Run 1 took 276.18
Run 2 took 276.83
Run 3 took 277.87
Run 4 took 276.99
AVERAGE TIME:
276.95


-----[ duff : CACHE CLEARED EACH RUN : /hdd/files]------
Running one untimed scan first...
Result/time from untimed run: 935.56
Running 5 times (timeout=3600): duff -r -z /hdd/files
Run 0 took 936.06
Run 1 took 936.87
Run 2 took 936.58
Run 3 took 937.01
Run 4 took 935.95
AVERAGE TIME:
936.494


-----[ rmlint : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 18.62
Running 5 times (timeout=3600): rmlint -o fdupes /ssd/files
Run 0 took 6.38
Run 1 took 6.33
Run 2 took 6.3
Run 3 took 6.32
Run 4 took 6.32
AVERAGE TIME:
6.33


-----[ jdupes : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 35.12
Running 5 times (timeout=3600): jdupes -A -H -r -q /ssd/files
Run 0 took 6.89
Run 1 took 6.84
Run 2 took 6.88
Run 3 took 6.83
Run 4 took 6.91
AVERAGE TIME:
6.87


-----[ dupd-hdd : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 19.85
Running 5 times (timeout=3600): dupd scan -q -p /ssd/files
Run 0 took 3.34
Run 1 took 3.17
Run 2 took 3.25
Run 3 took 3.3
Run 4 took 3.29
AVERAGE TIME:
3.27


-----[ rdfind : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 31.43
Running 5 times (timeout=3600): rdfind -n true /ssd/files
Run 0 took 8.5
Run 1 took 8.38
Run 2 took 8.42
Run 3 took 8.39
Run 4 took 8.38
AVERAGE TIME:
8.414


-----[ fslint : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 44.67
Running 5 times (timeout=3600): findup /ssd/files
Run 0 took 20.63
Run 1 took 20.58
Run 2 took 20.54
Run 3 took 20.54
Run 4 took 20.53
AVERAGE TIME:
20.564


-----[ fdupes : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 42.13
Running 5 times (timeout=3600): fdupes -A -H -r -q /ssd/files
Run 0 took 15.68
Run 1 took 15.52
Run 2 took 15.53
Run 3 took 15.56
Run 4 took 15.54
AVERAGE TIME:
15.566


-----[ duff : CACHE KEPT : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 32.54
Running 5 times (timeout=3600): duff -r -z /ssd/files
Run 0 took 7
Run 1 took 6.96
Run 2 took 6.98
Run 3 took 6.95
Run 4 took 6.95
AVERAGE TIME:
6.968


-----[ rmlint : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 17.39
Running 5 times (timeout=3600): rmlint -o fdupes /ssd/files
Run 0 took 17.29
Run 1 took 17.21
Run 2 took 17.25
Run 3 took 17.24
Run 4 took 17.31
AVERAGE TIME:
17.26


-----[ jdupes : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 34.36
Running 5 times (timeout=3600): jdupes -A -H -r -q /ssd/files
Run 0 took 34.3
Run 1 took 34.35
Run 2 took 34.48
Run 3 took 34.34
Run 4 took 34.36
AVERAGE TIME:
34.366


-----[ dupd-hdd : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 19.7
Running 5 times (timeout=3600): dupd scan -q -p /ssd/files
Run 0 took 19.67
Run 1 took 19.65
Run 2 took 19.66
Run 3 took 19.65
Run 4 took 19.51
AVERAGE TIME:
19.628


-----[ rdfind : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 30.93
Running 5 times (timeout=3600): rdfind -n true /ssd/files
Run 0 took 30.7
Run 1 took 30.61
Run 2 took 30.72
Run 3 took 30.8
Run 4 took 30.79
AVERAGE TIME:
30.724


-----[ fslint : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 44.41
Running 5 times (timeout=3600): findup /ssd/files
Run 0 took 44.23
Run 1 took 44.3
Run 2 took 44.44
Run 3 took 44.24
Run 4 took 44.41
AVERAGE TIME:
44.324


-----[ fdupes : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 42.05
Running 5 times (timeout=3600): fdupes -A -H -r -q /ssd/files
Run 0 took 41.79
Run 1 took 41.79
Run 2 took 41.79
Run 3 took 41.8
Run 4 took 41.92
AVERAGE TIME:
41.818


-----[ duff : CACHE CLEARED EACH RUN : /ssd/files]------
Running one untimed scan first...
Result/time from untimed run: 32.45
Running 5 times (timeout=3600): duff -r -z /ssd/files
Run 0 took 32.49
Run 1 took 32.48
Run 2 took 32.52
Run 3 took 32.49
Run 4 took 32.48
AVERAGE TIME:
32.492

 

dupd 1.7 released

I just tagged release 1.7 of dupd.

See the ChangeLog for a list of changes.

The major change is that the SSD mode has been removed. That’s a bit sad because as I’ve written over the years, the SSD mode is/was faster in some scenarios when reading off a SSD. However, as I’ve also mentioned, the drawback was that the SSD mode could be vastly slower in the “wrong” circumstances.

As of version 1.6 I intended to keep both so the best one can be used in each situation. During the 1.7 development I ended up doing internal code refactoring on the HDD mode to make it simpler and faster. The end result was that the two implementations diverged ever further apart to the point that they barely shared any code. And the HDD mode became almost as fast as the SSD mode at its best, although not quite.

Maintaining the two separate code paths was becoming too much of a burden though. Given the nature of a hobby open source project I can only dedicate so much (read: little) time to it so, sadly, the SSD mode is gone. On the positive side, this allowed me to remove a lot of code, which is nice.

dupd 1.6 released

I just tagged release 1.6 of dupd.

See the ChangeLog for a list of changes.

As usual, there is not much in the way of directly user-visible changes. It should continue to work as it did. If not, let me know.

One change worth pointing out is that the HDD mode is now the default (a new option, –ssd, allows selecting the SSD mode). I’m on SSDs myself and generally use the SSD mode so why the change? Well, the HDD mode is a more conservative default because even though the SSD mode is often faster it is also true that the SSD mode can be dramatically slower in worst-case scenarios.

One downside of the HDD mode is that it uses more RAM. I haven’t seen it use excessive memory with any real-world file sets I have but in theory it could. If you run into this, there is a new option to limit buffer sizes (see man page).

Although not user-visible, this release does contain a significant rewrite of several subsystems (dir and path storage, thread work queues). So let me know if any bugs surface.