COVID-19: The New Face of Bicycling

Eastbound on the Walkway Over the Hudson, which asks everyone to mask up:

The New Face of Bicycling - Ed masked - 2020-05-21
The New Face of Bicycling – Ed masked – 2020-05-21

Homebrew cloth masks mostly protect you, not me, but they’re still a reasonable way to tamp down the infection rate.

You’d (well, I’d) like to know the population infection rate, but we don’t have enough random testing to justify a number. Current testing remains biased toward those most likely to be infected, so the 15% cumulative rate (total positive / total tested) is certainly a gross overestimate and the 4% daily rate (new positive today / tested today) is still biased upward..

We figure the real population rate is well under 4%, which means we don’t encounter many infected folks out there.

But even 4% means staying isolated is the only way to prevent another wave of infection and another 23,000 deaths (in NY). The Mid-Hudson region has yet to meet all the state criteria for “restarting”, although Dutchess County has recently become ready, so we’ll be continuing all our usual at-home activities.

A number of state are now “opening up” without worrying about the details. Because exponential growth starts very slowly and the dying begins three weeks after the infections, the CNN charts (near the bottom of the page) will be revealing; we’ll witness several large-scale epidemiology experiments in real time over the next few months.

We have enough data to know anybody in and beyond our age bracket has plenty to worry about.

I think if any single action other than a virus killed 100,000 US citizens in three months, there wouldn’t be nearly as much discussion about the correct response. On the other paw, COVID-19 still runs a little under the rate for heart disease, so it seems we can get used to dying, even in bulk, when we do it long enough.

Gosling Time

The Dutchess Rail Trail has gotten far more use in recent months than ever before, with entire families walking along the path:

Canada Geese Families on the Rail Trail - 2020-05-08
Canada Geese Families on the Rail Trail – 2020-05-08

Almost by definition, though, goslings don’t practice social distancing …

COVID-19: Elephant Tracks

Getting a post mentioned on Reddit causes a traffic spike:

Elephant Sighting - Reddit traffic spike
Elephant Sighting – Reddit traffic spike

It’s nothing like the bedbug impulse, though …

The bulk of the subsequent increase comes from the Fu Mask Templates, although I suspect folks aren’t looking for 3D printed stuff.

As far as my original predictions go, I’m pleased to be somewhat wrong, as the most recent data shows the effect of handwashing, distancing, and general paranoia:

COVID-19 - USA Total Cases and Total Deaths - 2020-04-08
COVID-19 – USA Total Cases and Total Deaths – 2020-04-08

The lowered slope in the Total Cases curve means the cases now increase by a factor of ten every 20 days, rather than every eight, which is a major improvement. Still, it implies whatever seems bad right now will be only 10% of the badness in three weeks.

Folks with better models than my ruler make better predictions:

They assume “full social distancing through May 2020” and, apparently, the virus vanishing thereafter.

The colored area represents the 95% uncertainty range. Among other things, we don’t know what will happen when the (unknown number of) currently infected people need (far) more medical care / equipment / resources than we have available (“open image in new tab” for more dots):

Hospital Resources - projection - 2020-04-09
Hospital Resources – projection – 2020-04-09

Given our somewhat … erratic … national leadership, keeping everybody tucked in and the economy turned off for any substantial duration seems unlikely, but there’s no other way to reduce the death toll. The vast majority of the population will not have been exposed to COVID-19 and will, therefore, remain vulnerable to any (infected-but-asymptomatic, thus untested) people arriving from other counties / states / countries.

You know what to do: stay home and wash your hands. You’re buying time for the medical folks to catch up with the situation.

Fu Mask Cutting Templates

A local hospital contacted Mary’s quilting group to sew up cloth covers to prolong the life of their medical-grade N95 masks. Their recommended pattern, the Fu Face Mask from the FreeSewing group, comes in three sizes:

Freesewing - Fu Mask
Freesewing – Fu Mask

N.B.: Use their original PDF, because a JPG picture probably won’t come out at the right size.

Also N.B.: Used by itself, this is not a medical-grade filter mask.

The patterns do not include the usual 1/4 inch seam allowance around the outside, so I cranked out 3D printed plastic cutting templates.

If you’re not interested in 3D printing, 2D print the PDF file on cardboard, sketch a seam allowance, and cut it out, as quilters have been doing since slightly after home printers happened.

The plan of attack:

  • Convert mask outlines into a bitmap image (GIMP)
  • Create Bezier curves by tracing outlines (Inkscape)
  • Save curves as SVG files
  • Convert SVG into solid model (OpenSCAD)
  • Add stiffening ribs &c
  • Save as STL solid model
  • Slice into G-Code file (Slic3r)
  • Fire the M2!

So, we begin …

Import the PDF into The GIMP, delete the text & suchlike, convert to monochrome, and save the pattern outlines as a PNG file:

Fu Facemask - outlines
Fu Facemask – outlines

It turns out Inkscape can directly import the PDF, but it valiantly tries to convert all the text and the incidental graphic elements, none of which will be useful in this situation. It’s easier to delete them in The GIMP and make a bank shot off a PNG file.

