Thursday, January 6, 2022

I Should Table That Project

 My spouses' brother bought a house a few years back.  He has five kids, and they sit around a small, round table from the 70's - one of those awkward tables that wobble and have edges coming off.  He needs a new table.  I signed up for Pinterest explicitly to get "snapshots" of tables for his daughters to run through and give feedback on - well, because they are all Pinterest people.  The results came back as a "farmhouse" table top like this :

Note that this is not an actual farmhouse table design.  Those have four legs at each corner, not tied together.  The base in this case is two sets of "X" beams.  But, this is what I need to start working on.  With the COVID panic and quarantining going on right now, the price of lumber went through the roof (probably because they couldn't get to the saw mills to cut the boards).  I found someone who had a big pile of wood in his back yard that was used to haul pipe - and that wood has been sitting there for a long time.  That means the wood has already dried out.  There are numerous splits in the wood, which means I'll have to do some epoxy filling of different boards to make it more stable and give some good results.  Another issue is that I'm not yet sure what families of wood I even have.  I tried to grab all of the straightest, squarish boards that were light.  I did grab some other boards - I believe those are hardwoods - they are fairly heavy, and they've dried out.  I just hope they aren't walnut.


I know I don't need 20 of these things.  But, at $3 per board, I could not resist picking up some extras, just in case.

First step was running through and removing nails and staples.  For this, I went out and bought a metal detector from Harbor Freight (the hand-wand thing you'd see at an airport security if you forget that you have a large pair of pliers still in your pocket that you forgot about.  I removed all of the metal pieces, and made sure the boards checked out clean.  With a clean, metal-free group of boards, the steps are to get good, usable lumber out of these.


The next task was to get a first side that was planer, e.g. straight and not warped.  I used the jointer for this, since it had a 6" width capacity, and some of the boards were 6" wide.  I'm using the jointer and not the planer, because the planer will not "flatten" the edge - it will end up parallel to the other edge, which will have curved and warped from weathering.



I found that I was doing this like a machinist doing a scraping job - I'd run it through and skim just a little bit off, and check that it was imprinting the flat surface of the jointer onto the board.  Wash, rinse, and repeat until I had the board completely clean and flat.




I was a little surprised.  I thought it would all be white pine, but it turned out to be a mix.  One board was yellow pine, four were white pine, and eight were a reddish color that I was not expecting.  It smelled similar to pine, but did not smell like Cedar, so I'm assuming it's a redwood.  I know that is odd stuff to use in a piece of furniture, but I think it will do.  It's just odd to find redwood at all.

With those beams done on one side, I needed an adjacent side done that was square.  So, I had to use the jointer for the second side, too.





I used a machinists square to make sure I had the second side square to the other.  Once it was square, I could focus on getting it flat with no warping.  This 90-degree corner with flat sides will give me enough to feed through the band saw into 1 1/8" boards (that I can feed through a planer to get my table top boards).

So, off to the band saw.  I am aiming for just under 1" thickness on the table top.  I set the fence for 1", and ran the first edge through (since it had a planer side already, I didn't need to feed that side through the planer at a later time).  I ran each board through, and took the first faces off.  I reset the fence to just over 1", hoping to keep it as thin as possible and get a few more boards out of the beams, and ran each piece through until I had the thin strips left over.  These strips are going to be planed and glued to get some additional boards that might be needed for an extension.  But, the re-sawing is now complete, so I can put the bandsaw away.





My next task was to plane the boards down to the same size.  Since the first cuts were just barely under an inch thick, I kept running those through along with everything until all the boards were the same size.  From the 7 beams I used, I ended up with 16 boards, at 7/8" thick.


Once I had the thickness, I have three sides that are "done" - they are either parallel or perpendicular to each other.  I need a fourth one parallel to the far side.  I'll do that with the table saw.


Yeah, you can see the saw blade burn marks on there.  With the boards parallel, I could then run them through the jointer again to get good, square edges on that final edge.

The boards were dimensionally accurate at this point in everything except for the length, so I was ready to glue them up.  I needed a base that was as flat as I could get it to prop the table top onto.  I had a few beams I'd run through the jointer earlier.  I arranged these all parallel to each other (the table top boards would be set perpendicular to these.  I needed to get them not just parallel to each other, but also planer.  This is so that when I glue up the table top on them, the odds are better that I can end up with an actual flat table top.  I used door alignment wedges to prop up these beams, and an old trick to get them planer.  I tied strings from each corner, so I had parallel strings on the sides, as well as a cross in the middle.




It was then that I could use the wedges to lift the boards until the crossed strings were right on (without bending).  Then, I could lift the middle beams with the wedges until the strings and the beams met.  At this point, the beams are all planer, and that is what I need.  I grabbed some plastic sheeting (I don't want to glue the table top to the beams), and covered the beams.


I took the dimensionally-correct boards and selected the best surfaces, as well as which ends.  Yes, at this point, I'm selecting the actual table top.  Once defined, I could then rotate the boards all together (I actually did a spatial rotation - 3D design has its benefits.  The top was set on the plastic beams with the top-side down - so that I have a better chance at having a flat table top when the glue up is complete.


In the previous picture, you can see the bottom side of the boards.  These are ready to be glued up.  I grabbed my cast iron weights to keep it flat while it dries, and brought out the carpenters square to make sure I was close enough.  I waited until I had time, and then threw some glue down (I think I'm going to need more before this project is done).



Now, to wait for it to dry.  I really regret that the table top isn't perfectly flat.  Some of the boards are slightly out of alignment, and that means I'm going to do a LOT of sanding.  But, this should give me MOST of the table top - the end grain is showing, and I need that corrected.  So, I'm going to miter the outside pieces so that I don't have end grain, and then I will glue them on.  This is going to give me another excuse for a new tool, too - I need a hand-held router.  For some odd reason, I don't trust the other router to round over miter joints when they have yet to be glued together.


Once dried, I could then cut it square.  I lined up the carpenters' square along one edge, flipped it, and... the lines didn't line up?  What?

I am attributing it to a little warpage in the boards.  Oh, well, as long as I can cut it on a straight line, as square as possible, it should do the trick, right?

Anyway, I cut it at the other end, which was much more square.  Then, I measured back to the other end (it's the far side in the last picture above) the same distance, and used a chalk line between the two points.  While it certainly looked good, I also measured from corner to the new hypothetical-corner (diagonally) on each side, and when I got the same numbers, it was as square as possible.  So, I cut it.

The table is currently 40 3/4" x 74 1/4" .  I grabbed a #33 hand planer and knocked the edges down to even out the top, and sanded it down.



Then, I glued on some end pieces to reduce the end grain, and glued on the side panels.  Before I could glue on the end pieces, I had to run a saw along both sides - one end was 40 1/2", and the other end was 39 3/8".  Once the sides were parallel, the final side boards could be glued in place.


At this point, the boards for the table top is in place.  Since it now measures 90"x45",  I was "done" with the top surface.  However, it was starting to feel flimsy, and I needed this to be a stable table.  It was 3/4" thick.  I needed to add some support underneath, so I ripped some of the left-over boards to get a skirt around the bottom surface.  These were mitered at the corners to reduce the exposed end-grain.


Now that the outside edge of the top is now 1.75" thick, I needed to back up the inside, bottom surface.  Before I did that, I used a router and rounded over the inside edge, since I wanted the plywood to be inset from that.  The 1/4" round over meant I needed a 5/8" sheet of plywood, but all of you wood workers know that plywood doesn't come in 5/8".  (Think like "2x4's" - the closest I could get without going over was 19/32".)

I dropped the plywood in after slathering two and a half bottles of wood glue in, and let it set up.  You can see a picture of this plywood inset in the pictures below where I position the table for the first epoxy pours (in the garage - it was starting to get cold and rain).

Speaking of repositioning the table in the garage - I went to move this thing, and it was way too unwieldy. I essentially used black plastic sheets to protect carpets, floors, and the table itself, and dragged it through the house and into the garage.  I stood it up on end (because I needed to get end-grain corners first), weighed the thing, and then clamped it to the work bench to keep it vertical while the epoxy cured.  This thing weighted 112 lbs, or just over 50Kg for you metric-folks.


I used painters' tape to create a chamber around the edge for the epoxy, and then poured one end.  I let it set for a few days (the epoxy is a 72-hour-cure time), and flipped the table end-to-end, and poured the other side.  I let it cure like that again, and then moved the table back to the covered patio.  I didn't have the inside real estate to pour the top cracks - so I was forced to move back.

It was on the patio that I started the pours into the cracks and knots (any hole in the wood).  The kids swung by and wanted me to pound in the screw holes that would later be filled, so I did that while I was pouring.



This was the time-consuming task.  It was a process of fill a little epoxy in a cup with the dye, pour it into the crack, wait for an hour for it to start to set up, and repeat.  There were a lot of repeats for areas where the table top and the plywood had a gap between them, and I know I ended up filling those cavities.  That's kinda what I wanted - it should lend a stability where I might not have otherwise had it.  Sure, it likely did not need it, but I wanted it to be a solid table.

While it was curing, I needed some additional math.  Let me tell you, if you are using angled legs like this, you need to refresh your memory on trigonometry.  You are given a height, and an over-all width, and you have to calculate the angles at which the cross board meets the width you need - and that includes the angular width of the board.  I shot for about 30" wide - that will leave 7" of leg room for people to maneuver their legs around these legs.

Once I had it filled and it had time to cure, I sanded it down.  This was a LOT of sanding - to get through all of the stained wood that had extra epoxy on it.  I sanded it down far enough that I know there are some additional voids that need to be filled, but over all, this is looking phenomenal.



I'm only doing the first sanding now, because the rest will be done once the legs are attached (so I can go straight to the finish).  The copper color of epoxy dye looked good before I sanded it.  After I sanded it, I started to worry - the epoxy was looking blackish and purpleish.  It hit me later that night that this was in part due to me using purple-colored sanding pads.

Once the initial, 40-grit sanding was completed, I rounded over the corners (not the sides, just the corners), and then flipped the table so I can fill the voids on the skirt.  I wanted to use epoxy, but this has gone on for long enough that I'm changing gears and I'm going to use wood glue and saw dust as a filler.  It should set up in 1/3 of the time, and let me start sanding the bottom side.


Once the bottom side was sanded, I applied two coats of polyurethane.  It's the bottom, so I'm not worried about durability.  I used a brush (which was a mistake), so it will be a sanding down of the coat to get a smooth finish, and I'll call the bottom of the table complete.

While that was curing, I started on the legs.  The beams are 4"x3".  I planed them to dimension :


I cut them to the mathematically-determined angles, and also notched them with a skill saw (it was a better blade than my compound mitre).  I glued them up, and let the glue set :

With the legs "shaped", I could set about stabilizing the wood with epoxy fills.  I had six separate series of pours, with a "series" being a pour, and a re-pour as the epoxy settled into the cracks and left voids needing to be filled again.  Every single beam side had to be stabilized (hence, six sides) :

There's a 72-hour wait time for the epoxy to completely set up and cure.  Once complete, the sanding can commence on both the cross-braced legs, along with the bottom "foot", with routing the corners to soften it.

After SO many epoxy pours and long waits of curing, the legs were ready to be sanded.  It was at this point I realized my tendency to the machinist world - I essentially made the legs parallel in height, and then "scraped" them into uniformity with a straight edge and a pencil to identify the high spots.

I ran through this quickly, and this time, I went through all of the "not as critical" grits, from 40 to 800.  I figure that should be good enough for the legs that are going to get covered.  It was at this point I needed to drill the base feet and get a corresponding hole in the bottom of the legs.  After a few minutes of figuring out the best arrangement, it became a matter of marking holes and then drilling.  I (once again) relied on a technique there I marked the holes, drilled a short 3/16" hole into the legs, and an associated through-hole on the feet, then flipped the feet onto the legs and use some 3/16" stainless rod as an "alignment pin".  This allowed me to then sit on the legs/feet upside down (I'm fat enough, it was like a clamp), remove a pin, and drill it out with a 1/2" bit all the way into the legs for the 1/2" dowel.  I can then install the dowel, and repeat on the other leg.  This forced the dowel holes to line up, meaning this was going to fit together like a glove.





Once that was done, I could glue the surfaces and holes, and then drive the dowels into the feet (just proud of where they'd enter the legs) so I could match them up, and then hit the dowels to drive them deeper into the legs for a good, solid fit.  I used pipe clamps to really bind them together for the perfect glue up, and I switched the one set over to the regular pump clamps just to keep pressure on them so I could use the pipe clamps on the other to bind it.



The legs were then left to dry (e.g. the glue is curing).  After that, I took the time to cover the car, and protect it.

Once the legs are dry, I can drill out for the table top holes, and then spray polyurethane to finish the legs.  I'm actually going to use a 1/4" rod and my barrel trimmers for turning pens to countersink for the bolt heads.  I need a 3/4" counter bore to fit the washer and also a socket for the bolt head.

To do this, I started the holes from the table-top-side (top, drilling down) with a regular 1/4" drill bit.  I then used a long "installer" 1/4" drill bit ( it is 12" long) to finish the holes, and then, I used the barrel trimmer from the pen turning tools on the bottom (set right above the flutes on the drill).  I could have used a 1/4" steel rod for that, but I had the drill bit ready to rumble.  The other end was connected to the drill, and the drill bit could be the guide to make sure the counter bore was concentric.  I then ran the drill in reverse and pulled on it instead of pushing like normal.




I needed to measure the counter bores - so I used the square to determine the length when I had it deep enough, and then I could use a caliper to measure the distance between the barrel trimmer and the top.  Some of the positions didn't quite line up, which is fine.  It meant that a depth to cover the bolt head resulted in differing lengths of potential bolts.  I marked them out, because I need to bring the counter bore back out and get them to the same lengths so I don't need custom bolts for each spot.  (I'm thinking if someone ever moves the table, and removes those bolts, they'd either have to keep them in place, or I just make them all interchangeable.)



I ordered some bolts that are long - and that is going to be just fine.  They are not fully threaded, which is also perfect.  I will shorten the bolts to the specific length I need, and then I'll thread what is needed to fully mate with the insert.

The stretcher between the legs will be a 60" piece of galvanized steel pipe, and two flanges.  I sanded the pipe enough to get through some of the galvanization, and then put an almost covering of black paint.  Once that cured, I sanded in areas again, and put a coat of copper metallic paint on it - again, an "almost" coat.  It left silver pipe, black, and then copper - that pipe looked fairly beaten up, which is what I wanted.  I painted the flanges with the same copper metallic paint.  It's not mirror finish - in fact, it's barely shiny in any capacity.  I don't need it to be polished - I want distressed.  Anyway, I used a machinists' vee block on a jack to keep the bar level on each foot.  I did not move the jack, I moved the feet/legs just to make sure it was all kept at exactly the same height.


It was at this point that a wind rose up as a snow storm set in.  My wonderful wife helped me move the table inside and set it on the legs just to keep moisture from causing warp (or other problems).  We didn't have anywhere we could really put it, so it's sitting in the living room.  In this stage, it is the most like a table that I have seen it - the top and the legs are finally together.

This is getting really close to completion.  I attempted to knock over the table a few times to check the stability, and I don't like it.  I've grabbed a few shelf brackets to make it a bit more solid, but that means four screws into the table top (on the bottom side, mind you).  It grates on me, having 16 screws in this table (four in each flange, and then the four in the shelf brackets), but I want this to be a good, solid table.  I will install the brackets as a last step.

I needed to adjust the counterbore depths so that it didn't matter where the bolts went and to which hole.  This was done using note of the drill bit length along with the 1" space taken up by the barrel trimmer.  I'd measure from the bottom to make sure the trimmer didn't move, then measure the top, and subtract all the numbers from 12.  That would give me the precise length of the hole.  They were all made to 3.75" for consistency.  Depth varied in order to achieve that, because angles weren't quite perfect on the legs.

Then I took the table and married it to the legs/feet.

With the table fully bolted together, it was a little more stable.  Still, I'm adding the shelf brackets.  Anyway, I moved the table outside (it's 13 degrees), and sanded to 1200 grit, plus rounded the topside edges.  I wiped it down (get rid of the saw dust), and moved it back inside.  I did a damp-rag wipe down to see how it will potentially look.




It was at this time that I knew I had a problem.

Because of the cold, I could not do the finish coat outdoors.  I grabbed two heaters and carried them into the garage, and fired them up.  I also ran comparisons on heat differences in the garage vs. outdoors in order to determine if I could do the top coat there.

Outdoor vs. Indoor Temperature Comparison

How Quickly The Garage Heated, 1x Heater

It turns out that I can't.  The two heater method immediately blew the fuse.  The one heater never got it up to 50 degrees that poly likes to have fast enough to keep it there for hours. Because I couldn't do this outside or in the garage, that meant I'd have to beg for forgiveness from my wife and hand brush it.... in the living room.  Unfortunately, now I've been given the task of an absolute cleaning - ceilings to floors.  But, it turned out really nicely.

A short video of the table (with that beautiful douglass fir heartwood) :


Frankly, I want this table.  If he turns it down, I'm going to turn this into a new desk.  Last task is to deliver this, and see if I can talk him into letting me keep it.

Tuesday, December 28, 2021

Old Keyless Chuck

 I found an old, keyless chuck on eBay that I was willing to buy.  It was priced almost right (for $25, it should have at least worked).  It's a Craftsman keyless chuck from 1972, model 22562 (stamped into the back).  it's an integral shank Morse taper (MT1), and when threading on or off, the jaws didn't move.  I thought I'd better take it apart and see what the trouble was, since I'm better at taking things apart than I am at putting them back together.

Anyway, before I got it apart, I noticed that some pieces were not lined up when looking through the middle of it.  If I pulled the threaded part of the shank out, I could see light through it with a flashlight behind the chuck.  I knew it absolutely HAD to come apart.

Some chucks split between the knurled surface on the body and the cone at the top. This one splits between the knurled section and the base (right at the parting line).  I had to use some locking wrenches to get it apart.  This part took me a while to figure out, since it didn't go the same way as other chucks described out there.  Once the body came apart, the whole thing came apart fairly quickly.

It was at this time that I noticed two divots - one in the threaded rod end (between my fingers in the above photo), and one in the piece that was out of place before I got to this point (the round thing in the top-right of the picture - the tweezers are pointing to this part).  If this was turned between centers, the slopes on these two divots would be different - they were about a 120-degree cone.  It didn't take a genius to realize that I was probably missing a ball bearing.  I went out to my stash, and grabbed one that would set in place and allow the two pieces to spin freely of each other.

Then I cleaned it.  It felt really tacky to me.  A good cleaning, and then I could piece it back together.

The re-assembly went rather quickly, and now I have an old Craftsman keyless drill chuck (circa 1972), MT1, to go with my Craftsman (well, Dunlap) wood lathe (circa 1942).


Looks good, has a slight hang up on retracting a chuck jaw, but it does function.  I might need to lightly oil the chuck body (NOT the jaws) to make sure it's good, but I'm happy.

Thursday, December 2, 2021

A Barrel For Monkeys

 A buddy of mine had a job for me.  He handed me a Glock 27 (.40 S&W), and asked me to replace some parts that have worn, and also give it a face lift.  After taking it apart, I sandblasted the slide, and purchased a second slide.  I did not want to make massive changes to his gun, so it was a bit of a challenge to find a slide that didn't have awkward cuts for red-dots or other things used in competition.  With that one in hand, I also sandblasted that one in preparation for Cerakote.

The difficult part here is that the frame is a slightly-greenish form of brown.  The Cerakote colors I had on hand were black, burnt bronze, and eastern front green.  Having worked as an artist for a year, and having taken a number of art classes, I took a chance on coloring.  I used 1/2 (30ml) volume of black, 25ml of burnt bronze, and 5ml of the forest green.  Mixing it up was fast, a quick spray, and into my toaster oven to cure for a couple of hours.



The color came out nearly perfect.  I can see a very slight difference in color, but it looks like an exact match.  The colored frame and the black slide of the former version pales in comparison, really.  Anyway, I had to purchase a striker channel liner removal tool, and that also functioned as an installer.

His barrel replacement was one of the bigger issues.  That was extremely painful to locate a replacement.  I finally found a longer barrel (about 0.8875" longer) with a built-in series of vent tubes (muzzle-brake of sorts) that was destined for competition.  Considering the guy uses this for a carry gun, I had to shorten the barrel.


Yeah, it definitely needs to be shortened.

I started putting the barrel into the 4-jaw chuck, but I struggled on concentricity.  It was about the third try at it when I realized that I did not trust it.  I could not indicate on the outside - because I don't know how concentric it was to the actual inside.

Based on that, I had to build a new "setup" tool.  I grabbed a piece of stainless steel about 20" long, 9/16" diameter, and faced the end and center-drilled it (I also put a concentric end on it so I could double check diameters over the full length.  I pulled it out to where the other end was barely held by the collet, with the far end held via the live center at the tailstock.

Then I could turn a 3" length down to 0.391" (the gauge pin gave me this diameter specific for these barrels, and again, I bought two in case I hosed it up).  I put a bit of a relief cut on the end so that I didn't have a rounded area locking onto the barrel, and then, slightly away from the barrel and while still held in place by the collet, I turned a small, shallow groove that I could use as an indicator spot.  I had to do a test fit with the barrel.






The next phase was to re-install the first barrel into the 4-jaw chuck with the centering rod in place to keep it concentric.


Once centered up, I could begin the cut, face the barrel, and then put a crown on it.  Here is the gun with the cut-off barrel section, ready to be delivered!

This was my first, and likely my only barrel job.  I didn't like doing this too much, and have no need to do anything like this for myself.  But, I can convert that long shaft into a new dead center for the headstock, so it's not a total loss for me.

Sunday, September 26, 2021

Stool Sample

Crappy title. It is all accurate, it just doesn't end up where you think it does.  I know, and I'm sorry for misleading you.  I don't do click-bait very well.

Anyway, we're gathered here together today to celebrate the fact that I have a wood shop now.  While it's true that it has to be mobile because my wood work is done on the back porch, I actually have all of the tools - drill presses, band saw (with re-sawing blades), belt sander, jointer (or joiner, if you prefer), mitre saw, table saw, and a planer.

I need to build a table for family.  But, I absolutely have to know that what I have will do the job, and that requires a first quick-and-dirty project.  What do I have available to use?  Only 2x4's (the ones that are actually 1.5"x3.5") are available.  So, I thought I should turn a 2x4 into a little folding stool.

I had a small gardening stool (or chair) I'd made in wood shop back in junior high school.  The thickest piece of wood was 3/4" so I thought it would be an excellent project to make out of 2x4's.  It would require re-sawing the boards to get close to the 3/4" thickness, a table saw to trim seat slats off of boards, a jointer to properly square the boards up, and a mitre saw for the chair feet.  I grabbed it, and slapped together dimensions followed by a "cut list".

Looking at the list of stuff, I needed :

  • 3/4"x2"x15" (four of these) for legs
  • 3/4"x3"x11" (two of these) for the seat frame
  • 1/4"x1.5"x11" (7-10 of these) for seat slats
  • 3/4" dowels

I first ran the 2x4's through the table saw.  I needed two boards that were 3"x3/4"x11" (they are the sides of the actual seat).  These are the widest of the parts, and I needed two of them.

While I was at it, I ran another section of the 2x4 through the table saw at the same position to rip another strip the same thickness off that came from the piece for the 3" one.  On that board, I ripped it a second time, repeating the ripping while getting a little closer to 2" in dimensions for the chair legs.  Each of those thin strips that came off was destined to become part of the seat slats.

With the board widths close, I took the boards to the band saw and re-sawed the boards to about 7/8".  This allowed me to generate even more material that could be planed down for seat slats.  I finally had my boards close to dimensions (except for lengths on the legs).  Here are the three sections of 2x4's and what they were trimmed to.

I needed the thickness of the boards to be dead on, so next was to run them all through the planer.  I did start with the legs, slowly bringing them down to the 3/4" that I needed, and then turned my attention to the thin strips for seat slats.  They were about 3/8" thick, so it didn't take a lot of time to get them down to the right thickness.  3/8" thick would have actually been fine for slat thickness, but I shot for 1/4".

I ran them through the joiner to square them up (this isn't really necessary), but it gave me the dimensional lumber I was in need of - 2"x3/4" and 3"x3/4".

The next task is to mark out the other dimensions required (the lengths).  I sliced them off at the miter saw starting with the seat slats, and moving to the seat frame.  The legs needed a mitered cut at the bottom, so I did that, and then made sure all of the legs were the right length.

This little stool includes a curved frame.  This is because I don't know anyone with a flat butt, so the frame ought to be the same.

Next up was a little seat frame marking, and leg marking.  I need two holes in each leg (one for a pivot and one for an anchor), and two holes in the seat frame.  I marked all of the locations according to the dimensions I'd checked from the original.  I needed to put in some curves on the seat frames (because no one I know has a flat butt).  In the middle, I marked in 3/4" from one side (the top side), and then set the board onto the table saw.  Using string to get the radius (it was tied to the table saw fence), I moved the board until I could get close to the middle 3/4" mark and also the topside's corners, forming an arc.

Then I just used that to mark about every inch, and then connect the dots.  It's not a perfect curve, but it was close enough.  I'd only marked one side of the seat frame - you'll know why in a minute.

With everything marked, it was off to the drill press to punch out the legs and seat frames.  While there, I used a hole saw to make four small circles about 3/4" thick and 2" in diameter with a 3/4" bore.  These are "retainers".  I brought the parts back to the table saw, and used the jig saw to cut out the curve on the one seat frame.  

Next, I grabbed a dowel, and used that to line up the two seat frames.  Note that I had marked one hole on each of those seat frames about a 45 degree angle.  This is to be cut out, and both of these seat frames needed that cut out on the same side.  Then, I could draw the miserable attempt at a curved line onto the other seat frame so that the two frame tops can be parallel.

With the final cuts marked, I grabbed the jig saw again, and cut out both the arc on top of the other seat frame, plus notched those two holes.  I now had my entire cut list complete, and I was ready for assembly.

The air compressor was fired up, and I grabbed the brad nailer and tacked it all together.  Yes, there is no glue on this chair - don't let the picture above with the wood glue in the corner fool you.  Some joints are not tacked, and some are.  It allows anchoring at specific points and mobility at others.

And finally, compared to it's template (the one from junior high school) :


It looks like I am ready to try the next project, the table!

Saturday, September 25, 2021

Setting Up Apache for Federated Identity

I was loading my environmental data up on a web server through Grafana.  I'd been running LDAP-based authentication for years, and wanted to be able to shut that service down because I was growing weary of updating SSL certificates.  I had Grafana running on it's own TCP port inside, but I desired to expose it (while protecting the data).  I finally broke down and did it.

I started out with two "tutorials" :

Both of these were lacking in information.  For example, there are no instructions on setting up the Google API, and there was a configuration option of "OIDCCryptoPassphrase" that was a variable and no one explained what it needed to be set to.  But, I wanted to get it done.

First, I went through Google.  I'd not set up google cloud for my domain before, so this was new.  First, log in to the https://console.cloud.google.com/apis/dashboard?pli=1 (it's the cloud platform).  Once in there, if you don't have a project already, create one.  This is done using the drop down at the top :

Click on "New Project" in the upper right hand corner :

Now, you can create a credential.  Click on "Credentials" on the left, and then "Create Credential" at the top :

 

Follow the set up guide.  The type will be what you need, in my case, I was doing Apache's HTTPd server, so I went with "Web Application".  The redirect URI setting must match what you use for your OAuth configuration (in the configuration file, actually).  Make sure you have your domains listed, etc.


At this point, copy the ID as well as the client secret.  These need to go into your configuration file for Apache's HTTPd.

You might need to create an "OAuth Consent Screen", too.  Those three configurations in Google are all you need.

Load up your editor you use to change the HTTPd configuration.  The basic lines you are going to need are :

    OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
    OIDCClientID CLIENT_ID_FROM_CONFIGURATION
    OIDCClientSecret CLIENT_SECRET_FROM_CONFIGURATION

    # OIDCRedirectURI is a vanity URL, and should not point to any actual content
    OIDCRedirectURI http://hostname.example.com/grafana/redirect_uri
    OIDCCryptoPassphrase PERSONALLY_CHOSEN_PASSPHRASE
    OIDCScope "openid email profile"
    OIDCRemoteUserClaim email

    <Location /grafana/>
        TemplateEnabled off
        AuthType openid-connect
        <RequireAny>
            # not just anyone signed in from google
            # Require valid-user

            # network
            Require ip 10.0.0.

            # signed in with domain
            Require claim hd:silverhawk.net

            # or, signed in with domain (e-mail fall through)
            Require claim "email~^(.*)@silverhawk.net$"

            # or Someone External
            Require claim "email~^username@gmail.com$"
        </RequireAny>

        ProxyPass http://localhost:3000/
        ProxyPassReverse http://localhost:3000/
        Order allow,deny
        Allow from all

        # grafana requires the username to be in a header
        RewriteEngine On
        RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER},NS]
        RequestHeader set X-WEBAUTH-USER "%{PROXY_USER}e"
    </Location>

The OIDCClientID and the OIDCClientSecret configuration items are where you stuff the respective items from your OAuth configuration we copied above.  The OIDCCryptoPassphrase is where I was getting lost - this is going to be something you choose, and is specific to the cluster (e.g. so that the cluster can keep state if you hit other servers).

I used a RequireAny to set up multiple options - so, if you are on the local network and sign in to google, you'll get in.  If your primary google address is a silverhawk.net domain, you can get in.  If your e-mail address is username@gmail.com, you can get in.

The rewrite directives are there specifically for Grafana so that Grafana can see the remote_user as the e-mail of the individual who just authenticated.  In your grafana.ini, locate your root_url, and make sure we've added the URI piece we are proxying, e.g. :

    root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/

Next, locate your "[users]" section, and set the following :

    allow_sign_up = false
    auto_assign_org = true

Next, locate the auth.proxy in your Grafana configuration.  Since we are rolling through HTTPd and it will be doing the authentication, we can let Grafana accept whatever HTTPd feeds to us.

    [auth.proxy]
    enabled = true
    header_name = X-WEBAUTH-USER
    header_property = username
    auto_sign_up = true

The header name should match what was in our rewrite rule, and the header property is the username that is going to get set up.  auto_sign_up needs to be set to true so that we can create accounts on the fly.

Now, restart any processes and give it a test!

Thursday, September 9, 2021

Spotting a Scam

 I received an e-mail (actually, the second one to a different address triggered this, but I'm hitting the first one).  Obviously, it's a scam.  Let's take a look :

First, an e-mail address takes the form of username@domain.  In this one, the "From" address doesn't match who they are pretending to be (they have pconfermations@gmail.com with a name of "Produts Confermations").  The @ portion (the domain) is "gmail.com".  No self-respecting business will send from a domain that is not owned by the business.  That would mean that McAfee e-mails would come from @mcafee.com, not @gmail.com .  The username doesn't even spell things right.  We know from the start that this isn't from McAfee, and whomever it is can't spell to save their life.

Second, the "subject" of the e-mail has awkward characters in it.  Beware of crap that has emoji's or other things in them - they are definitely unofficial.  Underscores in a subject are nearly unheard of with real businesses.

Next, into the body of the message, we find mis-spellings and bad grammar throughout.  More underscores in "Dear-Values-Customer"?  Yes, please.  "Antivirues"?  Okay, enough on that.  Let's just check and see if we can find the origin.  Open the message source (this will depend on your mail client, you might need to open a browser window and search the Internet for "view email source" and the name of your client to find out how).

At the top of an e-mail source are what can be referred to as "headers".  There will be no empty lines in this area.  These headers are keys and values, separated by a colon, the key on the left.  When an e-mail is received by a server, that server is supposed to tack onto the leading front any source information such as "Received".  This means that if we find each of the "Received" headers as we scroll down, we are actually taking a look at the messages history and going back in time.  We want to know the origin, so lets scroll to the bottom of the headers, and then work our way back to the top.

You'll see all of the "Subject:" and "Bcc:" headers - these are what your mail client displays when you open a message.  Shortly above this is our first "Received:" header.

Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41])
        by mx.google.com with SMTPS id j5sor2873717lfe.26.2021.08.29.18.18.32
        for <email@gmail.com>
        (Google Transport Security);
        Sun, 29 Aug 2021 18:18:33 -0700 (PDT)

What I am interested in is anything that is four numbers separated by dots (no spaces, and not more than four numbers).  Here, that is "209.85.220.41", and it's called an IP Address.

When you are doing this, if the IP addresses start with 192.168., or 172.16., or 10.0, or 127., these are called "private networks" - though they can give us an idea of what the networks are built like, they won't help us, so if your first Received: header contains an address like that, simply move to the next one.

In our case, the IP address is not an internal, or private network.  So, open your web browser and do an Internet search for that.  (If you have Linux, you can also simply run a "whois 209.85.220.41" and get results).

Well, that sucks.  That address is a giggle address (spelling is intentional).  It's one of the gmail.com addresses.  I know, we could have looked at the domain name for it in the "Received" header, but I wanted to go through the exercise.  Google USED to show the source for the e-mail, even if it was done via gmail.com's website and not an e-mail client.  Just for kicks and giggles, scan all of them.

So, what CAN we do?  Actually, not much with this one.  Let's look at the second one.

Bugger.  It's also from a gmail account.  Still, the spelling of the name is atrocious, the spelling and use of symbols and underscores in the subject is a fast red-flag to know this is not official.  In the body, we have the usual grammar errors, and capitalization issues that alert us that the sender is not a standard english speaker.  Remember, a big business will have additional people proof-reading their e-mails and templates.

Then, there is the killer.  They couldn't even spell the company name right that they were trying too poof.  They had "MAcfee" instead of "McAfee".  Unfortunately, this one also had a gmail IP address :

Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65])
        by mx.google.com with SMTPS id h7sor653174ljc.46.2021.09.09.03.18.39
        for <email@gmail.com>
        (Google Transport Security);
        Thu, 09 Sep 2021 03:18:39 -0700 (PDT)

So, like the detectives when all of the toilets were stolen from Scotland Yard, we have nothing to go on.

Still, on a positive note, they left two phone numbers.

1  (747) 600-1278 
+1 640-900-2247

If you Internet-search those numbers, you'll see that they have a scam reputation.  Still, I am tempted to call them just to see.