Update: Scruss’s comment provides a much simpler workflow!

Import the PNG into Inkscape and trace one outline with the Bezier curve tool:

Fu Mask - Inkscape Bezier trace
Fu Mask – Inkscape Bezier trace

If you squint really carefully, you’ll see Bezier control handles sticking out of the nodes. I laid three nodes along the top arc and four along the right side, but do what’cha like; the Insert key or Shift+I inserts and Delete removes nodes. It’s easier to center a node in the middle of the PNG line with snapping turned off: Shift+drag while mousing or globally with #.

You could unleash the bitmap auto-tracer, but it generates a bazillion uselessly tiny Bezier curves.

When you’re happy, select and copy the path with Ctrl+C, paste it into a shiny new Inkscape document (Ctrl+N) with Ctrl-V, save it with a catchy file name like Fu Mask - Small - nominal.svg, and close that document to return to the document with the PNG outlines and the original path.

Select the original path again, create a dynamic offset with Ctrl+J, open the XML editor with Ctrl+Shift+X (which automagically selects the proper SVG element), and change the inkscape:radius value from 0 to 6.35 (mm, which everyone should use) to get a 1/4 inch seam allowance:

Fu Mask - Inkscape XML Editor - Offset radius
Fu Mask – Inkscape XML Editor – Offset radius

The path will puff out with curved corners:

Fu Mask - Inkscape offset
Fu Mask – Inkscape offset

Copy into a new document, save as Fu Mask - Small - seam allowance.svg, and close.

Repeat that process for each of the three mask sizes to create three pairs of SVG files: the nominal mask outline and the corresponding seam allowance outline for each size.

The OpenSCAD program imports the SVG files, removes the nominal outline from within the seam allowance to leave the outline, adds stiffening ribs, and stamps an ID letter on both sides of the central button:

Fu Mask Cutting Template - Small - solid model
Fu Mask Cutting Template – Small – solid model

Choose one of the three sizes with the OpenSCAD customizer, save the resulting model as an STL file, repeat for the three sizes, and you’re done.

This process can convert any outline paths in SVG files into cutting templates, so, should the Fu Mask not suit your fancy, Use The Source.

For convenience, the STL files are on Thingiverse.

From the comments, a Washington hospital uses a similar pattern: their PDF with assembly instructions.

The OpenSCAD source code as a GitHub Gist:

// Fu Mask cutting templates
// Ed Nisley - KE4ZNU - 2020-03
// Mask patterns from:
// More info on my blog:
/* [Mask Size] */
Name = "Small"; // [Small, Medium, Large, Test]
/* [Hidden] */
Templates = [ // center ID letter and file name
["T","Test"], // for whatever you like
T_ID = 0; // Template indexes
T_NAME = 1;
BarThick = 4.0; // template thickness
HubOD = 20.0; // center button diameter
// These should match slicer values
ThreadThick = 0.25;
ThreadWidth = 0.40;
Protrusion = 0.1; // make clean holes
//--- Build it
t = Templates[search([Name],Templates,1,1)[0]]; // find template index
Dir = "./";
FnOuter = str(Dir,"Fu Facemask - ",t[T_NAME]," - seam allowance.svg");
FnInner = str(Dir,"Fu Facemask - ",t[T_NAME]," - nominal.svg");
difference() {
linear_extrude(BarThick,convexity=5) {
intersection() {
union() {
square([200.0,5.0],center=true); // horizontal bar
square([5.0,200.0],center=true); // vertical bar
circle(d=HubOD); // central button
difference() { // cutting template!
translate([0,0,BarThick - ThreadThick]) // top ID recess
cylinder(d=HubOD - 6*ThreadWidth,h=ThreadThick + Protrusion);
translate([0,0,-Protrusion]) // bottom ID recess
cylinder(d=HubOD - 6*ThreadWidth,h=ThreadThick + Protrusion);
translate([0,0,2*BarThick/3]) // top ID
mirror([1,0,0]) // bottom ID

Verily, there’s nothing like a good new problem to take your mind off all your old problems …

Upconverting Baby Wipes

As other folks have discovered, it’s straightforward to convert soft, soothing baby wipes into toxic sanitizing wipes by pouring harsh chemicals down the hatch:

AmazonBasics Baby Wipes
AmazonBasics Baby Wipes

Ending up with the proper dilution, though, requires knowing how much liquid the wipes already have, so you can account for it in whatever recipe you’re following.

Stand back, I’m going to use arithmetic!

Gut a new package of wipes: 552 g total weight, with 80 wet wipes weighing 536 g, so the packaging amounts to 15.5 g and each wet wipe weighs 6.7 g.

Hang five wipes in the breeze for a few hours to find they weigh 9.2 g. They’re still slippery, because of all the aloe & Vitamin E & whatever else Amazon specifies for the mix, but they’re dry. One dry wipe weighs 1.8 g, so all 80 weigh 150 g.

The block o’ wet wipes holds 536 – 150 = 390 g = 390 ml of water.

Should you want a 70% (by volume) isopropyl alcohol solution, pour 0.7/0.3 × 390 ml = 910 ml of 99% alcohol into the package and let it settle for a while. Each wipe will emerge dripping wet, but that’s not entirely a Bad Thing. Perhaps it’d be a good idea to start by letting the block dry out for a while, re-weigh, then calculate the alcohol dose from the reduced amount of water.

Bleach dilutions for sanitation seem wildly varied, but the jug of 8.25% sodium hypochlorite on the shelf says 1/2 cup to a gallon, a 1:32 volume ratio. Starting with 390 ml of water-like substance in the package, pour 12 ml of bleach into the hatch, let things settle, then squish it around for good measure.

None of the dosages seem particularly critical, given the slapdash way everybody applies wipes.

You should, of course, conspicuously mark the packages, so as not to apply toxic wipes to sensitive parts of you or your baby …

COVID-19: Elephant Path Prediction

We now have enough statistics from the USA to draw some useful graphs, so click the Logarithmic options to make the charts comprehensible:

COVID-19 - USA Total Cases and Total Deaths - 2020-03-25
COVID-19 – USA Total Cases and Total Deaths – 2020-03-25

The penciled lines give an eyeballometric fit, but it’s pretty obvious the USA is now dealing with purely exponential infection rates.

Total Cases, which is the patients tested = people already in the medical system, is growing by a factor of ten every eight days. By next weekend, the USA will have one million Total Cases: average it to 112,000 new cases, every day, over the next eight days.

Which may not happen, if only because we may not have the intake / testing / recording capacity for that number of patients and maybe, just maybe, Social Distancing will have an effect. I expect the Total Cases line bend downward slightly during the week, but it won’t be anywhere near horizontal. Obviously, the extrapolation fails completely within the next 24 days, because we lack a factor of 1000 more people to infect.

Total Deaths still equals Total Cases with a delay of fourteen days. By next weekend, the USA will have 10,000 Total Deaths: ramping up to average 1120 new deaths, every day, over the next eight days.

The 9,000 patients who will die in the next week are already in the medical system (because you take about two weeks to die) and, at least in downstate NY, have essentially filled all available hospital beds; they’re getting the best care possible from the medical establishment.

The next 900,000 cases, appearing “suddenly” during the next eight days, have nowhere to go; doubling hospital capacity and converting every flat surface into a mass ward are worthwhile goals, but they’re a linear solution to an exponential problem.

Not every new case becomes a patient, but in the USA we seem to be testing only folks with obvious COVID-19 symptoms, so all the optimistic hospitalization estimates of 10% are off the table and 50% seems more believable. Pick any percentage you like.

Eight days from now, the rate will ramp toward 10,000 deaths per day, to reach 100,000 Total Deaths in sixteen days, again, as an average.

Nearly everybody will survive this pandemic, because the overall death rate seems to be a few percent. For those of us in the Boomer-and-up generations, (theme: Aqualung) well, this may be our contribution to solving the Social Security & Medicare budget problems.

COVID-19: Elephant Sighting

As far as this engineer can tell, here’s about all you need to know about the COVID-19 pandemic:

Total Deaths = Total Cases recorded two weeks earlier

This also works forward in time: given the total number of cases “today”, I (and you) can predict the total number of deaths in two weeks, give or take a few days.

Run the numbers for Italy, because it has a relatively long timeline and trustworthy data:

  • 2020-03-01: 1694 cases → 2020-03-15: 1809 deaths
  • 2020-03-02: 2036 cases → 2020-03-16: 2158 deaths
  • 2020-03-03: 2502 cases → 2020-03-17: 2503 deaths

As the numbers become difficult to comprehend, the time difference slows to 16 days instead of 14:

  • 2020-03-06: 4636 cases → 2020-03-22: 4825 deaths
  • 2020-03-07: 5883 cases → 2020-03-23: 6077 deaths

On 2020-03-23, Italy had 63,927 confirmed cases. Prediction: Easter will not be celebrated in the usual manner.

Consider the data for the US, also in March 2020:

  • 2020-03-05: 175 cases → 2020-03-19: 174 deaths
  • 2020-03-06: 252 cases → 2020-03-20: 229 deaths
  • 2020-03-07: 353 cases → 2020-03-21: 292 deaths

Pop quiz: Given that the US has 32,761 total cases as of today (2020-03-22), estimate the total deaths in two weeks.

New York State will have similar statistics, although it’s too soon to draw conclusions from today’s 20,875 confirmed cases.

In addition to the Wikipedia articles linked above, you may find these sites useful:

Exhaustive tracking and mapping from Johns Hopkins (the GUID gets to reach the JHU data):

Comprehensive COVID-19 tracking, with logarithmic graph scales:

More raw data:

CDC National cases, with a per-day graph down the page:

New York State COVID-19 info:

Perhaps more useful for me than you, but the Dutchess County information:

The current recommendation: remain home unless and until you develop COVID-19 symptoms requiring urgent medical attention. Should that happen to me, I fully expect there will be no medical attention to be found and, certainly, all available medical equipment will be oversubscribed.

Speaking strictly as an Olde Farte looking at the data, the future looks downright grim.

On the upside, it’s amazing how little an order to remain home changed my daily routine: so many projects, so little time.

Memo to Self: Wash your hands!