<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title><![CDATA[ Tony Wallace Woodworks ]]></title>
<description><![CDATA[ I write about woodworking and guitarmaking. ]]></description>
<link>https://tonywallace.com</link>
<image>
    <url>https://tonywallace.com/favicon.png</url>
    <title>Tony Wallace Woodworks</title>
    <link>https://tonywallace.com</link>
</image>
<lastBuildDate>Thu, 27 Aug 2026 14:01:17 +0000</lastBuildDate>
<atom:link href="https://tonywallace.com" rel="self" type="application/rss+xml"/>
<ttl>60</ttl>

    <item>
        <title><![CDATA[ My Favourite Drill Press Mods ]]></title>
        <description><![CDATA[ The best quality-of-life upgrades I&#39;ve made to my old Rockwell/Beaver radial drill press. ]]></description>
        <link>https://tonywallace.com/my-favourite-drill-press-mods/</link>
        <guid isPermaLink="false">6a8f1cd9c363af0001c2c8fb</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Wed, 26 Aug 2026 21:38:25 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>My old Rockwell/Beaver radial drill press is one of the most important tools in my shop. I specifically chose an older model for mechanical simplicity and build quality, but that also means my drill press lacks some modern conveniences. These are the little upgrades I've made to improve my quality of life.</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">Radial drill presses are less common than the conventional fixed-head type, and offer the advantage of being able to adjust the "swing," which refers to the diameter of the circle that would be made by spinning the head around the column. My drill press has a maximum swing of 32" while most fixed-head drill presses have a swing of 16" or less. The drill press' usable reach – the distance from the column to the quill – is half the swing. That means my drill press can drill a hole approximately 16" in from the edge of a workpiece, or in the center of a piece that's 32" wide. That's ample reach for just about any situation and in real life, I usually set the head to be roughly 8-10" from the column to minimize deflection.</div></div><p></p><h2 id="table-of-contents">Table of Contents</h2><ul><li><a href="https://tonywallace.com/my-favourite-drill-press-mods/#better-height-adjustment" rel="noreferrer">Better Height Adjustment</a></li><li><a href="https://tonywallace.com/my-favourite-drill-press-mods/#an-auxiliary-table" rel="noreferrer">An Auxiliary Table</a></li><li><a href="https://tonywallace.com/my-favourite-drill-press-mods/#a-less-annoying-depth-stop" rel="noreferrer">A Less Annoying Depth Stop</a></li><li><a href="https://tonywallace.com/my-favourite-drill-press-mods/#a-light" rel="noreferrer">A Light</a></li><li><a href="https://tonywallace.com/my-favourite-drill-press-mods/#the-upgrade-that-wasnt-worth-it" rel="noreferrer">The Upgrade That Wasn't Worth It</a></li></ul>
<!--kg-card-begin: html-->
<h2 id="better-height-adjustment">Better Height Adjustment</h2>
<!--kg-card-end: html-->
<p>The most painful (literally) missing feature on my drill press was a way to adjust the table height without throwing my back out. Modern drill presses usually have a rack and pinion mechanism for height adjustment, but it's often kind of flimsy and you just know that fixing it will be a nightmare. I'd rather avoid that situation altogether, but that doesn't change the fact that the steel table is <em>heavy</em> and manually lifting or lowering it to a precise position is difficult.</p><p>I have a set of <a href="https://vikingarm.com/?ref=tonywallace.com" rel="noreferrer">Viking Arm</a> installation jacks that I only need occasionally, and never at the same time as my drill press. They provide a perfect solution to this problem. A full pull of the hand lever will raise the table as much as a quarter of an inch, but shorter pulls will move it as little as a millimetre. (Yes, I'm mixing measurement systems. I'm Canadian and that's how we work.) The incremental release trigger lowers the table about a millimetre at a time. You can also use the full release trigger to drop the table faster, but make sure you have a firm hand on the table when you do. </p><p>This setup offers a nice balance between speed and precision. I've been using it for over a year with no complaints. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-lift.webp" class="kg-image" alt="A Viking Arm cabinet installation jack being used as a height adjustment mechanism for a drill press." loading="lazy" width="2000" height="2697" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-mods-lift.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-mods-lift.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/08/drill-press-mods-lift.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-lift.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A Viking Arm cabinet installation jack makes a great height adjustment mechanism for a drill press.</span></figcaption></figure><h3 id="what-youll-need">What you'll need:</h3><ul><li>One Viking Arm or a similar cabinet installation jack. You'll need one that has a mounting hole in its base plate. A quick survey of cheaper alternatives tells me that many of them lack this feature.</li><li>A small piece of 3/4" plywood. You only need enough to cover your drill press' base so this is a good way to make use of scrap from another project.</li><li>A 1/4-20 threaded insert</li><li>A 1/4-20 machine screw no longer than 3/4". A machine screw with a star knob will make it easier to install and remove the Viking Arm. It's nice to have but isn't that important. </li><li>Bolts, nuts and washers to mount the plywood to your drill press' base. Every drill press is different so buy whatever size and quantity you need.</li><li>An appropriate bit to drill the hole for the 1/4-20 threaded insert. This is usually 13/32" or 7/16" (10mm or 10.5mm) but test in a piece of scrap first.</li></ul><h3 id="installation-steps">Installation steps:</h3><ol><li>Cut a piece of plywood a few inches longer and wider than your drill press' base. This will serve as a mount for the Viking Arm.</li><li>Measure and cut a notch in one end of the piece of plywood to clear your drill press' column. The cleanest way to do this is to use a hole saw to cut a hole somewhat larger than the diameter of the column, aligned to the center of the column. For example, if the column has a diameter of 2 inches and is centered 4 inches from the rear of the base, you would use a 2-1/2 inch or larger hole saw and center the hole 5 or 6 inches in from the rear edge of the plywood. The extra inch or two allows some overhang to help support the Viking Arm. (You can figure out roughly how much overhang you'll need by positioning the Viking Arm as described in step 5 and measuring how much of it hangs off the rear of the base, before you cut the notch. When in doubt, you won't regret leaving a little extra.) Next, use a table saw, bandsaw or jigsaw to cut two slots from the rear edge of the plywood to either side of the hole, creating a U-shaped notch. If you don't have a hole saw, you can cut the whole notch with a jigsaw or a bandsaw with a narrow blade.</li><li>Clamp the plywood to the top of the base with the column centered in the notch.</li><li>Figure out where you'll need to drill holes in the plywood to mount it to the base. Mark the positions of those holes.</li><li>Position the Viking Arm on the plywood so the lift bars hook under the table. If you have installed an auxiliary table, make sure the bars make contact with the main table to get the most leverage possible. </li><li>Mark the center of the mounting hole in the Viking Arm's base plate on the plywood.</li><li>Remove the Viking Arm and plywood from the base<em>.</em></li><li>Drill the mounting holes you marked in step 4 and confirm that they line up correctly with the holes or slots in the base.</li><li>Drill a hole in the plywood for the 1/4-20 threaded insert at the mark you made in step 6, and install the threaded insert.</li><li>Reposition the plywood on the base and bolt it in place.</li><li>Use the 1/4-20 machine screw to fasten the Viking Arm to the plywood.</li><li>Make sure the Viking Arm is in the correct position and the lift bars make contact with the table.</li><li>Unlock the table.</li><li>Use the Viking Arm to adjust the table height.</li><li>Lock the table to relieve the Viking Arm from stress.</li></ol>
<!--kg-card-begin: html-->
<h2 id="an-auxiliary-table">An Auxiliary Table</h2>
<!--kg-card-end: html-->
<p>The tables on most drill presses are typically small, and it can be difficult to place clamps and hold-downs where you need them. This is easy to solve by mounting an auxiliary plywood table to the main table. </p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-table.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-mods-table.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-mods-table.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/08/drill-press-mods-table.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-table.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p>My table is approximately 21" wide and 16" deep, and is routed with dovetail channels for Microjig Matchfit clamps. The fence also leverages the dovetail clamping system. Whether you use this system or traditional T-track, be careful about where you place the channels. You don't want your clamps to interfere with the drill press lever. I also suggest including at least one channel that runs the width of the table. I didn't, but there have been several times when it would have been useful and I plan to add one or two.</p>
<!--kg-card-begin: html-->
<h2 id="a-less-annoying-depth-stop">A Less Annoying Depth Stop</h2>
<!--kg-card-end: html-->
<p>My drill press uses a jam nut as a depth stop, which is very trustworthy but also very annoying to unlock, move and re-lock. <a href="https://www.finewoodworking.com/project-guides/shop-machines/cushioned-depth-stop-for-drill-press?ref=tonywallace.com" rel="noreferrer">This tip from Fine Woodworking</a> goes a long way towards fixing that. The author used a short piece of vinyl tubing as a sort of lock washer between the nuts to allow the depth stop to be operated without tools. I found that a rubber o-ring from the plumbing aisle worked, too.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-depth-stop.webp" class="kg-image" alt="A drill press depth stop with a rubber o-ring between the nuts to act as a lock washer." loading="lazy" width="1350" height="1350" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-mods-depth-stop.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-mods-depth-stop.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-depth-stop.webp 1350w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A rubber o-ring keeps the depth stop from moving while allowing it to be adjusted without tools.</span></figcaption></figure>
<!--kg-card-begin: html-->
<h2 id="a-light">A Light</h2>
<!--kg-card-end: html-->
<p>I have a lot of ambient light in my shop but it's always helpful to be able to point it exactly where you need it. An inexpensive Ikea gooseneck light with a clip-on mount does the job for me. (As a bonus, the purple and green colour scheme was on clearance, and I feel that it adds a weird sort of charm.)</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-light.webp" class="kg-image" alt="A gooseneck lamp clipped to a drill press." loading="lazy" width="2000" height="2667" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-mods-light.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-mods-light.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/08/drill-press-mods-light.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mods-light.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A light.</span></figcaption></figure>
<!--kg-card-begin: html-->
<h2 id="the-upgrade-that-wasnt-worth-it">The Upgrade That Wasn't Worth It</h2>
<!--kg-card-end: html-->
<p>If you look closely in a few of the photos above, you'll see that I also installed a laser guide on my drill press. This took some figuring out because the guide was designed to clamp to the column with the assumption that the distance between the column and quill is fixed. That isn't true of a radial drill press, so I had to make a special mount to clamp the guide to the head. It was an interesting problem to solve at the time and my solution worked fairly well. The problem is that I don't really trust it. I can never be certain that I haven't knocked the mount slightly out of alignment and the only way to know for sure is to test it, which costs time. A fence or clamp placed exactly where I need it may block the laser, rendering it useless. Even when everything is set up perfectly, a reflection of the laser off of a pencil line can create a blurring effect that undermines its precision. The laser sight seemed like a good idea at the time, but <a href="https://tonywallace.com/improving-accuracy-at-the-drill-press/" rel="noreferrer">the real solution was to work on my technique</a>.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ T-Style Guitar Builds One and Two ]]></title>
        <description><![CDATA[ I built these two T-style guitars last year but didn’t really consider them to be finished because I used aftermarket necks as placeholders until I could build my own. Well, now they’re finished. ]]></description>
        <link>https://tonywallace.com/t-style-guitar-builds-one-and-two/</link>
        <guid isPermaLink="false">6a86118a4766f70001e8c402</guid>
        <category><![CDATA[ Guitarmaking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Wed, 19 Aug 2026 20:57:12 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/t-style-builds-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I built these two T-style guitars last year but didn’t really consider them to be finished because I used aftermarket necks as placeholders until I could build my own. Well, now they’re finished.<br><br>Over the last week I’ve upgraded both guitars with necks of my own construction and given them full setups. Here are the specs:</p><h2 id="build-one-green">Build One (Green)</h2><p><br><strong>Body:</strong> Swamp ash<br><strong>Finish</strong>:&nbsp;Lee Valley aniline dye in forest green, Osmo&nbsp;Polyx (satin) and Walrus Oil&nbsp;furniture wax.<br><strong>Pickguard:</strong> Curly maple finished with Osmo Polyx (satin)<br><strong>Neck:</strong> Riftsawn walnut with a quartersawn white oak fretboard and walnut face markers, finished with Osmo Polyx. The fretboard is pore-filled with CA glue for a hard finish, similar to a lacquered maple fretboard.<br><strong>Pickups:</strong> Fender American Vintage ‘52 Telecaster<br><strong>Bridge:</strong> Wilkinson by Gotoh WT3<br><strong>Tuners:</strong>&nbsp;Gotoh SD381-MG-T 6-in-line locking<br><strong>Fretboard radius: </strong>16”<br><strong>Weight:</strong> 7lbs, 9oz.</p><h2 id="build-two-blue">Build Two (Blue)</h2><p><br><strong>Body:</strong> Maple<br><strong>Finish:</strong> Lee Valley aniline dye in peacock blue, Osmo&nbsp;Polyx (satin) and Walrus Oil&nbsp;furniture wax.<br><strong>Neck:</strong> Riftsawn mahogany with a canarywood fretboard and padauk face markers, finished with Osmo Polyx.<br><strong>Pickups:</strong>&nbsp;StewMac&nbsp;“The Standard Telecaster”<br><strong>Bridge:</strong> Gotoh GTC201<br><strong>Tuners:</strong>&nbsp;Gotoh SD381-MG-T 6-in-line locking<br><strong>Fretboard radius: </strong>16”<br><strong>Weight:</strong> 9lbs, 6oz.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ How to Intonate the Wilkinson by Gotoh WT3 Bridge ]]></title>
        <description><![CDATA[ A short guide to adjusting the intonation on this vintage-style Telecaster bridge. ]]></description>
        <link>https://tonywallace.com/how-to-intonate-the-wilkinson-by-gotoh-wt3-bridge/</link>
        <guid isPermaLink="false">6a84bc7de1af9900010f1cfd</guid>
        <category><![CDATA[ Guitarmaking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 18 Aug 2026 20:26:06 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/gotoh-wt3-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>The Wilkinson by Gotoh WT3 is a vintage-style 3-saddle Telecaster bridge. Unlike a traditional 3-saddle bridge, the WT3's saddles pivot so you can adjust the intonation of each string separately. Each saddle supports two strings, so you have to find the precise angle and position that results in both strings having the correct intonation. It's a process of trial and error that requires some patience. Here's how to do it.</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-text">I'm writing with the assumption that you're already familiar with the concept of intonation and how to adjust it on a typical electric guitar. If not, <a href="https://www.stewmac.com/video-and-ideas/tool-demo-videos/how-to-intonate-a-guitar/?ref=tonywallace.com" target="_blank" rel="noopener nofollow">StewMac has a good primer on the subject</a>.)</div></div><p></p><p>You'll need:<br>- An accurate tuner<br>- A 2mm hex key for the pivot screws<br>- A Phillips head screwdriver for the position screws</p><p>Start by making sure the guitar is set up and tuned. Intonation is normally the last step in a setup so your string height and neck adjustments should already be done and the guitar should play well, if not perfectly in tune.</p><p>Repeat the following steps for each saddle:</p><ol><li>Check that both strings are in tune. Adjust if necessary.</li><li>Check the intonation of both strings at the 12th fret. Don't worry about adjusting them yet. Just take note of how flat or sharp each string is.</li><li>Loosen the pivot screw (the hex screw in the middle of the saddle, between the height adjustment screws) and adjust the angle of the saddle until both strings are flat or sharp by the same amount. <em>You aren't looking for perfect intonation yet. You're looking for the correct relationship between the lengths of the two strings.</em> You'll need to detune the strings to reduce tension enough that you can move the saddle, then tighten the pivot screw and retune to re-check the intonation. This will take a few tries.</li><li>When both strings are flat/sharp by the same amount, adjust the position screw (the Phillips screw on the rear edge of the bridge) to bring them into correct intonation. Keep retuning and checking the intonation of both strings after each small adjustment. You may find that you have to repeat step 3 to really dial it in.</li></ol><p>This isn't the easiest bridge to adjust but it's a lot better than having to compromise on intonation. The Wilkinson by Gotoh WT3 is a good option if you want a vintage look for a new build or an appropriate upgrade for a Telecaster that was built with a traditional 3-saddle bridge.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Improving Accuracy at the Drill Press ]]></title>
        <description><![CDATA[ Controlling your approach is key to accuracy with a drill press. ]]></description>
        <link>https://tonywallace.com/improving-accuracy-at-the-drill-press/</link>
        <guid isPermaLink="false">6a732de2afb11d00014edc11</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Fri, 07 Aug 2026 13:00:17 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>Drilling accurately placed holes can be difficult, even with a drill press. Fences and clamps can help but they add setup time and still can't guarantee accuracy. Set those aside and improve your results by practicing this simple technique. </p><h2 id="before-you-begin">Before You Begin</h2><p>You'll need:</p><ul><li>A drill press.</li><li>High-quality brad point drill bits. A poorly milled or dull bit won't be accurate, so avoid buying the cheapest of the cheap.</li><li>A pencil, ruler and fine-tipped awl for marking.</li></ul><p>Install the bit in the drill press. Tighten the chuck by hand first, then with the chuck key using all three keyholes to apply even pressure around the bit. Doing so will reduce runout, which is the drill's tendency to wobble off-center as it spins.</p><h2 id="mark-the-center-point">Mark the Center Point</h2><p>A drill will always follow the path of least resistance. If you try to start a hole at an arbitrary point on a piece of wood, there's a good chance the drill will find an easier entry point nearby and start there instead. This is true of all drills and all types of wood, and using a drill press with a brad point bit doesn't automatically solve the problem. You need to help the drill find the correct position.</p><p>Start by marking the position of each hole by drawing a cross with a pencil and ruler. If you're marking for a row, column or grid of holes, like I do for my <a href="https://tonywallace.com/reusable-bag-drying-racks/" rel="noreferrer">reusable bag drying racks</a>, draw full-length intersecting lines across the whole workpiece. Don't try to measure and mark each hole separately – you won't be consistently accurate. Drawing the full grid will help you spot mistakes before you drill.</p><p>Once you've made your pencil marks, carefully make a small indentation at each cross or intersection with a sharp awl. These should be no larger than the brad point on your bit. If you make them too large, they will swallow the brad point rather than guiding it, and the bit will be able to skate away from your marks.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mark.webp" class="kg-image" alt="An image showing the center point for a hole marked with a cross drawn with a pencil and indented with an awl." loading="lazy" width="1500" height="1500" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-mark.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-mark.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-mark.webp 1500w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Mark the center point with a pencil and indent it with an awl.</span></figcaption></figure><h2 id="control-your-approach">Control Your Approach</h2><p>The key to this technique is to approach your mark <em>slowly</em>. Lower the drill until the brad point is just hovering over the workpiece. Align the point with the mark by eye, then lower the drill again, slowly and carefully, just enough to insert the point into the indentation without letting the spurs touch the workpiece. Keep a steady hand on the workpiece but don't try to force it to stay where you think it should be. <em>Let the brad point and the indentation negotiate the precise position of the workpiece for you. </em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-approach.webp" class="kg-image" alt="An image showing a brad point drill making contact with an indentation in a piece of wood." loading="lazy" width="1500" height="1500" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-approach.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-approach.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-approach.webp 1500w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Approach slowly, and let the brad point and the indentation negotiate the precise position of the workpiece. </span></figcaption></figure><h2 id="plunge-the-drill">Plunge the Drill</h2><p>You've found the center when you can see and feel that the indentation has captured the brad point. Slowly plunge the drill while maintaining a firm grasp of the workpiece. Allow the spurs to score the workpiece cleanly, then plunge deeper. If you're drilling a deep hole, back off as necessary to allow the flutes to eject waste. Hold the workpiece down when you retract the drill to prevent it from grabbing and lifting, which can distort the hole.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-plunge.webp" class="kg-image" alt="An image showing a drill plunging into a piece of wood." loading="lazy" width="1500" height="1500" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-plunge.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-plunge.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-plunge.webp 1500w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Plunge slowly and allow the spurs to score the workpiece cleanly.</span></figcaption></figure><h2 id="look-ma-no-guides">Look Ma, No Guides!</h2><p>With a little practice, you should be able to improve your technique to the point where you won't need a fence or other mechanical guides for most of your drilling. This will save you a lot of setup time and help you be more efficient in the workshop.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-result.webp" class="kg-image" alt="An image showing a precisely centred hole drilled in a piece of wood." loading="lazy" width="1500" height="1500" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/08/drill-press-result.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/08/drill-press-result.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/drill-press-result.webp 1500w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A precisely centered hole. (Actual diameter: 1/4" or approximately 6mm)</span></figcaption></figure><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reusable Bag Drying Racks ]]></title>
        <description><![CDATA[ Drying racks for reusable bags and Swedish dish cloths, now available in my online store. ]]></description>
        <link>https://tonywallace.com/reusable-bag-drying-racks/</link>
        <guid isPermaLink="false">6a7320a5afb11d00014edbc4</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Wed, 05 Aug 2026 13:00:55 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/08/reusable-bag-drying-racks-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>We started using reusable, resealable bags a few years ago, and also try to reuse disposable bags as much as we can. The trouble with these bags is that they're annoying to dry after washing. You have to find some way to hold them open so they can air out. I made a drying rack for reusable bags to solve this problem. After using it for a few years, we've also found that it works well to dry reusable Swedish dish cloths. </p><p>I've made a batch of these racks for my <a href="https://tonywallacewoodworks.square.site/shop/reusable-bag-drying-racks/MASK77RST3NU3C7BT5NV4FSL?ref=tonywallace.com" rel="noreferrer">online store</a>. They're available in two sizes. The <a href="https://tonywallacewoodworks.square.site/product/reusable-bag-drying-rack-small/TGAPLFLLMBJKIWQMGDI4HQZ5?ref=tonywallace.com" rel="noreferrer">smaller rack</a> is good for small and medium size bags, and for Swedish dish cloths. The <a href="https://tonywallacewoodworks.square.site/product/reusable-bag-drying-rack-large/CRTFJ2FPIZ5FFN37QIPIHRBA?ref=tonywallace.com" rel="noreferrer">larger rack</a> will do everything the smaller one does and handle larger bags up to 30cm (12") deep. </p><div class="kg-card kg-button-card kg-align-center"><a href="https://tonywallacewoodworks.square.site/shop/reusable-bag-drying-racks/MASK77RST3NU3C7BT5NV4FSL?ref=tonywallace.com" class="kg-btn kg-btn-accent">Shop Reusable Bag Drying Racks</a></div><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reclaimed Wood: July 2026 ]]></title>
        <description><![CDATA[ A recap of my Instagram posts for March 2026. ]]></description>
        <link>https://tonywallace.com/reclaimed-wood-june-2026-2/</link>
        <guid isPermaLink="false">6a6df1ab78000d000133d39a</guid>
        <category><![CDATA[ Instagram ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sat, 01 Aug 2026 13:34:05 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>This is the latest in a series of monthly Instagram recaps for <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">@tonywallacewoodworks</a>. You can see the previous recap from June <a href="https://tonywallace.com/reclaimed-wood-june-2026/" rel="noreferrer">here</a>. </p><p>The <a href="https://tonywallacewoodworks.square.site/product/tea-light-tray-07-2026/IIPNACBOSI7DHU25KYTGGPOG?cs=true&cst=custom&ref=tonywallace.com" rel="noreferrer">tealight tray</a> and <a href="https://tonywallacewoodworks.square.site/product/bud-vase-and-organizer-07-2026/4QWF7NBTQSRNKD2GWOS5B22Z?cs=true&cst=custom&ref=tonywallace.com" rel="noreferrer">bud vase/organizer</a> shown below are currently available in my new <a href="https://tonywallacewoodworks.square.site/?ref=tonywallace.com" rel="noreferrer">online store</a>.</p>
<!--kg-card-begin: html-->
<ul class="ic-instagram-embed">
  <li><a href="https://www.instagram.com/p/DaWGKCJy3NO?ref=tonywallace.com" target="_blank">Tealight Tray</a></li>
  <li><a href="https://www.instagram.com/p/DaWGgQrS4nU?ref=tonywallace.com" target="_blank">Bud Vase/Organizer</a></li>
  <li><a href="https://www.instagram.com/p/DagnaWmjpGC?ref=tonywallace.com" target="_blank">Neck carving &mdash; the best part of the guitarmaking process</a></li>
  <li><a href="https://www.instagram.com/p/DajKLllDl6X?ref=tonywallace.com" target="_blank">Repairing small dents with steam</a></li>
  <li><a href="https://www.instagram.com/reel/Dan_m2TJxjv?ref=tonywallace.com" target="_blank">Thinning a guitar headstock</a></li>
  <li><a href="https://www.instagram.com/p/DbHI8QhESbp?ref=tonywallace.com" target="_blank">A Firebird-esque top profile on a new guitar body prototype</a></li>
  <li><a href="https://www.instagram.com/p/DbJhP5uiQQN?ref=tonywallace.com" target="_blank">Progress on a new guitar body prototype</a></li>
  <li><a href="https://www.instagram.com/p/DbY_10miefR?ref=tonywallace.com" target="_blank">Arm carve on a new guitar body prototype</a></li>
  <li><a href="https://www.instagram.com/p/DbZByvWCaVB?ref=tonywallace.com" target="_blank">Belly carve on a new guitar body prototype</a></li>
</ul>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ The Tony Wallace Woodworks Online Store ]]></title>
        <description><![CDATA[ Announcing my new online store. ]]></description>
        <link>https://tonywallace.com/the-tony-wallace-woodworks-online-store/</link>
        <guid isPermaLink="false">6a68e86ea09c7a00014a3805</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 28 Jul 2026 18:00:04 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>I just launched an online store to sell some of my smaller pieces. You can have a look <a href="https://tonywallacewoodworks.square.site/?ref=tonywallace.com" rel="noreferrer">here</a>. Shipping for online orders is only available in Canada for the time being. If you would like to place an order from outside Canada, <a href="mailto:shop@tonywallace.com" rel="noreferrer">contact me</a> and we'll figure it out.</p><div class="kg-card kg-button-card kg-align-center"><a href="https://tonywallacewoodworks.square.site/?ref=tonywallace.com" class="kg-btn kg-btn-accent">Visit the store</a></div><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Project Archive: Side Panels for Vintage HiFi Equipment ]]></title>
        <description><![CDATA[ Replacement side panels for a vintage Sony tuner. ]]></description>
        <link>https://tonywallace.com/project-archive-side-panels-for-vintage-hifi-equipment/</link>
        <guid isPermaLink="false">6a4679a0389ef00001b05250</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Fri, 03 Jul 2026 13:00:27 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/07/sony-tuner-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I wrote in March about a set of <a href="https://tonywallace.com/project-archive-floor-speaker-stands/" rel="noreferrer">walnut floor speaker stands</a> I made for a customer. He recently asked me to replace the worn out side panels on his 1978 Sony ST-A3A AM/FM tuner with solid walnut to match the stands. He found the tuner at a thrift store and the edge veneers had peeled off the original particleboard side panels. This was a simple and fun project – rectangular panels with carefully positioned and counterbored mounting holes, and a little rabbet routed into the front edge to accommodate the control panel. Honestly, the hardest part was trying to find decent quality walnut that was milled from a mature tree and wasn't half sapwood*. (That didn't work out very well so I had to be very careful about how I used the wood I had. On the plus side, I got a <a href="https://www.instagram.com/p/DZvNZl4RJGL?ref=tonywallace.com" rel="noreferrer">pretty cool bookmatched panel</a> out of the remainder.) </p><p>I was careful to match all dimensions to the originals so the panels would be as close to a perfect reproduction as possible. The mounting holes and counterbores seem unnecessarily large at first, but the original manufacturing tolerances were probably a bit loose and 48 years of handling certainly hasn't helped. Larger holes allow a bit of play to better align the side panels to the control panel.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/07/sony-tuner-counterbore.webp" class="kg-image" alt="An image showing the large counterbores in the side panels." loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/07/sony-tuner-counterbore.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/07/sony-tuner-counterbore.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/07/sony-tuner-counterbore.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/07/sony-tuner-counterbore.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A test fit before finishing demonstrates the need for large counterbores in the side panels.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/07/sony-tuner-alignment.webp" class="kg-image" alt="An image showing the alignment of the side panel to the control panel." loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/07/sony-tuner-alignment.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/07/sony-tuner-alignment.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/07/sony-tuner-alignment.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/07/sony-tuner-alignment.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Alignment of the side panel to the control panel. For scale, the control panel is about 3mm (1/8") thick. </span></figcaption></figure><p>The Instagram reel shows how much this simple upgrade improved the tuner's appearance:</p>
<!--kg-card-begin: html-->
<figure class="ic-figure-centered">
  <blockquote class="instagram-media" data-instgrm-permalink="https://www.instagram.com/reel/DZxLDuPOPPV/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/reel/DZxLDuPOPPV/?utm_source=ig_embed&utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/reel/DZxLDuPOPPV/?utm_source=ig_embed&utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Tony Wallace Woodworks (@tonywallacewoodworks)</a></p></div></blockquote>
<script async src="//www.instagram.com/embed.js"></script>
</figure>
<!--kg-card-end: html-->

<!--kg-card-begin: html-->
<small>*This is becoming a real problem. It seems like we need walnut to lose popularity for a while so stocks can recover, but it's hard to say no to a species that looks so good and is so easy to work.</small>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reclaimed Wood: June 2026 ]]></title>
        <description><![CDATA[ A recap of my Instagram posts for March 2026. ]]></description>
        <link>https://tonywallace.com/reclaimed-wood-june-2026/</link>
        <guid isPermaLink="false">6a46740e389ef00001b051e7</guid>
        <category><![CDATA[ Instagram ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 02 Jul 2026 14:40:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>This is the latest in a series of monthly Instagram recaps for <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">@tonywallacewoodworks</a>. You can see the previous recap from March <a href="https://tonywallace.com/reclaimed-wood-march-2026/" rel="noreferrer">here</a>. (I didn't post while I was at <a href="https://tonywallace.com/blackwood-guitar-company-spring-2026/" rel="noreferrer">Blackwood Guitar Company</a> in April, and I just didn't get back to it for a while afterwards.)</p>
<!--kg-card-begin: html-->
<ul class="ic-instagram-embed">
  <li><a href="https://www.instagram.com/p/DZbAHOSDkBy?ref=tonywallace.com" target="_blank">New purpleheart bud vases for sale at J2 Gallery in Gananoque</a></li>
  <li><a href="https://www.instagram.com/p/DZbCQ_JjkSF?ref=tonywallace.com" target="_blank">Trying out a planar arm carve and lower horn slope on a guitar body prototype</a></li>
  <li><a href="https://www.instagram.com/p/DZnsudmpHiT?ref=tonywallace.com" target="_blank">Fun geological finds in the table saw after cutting acrylic</a></li>
  <li><a href="https://www.instagram.com/p/DZu8aPYuobF?ref=tonywallace.com" target="_blank">Headstock veneer sandwiches</a></li>
  <li><a href="https://www.instagram.com/p/DZvNZl4RJGL?ref=tonywallace.com" target="_blank">A mildly suggestive bookmatched walnut panel</a></li>
  <li><a href="https://www.instagram.com/reel/DZxLDuPOPPV?ref=tonywallace.com" target="_blank">Solid walnut side panel upgrade for a 1978 Sony AM/FM tuner</a></li>
  <li><a href="https://www.instagram.com/p/DZ_DtzHjioe?ref=tonywallace.com" target="_blank">Partial depth fretboard binding</a></li>
</ul>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Blackwood Guitar Company, Spring 2026 ]]></title>
        <description><![CDATA[ What to expect from the five week acoustic guitar building course at Blackwood Guitar Company. ]]></description>
        <link>https://tonywallace.com/blackwood-guitar-company-spring-2026/</link>
        <guid isPermaLink="false">69f89f3b9f74ed000138d508</guid>
        <category><![CDATA[ Guitarmaking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 04 May 2026 17:45:57 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/05/blackwood-guitar-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I've been thinking about taking an acoustic guitar building course on and off for about thirty years now. The blocker has been time –  most serious courses are at least five weeks long and are effectively full time jobs with overtime. Tuition is also typically $5000+ CAD, which is very reasonable when you consider the course duration and the instructor's investment in  the school, but is nevertheless a significant chunk of change.  I was able to take the time because I stopped working full time in software development towards the end of last year, for <a href="https://ky.fyi/posts/ai-burnout?ref=tonywallace.com" rel="noreferrer">reasons</a>. The tuition could be covered by savings. With that sorted out, I enrolled in the Spring 2026 session at <a href="https://www.blackwoodguitar.ca/acoustic-guitar-making-course/?ref=tonywallace.com" rel="noreferrer">Blackwood Guitar Company</a> in Mallorytown, Ontario. </p><p>My goal in writing this is not to give a detailed account of my time at Blackwood ("on day 1, we chose our woods and I almost started a fire in the drum sander" – true story) but to give you an idea of what you might expect from the course.</p><p>Blackwood is owned and operated by <a href="https://www.blackwoodguitar.ca/about/?ref=tonywallace.com" rel="noreferrer">Ted Brown</a>, a luthier who studied with <a href="https://dejongeguitars.com/?ref=tonywallace.com" rel="noreferrer">Sergei DeJonge</a> and <a href="https://www.guitarespellerin.com/en/?ref=tonywallace.com" rel="noreferrer">Michel Pellerin</a>. Ted also studied cabinetmaking with <a href="https://www.finewoodworking.com/2009/09/10/james-krenov-1920-2009?ref=tonywallace.com" rel="noreferrer">James Krenov</a> at College of the Redwoods and founded <a href="https://www.rosewoodstudio.com/?ref=tonywallace.com" rel="noreferrer">Rosewood Studio</a>. In my experience, Ted is direct and fair, the sort of no-bullshit teacher you should want if you're serious about learning something. He isn't going to do your work for you but he will help you when you need it.</p><p>You have your choice of several guitar designs and woods, which you'll choose on the first day. A basic back and sides set is included with the course, or you can upgrade to fancier woods at an additional cost. I chose a twelve fret parlor body style with Indian rosewood back and sides and a lutz spruce top. (I didn't upgrade because I'm cheap and the basic woods were of high quality.) All other materials and tools are provided. Each bench is equipped with a set of basic hand tools. There is also a shared set of hand tools, a machine shop, and more clamps than you've probably ever seen in one place. (And yet, somehow, we still could have used more clamps.)</p><p>The course moves <em>very</em> fast. It has to, because getting several students from zero to a completed guitar in five weeks is a tall order. I'm used to working alone and at my own pace in a private workshop, so it took me a few days to get used to working in a shared space and on someone else's schedule. I fell behind early in the course, and while I was never more than a half day behind the rest of the class, it took me about three weeks before I really felt like I had caught up. Be prepared to work hard and at a high level of focus every day, and expect to work overtime on evenings and Saturday mornings. </p><p>Ted demonstrates processes at a pace that is intended to keep the class moving forward. That means that you may get a demo hours or days before you'll be ready to carry out the process. The provided notes serve as a good reminder of the order of operations for each process but are often short on details. You need to take your own notes, and take photos and videos of all the demos and setups so you can refer to them later. </p><p>Things will go wrong. Wood will be wood. It will not always behave the way you expect. You will make mistakes. You're building a guitar, but you're also going to get some repair experience along the way. Your first guitar was never going to be perfect, so treat problems as learning opportunities and try to recover as gracefully as you can.</p><p>There's no guarantee that you'll actually finish your guitar. I gather that most people do, more or less, but it depends on you putting in the work. Everyone in my class finished, and we even had some time to dial in our setups, but we also had the benefit of a smaller than usual class size. My guitar could still use some more finish work on the back and sides, but that's no problem. Ted teaches French polishing in the course, which makes it easy to touch up the finish in the future. For now, I'm enjoying my guitar and not worried about the flaws.</p><p>If you're thinking about taking an acoustic guitar building course, I recommend Blackwood. It isn't easy, but if you put in the work you'll be rewarded with a great guitar and a solid grasp of the craft.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/media/2026/05/blackwood-guitar-demo_thumb.jpg" data-kg-custom-thumbnail="">
            <div class="kg-video-container">
                <video src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/media/2026/05/blackwood-guitar-demo.mp4" poster="https://img.spacergif.org/v1/1280x720/0a/spacer.png" width="1280" height="720" playsinline="" preload="metadata" style="background: transparent url('https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/media/2026/05/blackwood-guitar-demo_thumb.jpg') 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:21</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">My finished guitar.</span></p></figcaption>
        </figure> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reclaimed Wood: March 2026 ]]></title>
        <description><![CDATA[ A recap of my Instagram posts for March 2026. ]]></description>
        <link>https://tonywallace.com/reclaimed-wood-march-2026/</link>
        <guid isPermaLink="false">69d3938c463e63000182764b</guid>
        <category><![CDATA[ Instagram ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 06 Apr 2026 11:12:25 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>This is the latest in a series of monthly Instagram recaps for <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">@tonywallacewoodworks</a>. You can see last month's recap <a href="https://tonywallace.com/reclaimed-wood-february-2026/" rel="noreferrer">here</a>.</p>
<!--kg-card-begin: html-->
<ul class="ic-instagram-embed">
  <li><a href="https://www.instagram.com/reel/DVeg75Tkutv?ref=tonywallace.com" target="_blank">Progress check for a new batch of guitar necks</a></li>
  <li><a href="https://www.instagram.com/p/DWABV8ujoP_?ref=tonywallace.com" target="_blank">Walnut speaker stands spotted in the wild</a></li>
  <li><a href="https://www.instagram.com/p/DWC2V_AjrRR?ref=tonywallace.com" target="_blank">Smoothing a guitar body blank by hand</a></li>
  <li><a href="https://www.instagram.com/p/DWKfTJLDk0R?ref=tonywallace.com" target="_blank">My bud vases are available at J2 Gallery in Gananoque</a></li>
</ul>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Bud Vases at J2 Gallery in Gananoque ]]></title>
        <description><![CDATA[ I&#39;m happy to announce that a selection of my wood bud vases are now available at J2 Gallery Studio in Gananoque, Ontario. ]]></description>
        <link>https://tonywallace.com/bud-vases-at-j2-gallery-in-gananoque/</link>
        <guid isPermaLink="false">69bff0e9dad184000180e7b8</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sun, 22 Mar 2026 13:56:57 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/bud-vase-j2-gallery-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I'm happy to announce that a selection of my wood bud vases are now available at <a href="https://www.j2gallerystudio.com/?ref=tonywallace.com" rel="noreferrer">J2 Gallery Studio</a> in Gananoque, Ontario. The vases are variations on the design I presented in my <a href="https://tonywallace.com/project-archive-bud-vase/" rel="noreferrer">Project Archive: Bud Vase</a> post.</p><p>J2 is located at 33 King St. East, right across from Gananoque Town Hall.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Project Archive: Floor Speaker Stands ]]></title>
        <description><![CDATA[ A pair of walnut floor speaker stands that I created for a customer. ]]></description>
        <link>https://tonywallace.com/project-archive-floor-speaker-stands/</link>
        <guid isPermaLink="false">69b9612dc767ed000193b00f</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 17 Mar 2026 17:14:29 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ 
<!--kg-card-begin: html-->
<blockquote>
  Excuse my language....but those look f**king dope!
  <cite>&ndash; Satisfied Customer</cite>
</blockquote>
<!--kg-card-end: html-->
<p>I recently received a commission to build a pair of stands for a set of floor speakers. The customer wanted to raise the speakers roughly 9" and tilt them back to improve projection. The speakers have a faux-walnut veneer so we decided to use solid walnut for the stands, so they would be reasonably close in colour.</p><p>I started by building a parametric CAD model of the stands. I normally don't model my projects. I prefer to sketch things out in pencil on graph paper, and I generally only measure parts whose dimensions are critical to the success of the project. Everything else is marked and cut in reference to those critical parts. The benefit of having a model doesn't always justify the effort involved in creating it. However, I felt that I needed a model for this project, for a few reasons:</p><ul><li>The stands would tilt back and I didn't know what the ideal angle would be. Changing the angle would affect other dimensions, particularly the length of the joint between the leg and speaker support.</li><li>I wanted to provide the customer with a simple rendering and to be able to respond quickly if they wanted changes.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-renderings.webp" class="kg-image" alt="An image showing CAD renderings of the speaker stand design from various perspectives." loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/03/speaker-stands-renderings.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/03/speaker-stands-renderings.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/03/speaker-stands-renderings.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-renderings.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">CAD renderings of the speaker stand design.</span></figcaption></figure><p>Once the customer approved the rendering, I went shopping for lumber, milled it to the rough dimensions required by the designs, and <a href="https://woodworking.stackexchange.com/a/637?ref=tonywallace.com" rel="noreferrer">stickered</a> it for a few weeks to make sure it would be stable. </p><p>Each stand would have two leg assemblies, each consisting of three parts: the base, the leg and the speaker support. The leg assemblies had to be identical. Any deviation would prevent the stands from sitting properly on the floor, or prevent the speakers from sitting properly on the stands, or both. Either of these conditions could introduce vibration that would take away from the music. The best way to achieve the necessary consistency across all the parts would be to rout them to a template, so I made a templates for the three parts of the leg assembly from 12mm birch plywood. I traced the templates onto the lumber, cut the parts close to the lines on the bandsaw, and routed the parts to the templates. I also cut the cross brace for each stand on the table saw.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-templates.webp" class="kg-image" alt="An image showing plywood templates for the speaker support, leg and base parts of the leg assembly." loading="lazy" width="2000" height="1500" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/03/speaker-stands-templates.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/03/speaker-stands-templates.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/03/speaker-stands-templates.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-templates.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Plywood templates for the speaker support, leg and base parts of the leg assembly.</span></figcaption></figure><p>The parts would be assembled using three 1/4" dowels per joint. I marked precise center lines on the legs, continued the lines onto the bases and speaker supports, and used them to align my drilling jig. After drilling for the joints between the leg and base, and the leg and speaker support, I drilled another set of holes on the inside of each leg to attach the leg assembles to the cross brace. A dry fit of all the parts showed that dowel joinery could not guarantee that both speaker supports would end up with precisely the same tilt angle. It would be very easy for the leg assemblies to end up slightly out of plane with one another, so I needed a way to keep them aligned during glue-up. My solution was to use the dowel holes on the inside of each leg to keep the legs in the same position – leaving a bit of space between them so they wouldn't be glued together accidentally – and to clamp the bases and speaker supports between scraps of plywood to keep them coplanar. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-fixture-1.webp" class="kg-image" alt="An image showing a simple fixture to keep the leg assembly aligned during glue-up." loading="lazy" width="2000" height="2000" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/03/speaker-stands-fixture-1.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/03/speaker-stands-fixture-1.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/03/speaker-stands-fixture-1.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-fixture-1.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A simple fixture to keep the leg assembly aligned during glue-up.</span></figcaption></figure><p>Next, I sanded the leg assemblies and cross braces, and routed roundovers around all the outside edges except where the stands would make contact with the speakers and the floor. I used a router to establish a consistent 1/8" radius for the roundovers but sanded them out by hand for a less mechanical look. The last step of assembly involved glueing the legs to the cross braces. I clamped them together lightly and put a five pound weight on top of each assembly to keep the legs planted to the bench while the glue dried. The result is a pair of stands that sit perfectly flat.</p><p>I finished the stands with Osmo Polyx hard wax oil in a satin sheen, which is my go-to finish for most things, but especially for walnut. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-shop-2.webp" class="kg-image" alt="An image showing the speaker stands after applying finish." loading="lazy" width="2000" height="1553" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/03/speaker-stands-shop-2.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/03/speaker-stands-shop-2.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/03/speaker-stands-shop-2.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-shop-2.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The speaker stands after applying finish.</span></figcaption></figure><p>Overall, I'm very happy with how this project turned out. My customer's feedback has been overwhelmingly positive, not only with regard to the stands' appearance and basic functionality, but also with regard to the improvement they've made to how his speakers sound. That wasn't something we could plan for in advance, but decoupling the speakers from the floor and tilting them towards the listener should make a difference.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-1.webp" class="kg-image" alt="An image showing the left three-quarter view of one of the speaker stands with a speaker resting on it." loading="lazy" width="1350" height="2400" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/03/speaker-stands-1.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/03/speaker-stands-1.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/03/speaker-stands-1.webp 1350w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">One of the speaker stands in use.</span></figcaption></figure> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reclaimed Wood: February 2026 ]]></title>
        <description><![CDATA[ A recap of my Instagram posts for February 2026. ]]></description>
        <link>https://tonywallace.com/reclaimed-wood-february-2026/</link>
        <guid isPermaLink="false">69a58fa1f0b11700017dccd8</guid>
        <category><![CDATA[ Instagram ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 02 Mar 2026 13:46:52 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>This is the latest in a series of monthly Instagram recaps for <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">@tonywallacewoodworks</a>. You can see last month's recap <a href="https://tonywallace.com/reclaimed-wood-january-2026/" rel="noreferrer">here</a>.</p>
<!--kg-card-begin: html-->
<ul class="ic-instagram-embed">
  <li><a href="https://www.instagram.com/reel/DUT3X9OEjkB?ref=tonywallace.com" target="_blank">Gluing up a guitar body blank with Equipressure clamps</a></li>
  <li><a href="https://www.instagram.com/p/DUmDOPPEtxO?ref=tonywallace.com" target="_blank">Creating templates for a set of speaker stands</a></li>
  <li><a href="https://www.instagram.com/reel/DUqaeBwDgeA?ref=tonywallace.com" target="_blank">Slotting a guitar fingerboard with a pull saw and miter box</a></li>
  <li><a href="https://www.instagram.com/reel/DUrXwcRDh4W?ref=tonywallace.com" target="_blank">Psychedelic drill press</a></li>
  <li><a href="https://www.instagram.com/p/DUtsdnvkt1E?ref=tonywallace.com" target="_blank">Custom wood face dots for guitar fingerboards</a></li>
  <li><a href="https://www.instagram.com/p/DU647igDnjC?ref=tonywallace.com" target="_blank">Routing guitar neck blanks for truss rods</a></li>
  <li><a href="https://www.instagram.com/reel/DVPaKm-js54?ref=tonywallace.com" target="_blank">Creating a custom guitar headstock template</a></li>
  <li><a href="https://www.instagram.com/p/DVTkdrvjjoi?ref=tonywallace.com" target="_blank">Walnut speaker stands before applying finish</a></li>
  <li><a href="https://www.instagram.com/reel/DVUOH2Lknxc?ref=tonywallace.com" target="_blank">Finishing walnut speaker stands</a></li>
</ul>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ How to Square the Stewmac Fret Slotting Miter Box ]]></title>
        <description><![CDATA[ If your Stewmac fret slotting miter box is out of square, this adjustment process might help. ]]></description>
        <link>https://tonywallace.com/how-to-square-the-stewmac-fret-slotting-miter-box/</link>
        <guid isPermaLink="false">698dc236ef41af0001a74208</guid>
        <category><![CDATA[ Guitarmaking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 12 Feb 2026 14:02:03 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/stewmac-fret-slotting-miter-box-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I use the <a href="https://www.stewmac.com/luthier-tools-and-supplies/types-of-tools/saws/stewmac-fret-slotting-miter-box/?ref=tonywallace.com" rel="noreferrer">Stewmac fret slotting miter box</a> to cut fret slots in guitar fingerboards. This is an effective setup and more efficient than you might think. However, when I first received the miter box, a few test cuts indicated that it was slightly out of square. There was no obvious way to adjust it and the included instructions didn't acknowledge that this could be a problem in the first place. This post describes the process I worked out to fix it. </p><p>Lets get our bearings first. The box has two fixed fences (front and rear) and two adjustable fences. You can tell them apart because the adjustable fences have long slots for the mounting screws. One of the fixed fences has a small locator pin for a fret slotting guide on the inside. I will refer to this as the front fixed fence throughout these instructions.</p><ol><li>Make sure the guide bearings on all four fences are set to about the same position, somewhere around the middle of the adjustment range.</li><li>Loosen the screws that attach both adjustable fences to the base. Don't remove the screws. You just need to be able to slide the fences from side to side.</li><li>The screws that attach the front fixed fence to the base have a tiny bit of lateral play. The screws for the rear fixed fence don't, so I assume the play is designed into the fence as a hidden means of adjustment. Loosen but don't remove the screws for the front fixed fence.</li><li>Register your saw's plate against the guide bearings on the front and rear fixed fences.</li><li>Register the long edge of a 4" square on the front fixed fence and carefully slide the short edge up to the saw plate.</li><li>Adjust the position of the front fixed fence's until the saw plate is square to the fence. (Make sure the plate remains registered on the guide bearings on both fixed fences.)</li><li>Tighten the screws for the front fixed fence.</li><li>Confirm that the saw plate is square to the front fixed and rear fixed fences. Loosen the screws and fine tune the position of the front fixed fence if necessary.</li><li>With the saw plate registered on the guide bearings for the fixed fences, move the adjustable fences until their guide bearings snug up against the other side of the plate. The saw should glide smoothly through the bearings but should have no lateral play. You may need to loosen the mounting screws for the four guide bearing assemblies while you make this adjustment, since there is a bit of play in them that you can use to get all eight bearings to contact the saw plate. Keep your square handy and confirm that the saw plate is still square to the fence before you tighten everything up.</li><li>Tighten the screws on the adjustable fences and the guide bearing assemblies.</li><li>Confirm one last time that the saw plate is square to all fences.</li><li>Test the miter box on a piece of scrap that has a consistently straight edge. Confirm that the saw glides smoothly without any lateral play and the resulting slots are square to the edge.</li></ol><p>You should now be able to cut consistently square fret slots. </p><p>You shouldn't have to touch the fixed fences again. However, if you move the adjustable fences to accommodate a different saw plate, or adjust the position of the guide bearings to change the slot depth, you should always confirm that the saw plate remains square to the fences.</p><p>A few additional tips:</p><ul><li>The mounting screws for the guide bearing assemblies are most fragile parts of the miter box. Don't over-tighten them. They need to be tight enough that the guides won't slip, but remember that they only move vertically and won't (or shouldn't) be subject to much vertical force during normal operation.</li><li>The miter box includes a pair of hold-down clamps that ensure that the fingerboard and fret slotting guide stay put while you saw. Don't crank down too much on these, either. They apply upward force on the adjustable fences and might give you enough mechanical advantage to throw the fences out of alignment. A little bit of pressure is all that's needed to keep the fingerboard and guide in place.</li></ul> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Tool Review: 4-way Equipressure Clamp ]]></title>
        <description><![CDATA[ A review of the 4-way Equipressure clamp. ]]></description>
        <link>https://tonywallace.com/tool-review-4-way-equipressure-clamp/</link>
        <guid isPermaLink="false">6981f53134e5630001eb834c</guid>
        <category><![CDATA[ Product Review ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 03 Feb 2026 20:00:00 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">This is not a sponsored review. I purchased this product myself and haven't been influenced by the manufacturer or retailer.</div></div><p></p><p>Panel glue-ups present two main challenges. First, you need the mating faces of each board to be straight and square to achieve a gap-free glue joint. This is accomplished with a jointer (power or hand plane) or maybe your table saw if you have a good enough blade. The second challenge is to keep the boards vertically aligned under clamping pressure. If you're working with long, thin boards, you may find that they're bowed enough to introduce alignment problems towards the middle of the panel. Even if all the boards are perfectly flat, they can drift out of alignment while the glue is wet. There are ways to solve these problems. You can pile on more clamps and cauls to force the boards into vertical alignment, but that can be difficult for large panels. You can clamp the boards and then try to hammer them into alignment, but that isn't a reliable method – nor is it graceful. You can also start with thicker boards and plane out the excess after the glue-up, if you have a big enough thickness planer, or enough skill and patience with a hand plane. Or you can try <a href="https://www.busybeetools.com/products/clamp-4-way-equiprssure?_pos=1&_psq=equipressure&_ss=e&_v=1.0&ref=tonywallace.com" rel="noreferrer">4-way Equipressure clamps</a>.</p><h2 id="how-equipressure-clamps-work">How Equipressure Clamps Work</h2><p>The idea behind these clamps is simple. The two ends of a screw clamp are connected by bars that sit above and below the boards to be clamped. Tightening the screw applies horizontal pressure to join the boards while drawing the bars together to force the boards into vertical alignment. This is basically a streamlined version of the "more clamps and cauls" approach I mentioned above, and it works quite well in practice, at least for my purposes. A tool can be very effective in one context but fairly useless in another. When someone tells you that a tool works well, it's important to understand their test parameters so you can determine how they align with your own. Here are my parameters:</p><ul><li>I'm using these clamps to join guitar body blanks, which generally consist of two boards. I haven't tested these clamps on a large panel glue-up.</li><li>I'm working with fairly thick hardwood stock. The minimum thickness is generally around 1-5/8" (41mm) and the boards are freshly surfaced on four sides. I'm using the clamps to keep the boards from slipping out of alignment more than to correct for distortion.</li></ul><p>Your situation and needs may be different than mine, so take that into account when you decide whether or not to try this product.</p><h2 id="assembly-and-use">Assembly and Use</h2><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-parts.webp" class="kg-image" alt="Image showing the parts of a 4-way Equipressure clamp." loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/02/equipressure-clamps-parts.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/02/equipressure-clamps-parts.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/02/equipressure-clamps-parts.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-parts.webp 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Each clamp consists of two spring arms (bottom) and four brackets (top) that you mount on bars that you provide.</span></figcaption></figure><p>Each clamp consists of two spring arms, one with a screw and the other with a fixed caul, and four brackets (two long and two short) that mount to bars that you provide. I milled my bars from rough 8/4 (2"or 50mm) maple to ensure that they would be as hard as, or harder than, most of the woods that I would be working with. You can make your bars as long as you need them to be. I chose 24" (around 600mm) for guitar body blanks and other small panels. The important dimensions are the width and height of the bars, which can't exceed 1-5/8" (41mm) and 2" (50mm) respectively, for the bars to fit through the spring arms. (Similar clamps are offered by several vendors and sizing may vary, so be sure to verify the clearance on your own spring arms before you make your bars.) Mount the brackets to the bars using the supplied hardware, using a long bracket on one end of each bar and a short one on the other. Finally, line the bars with packing tape to prevent glue from bonding to them.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-assembled.webp" class="kg-image" alt="Image showing an assembled 4-way Equipressure clamp." loading="lazy" width="2000" height="1382" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/02/equipressure-clamps-assembled.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/02/equipressure-clamps-assembled.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/02/equipressure-clamps-assembled.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-assembled.webp 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">The assembled clamp.</span></figcaption></figure><p>To use the clamps, place one bar from each clamp on your bench with the brackets facing down. Arrange the boards for your panel across the bars, without glue. Place the other bar for each clamp across the top of the boards, with the brackets facing up. Slip the spring arms over the bars and into the grooves on the brackets, making sure to use the same grooves on the top and bottom bars. Unwind the screws all the way and move the spring arms to the innermost brackets that will accommodate your panel while allowing some leeway. Tighten the screws to make sure that everything aligns properly. Once you've completed a successful dry run, you can slide the boards out of the clamps to prepare for glue-up. Unfortunately, this is where it gets a bit tricky.</p><p>If you read reviews of these clamps, the common refrain is that they're awkward to set up. In my experience that's a valid complaint but there are ways to improve the situation. First, elevate the bottom row of bars from your bench by an inch or two. It's much easier to move the spring arms if they aren't resting on your bench under the weight of everything else. Second, cut some strips of thin wood slightly wider than the thickness of your panel and use them as spacers between the top and bottom bars so you can slide the boards in and out without resistance. Insert the spacers before you slide the boards in and remove them before you tighten the clamps. After you loosen the clamps, slide the spacers back in before you remove the panel. (If you can find a set of small bar clamps that can be reconfigured as spreaders to lift the top bar, I imagine that would work well in place of the spacers.)</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-spacer.webp" class="kg-image" alt="Image showing a thin board being used as a spacer to keep a 4-way Equipressure clamp open." loading="lazy" width="1800" height="2400" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/02/equipressure-clamps-spacer.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/02/equipressure-clamps-spacer.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/02/equipressure-clamps-spacer.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/02/equipressure-clamps-spacer.webp 1800w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Using a thin board as a spacer to hold the clamp open.</span></figcaption></figure><p>With the boards out of the clamps, you can apply glue to the edges, reinsert the boards into the clamps, remove the spacers if you're using them, double check that everything is aligned and tighten the clamps. Wait 5-10 minutes for the glue squeeze out to thicken before you scrape off as much as you can reach – it's cleaner and more effective than cleaning it up with water. Leave the panel under clamping pressure according to the glue manufacturer's recommendations. The minimum time is usually between 30 and 60 minutes, but I like to do up my panel glue-ups at the end of the day and leave them clamped until the following morning. </p><h2 id="the-results">The Results</h2><p>After using these clamps I've only needed a few passes with a card scraper to clean off any remaining glue and get a perfect joint on my body blanks. The 4-way Equipressure clamps are a bit difficult to set up at first, but in my opinion the results are worth the effort.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reclaimed Wood: January 2026 ]]></title>
        <description><![CDATA[ A recap of my Instagram posts for January 2026. ]]></description>
        <link>https://tonywallace.com/reclaimed-wood-january-2026/</link>
        <guid isPermaLink="false">6980a59f7801df0001b568f8</guid>
        <category><![CDATA[ Instagram ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 02 Feb 2026 20:18:57 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>This is the first of a series of monthly Instagram recaps for <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">@tonywallacewoodworks</a>. I was prompted to do this by a friend who doesn't have an Instagram account but wanted to be able to see what I was posting. (Ideally, I'd automate the publication of an RSS feed for my Instagram feed, but it looks like that requires an Instagram for Business account. If anyone knows a way around that, please comment on this post.)</p><p>How this will work:</p><ul><li>If you're reading this in an email, you'll see a list of links that point to my Instagram posts. </li><li>If you're reading this on the web, the list of links will be replaced with embedded Instagram posts. (If that fails for some reason, the original list should still be visible.)</li><li>If you use a browser or extension that blocks trackers, the embedded Instagram posts may not load but the links to the posts will still work.</li><li>You'll see a login prompt when you view a post in a web browser while you aren't logged into Instagram. You can dismiss it with the X button.</li><li>I won't include Instagram posts that just point back to posts on this blog.</li></ul><p>Special thanks to Nessa for the "Reclaimed Wood" title! 🙂</p><p>Here's what I posted in January 2026:</p>
<!--kg-card-begin: html-->
<ul class="ic-instagram-embed">
  <li><a href="https://www.instagram.com/p/DTgY6ZxEt60?ref=tonywallace.com" target="_blank">Fitting the neck for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/p/DTg3-K4jilm?ref=tonywallace.com" target="_blank">Installing string ferrules for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DTlHWaQjpiX?ref=tonywallace.com" target="_blank">An overview of my milling process for a guitar neck blank</a></li>
  <li><a href="https://www.instagram.com/reel/DTlmCrJEoI3?ref=tonywallace.com" target="_blank">$2 amp cover</a></li>
  <li><a href="https://www.instagram.com/reel/DTlnY8wEoyi?ref=tonywallace.com" target="_blank">An overview of my milling process for a guitar body blank</a></li>
  <li><a href="https://www.instagram.com/reel/DTn_L0Ckir-?ref=tonywallace.com" target="_blank">Sheilding pickup cavities with copper foil tape for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DTqo2wmknfx?ref=tonywallace.com" target="_blank">Pickups and bridge installed for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DTtR78XErzg?ref=tonywallace.com" target="_blank">Timelapse of the wiring for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DTvqO9Wkveb?ref=tonywallace.com" target="_blank">Everybody loves Richard Marx, right? Right?</a></li>
  <li><a href="https://www.instagram.com/reel/DT3TLttDmyh?ref=tonywallace.com" target="_blank">First sounds from my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DT3ZSgdEvMP?ref=tonywallace.com" target="_blank">Tuner installation for my second Telecaster build</a></li>
  <li><a href="https://www.instagram.com/reel/DUEpvnmjh1e?ref=tonywallace.com" target="_blank">Using my ergonomic sanding block</a></li>
</ul>
<!--kg-card-end: html-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Project Archive: Bud Vase ]]></title>
        <description><![CDATA[ My take on a vase design that Steve Der-Garabedian presented in Canadian Woodworking. ]]></description>
        <link>https://tonywallace.com/project-archive-bud-vase/</link>
        <guid isPermaLink="false">697bbf003cb1ce00011e7d87</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 29 Jan 2026 20:31:59 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/01/bud-vase-feature.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>This is my take on a vase design that <a href="https://www.blackwalnutstudio.ca/?ref=tonywallace.com" rel="noreferrer">Steve Der-Garabedian</a> presented in <a href="https://canadianwoodworking.com/project/make-a-simple-vase/?ref=tonywallace.com" rel="noreferrer">Canadian Woodworking</a>. The example shown here was made from padauk. I have also made them in walnut and maple. The vessel is a 15x150mm glass test tube.</p><p>The main difference between my version and Der-Garabedian's is that I've started with a larger blank and used more aggressive cutaways. I rough out the shape on the bandsaw, in part to reduce the amount of wood that I convert to dust, and in part to improve consistency. The fine shaping is done with spindle and edge sanders, and by hand sanding. The finish is Osmo Polyx in satin sheen to maintain a natural appearance.</p><p>Project date: December 2025</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/01/bud-vase-leaves.webp" class="kg-image" alt="" loading="lazy" width="2000" height="2667" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2026/01/bud-vase-leaves.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2026/01/bud-vase-leaves.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2026/01/bud-vase-leaves.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/01/bud-vase-leaves.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The bud vase with greenery.</span></figcaption></figure> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Instagram: tonywallacewoodworks ]]></title>
        <description><![CDATA[ A new Instagram account for my woodworking and guitar making work. ]]></description>
        <link>https://tonywallace.com/instagram-tonywallacewoodworks/</link>
        <guid isPermaLink="false">696fabd59542fd00017781f1</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 20 Jan 2026 16:49:46 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Last week I set up a new Instagram account for my woodworking and guitar making work: <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">tonywallacewoodworks</a></p><p>I'm generally averse to being on camera so you won't see much of me other than my hands. You also won't hear my voice very often. (That's no great loss.) </p><p>You will see whatever I'm working on today, or this week, so <a href="https://www.instagram.com/tonywallacewoodworks?ref=tonywallace.com" rel="noreferrer">come follow along</a> while I make things.</p><p>If you aren't reading this on your phone, you can use this QR code:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2026/01/instagram-tonywallacewoodworks-qr-2.jpg" class="kg-image" alt="" loading="lazy" width="567" height="567"><figcaption><span style="white-space: pre-wrap;">QR code link to tonywallacewoodworks on Instagram</span></figcaption></figure> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Post History Restored ]]></title>
        <description><![CDATA[ My old posts are back to preserve history. ]]></description>
        <link>https://tonywallace.com/post-history-restored/</link>
        <guid isPermaLink="false">695fdeff1ba5ea0001d163d5</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 08 Jan 2026 17:36:14 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>When I launched this website last month, I published a series of new posts but didn't migrate my old posts. I don't want to contribute to the epidemic of link rot on the internet so I have restored the post history and set up redirects to resolve old links to the new posts. I've also migrated posts from the old Irritant Creative blog and set up redirects from there to here. </p><p>Most of these posts document a period from 2014 -2016 when I was doing audio-related programming work and writing about it. (I was still active for a few years afterwards but had stopped writing, which I regret. A lot happened in those years.) They're all out of date, but if you want to read them you can head over to the <a href="https://tonywallace.com/tag/obsolete" rel="noreferrer">obsolete posts page</a>.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Generating Colour Variants in CSS with color-mix ]]></title>
        <description><![CDATA[ How to generate colour variants using the css color-mix function. ]]></description>
        <link>https://tonywallace.com/generating-colour-variants-in-css-with-color-mix/</link>
        <guid isPermaLink="false">6941613d69e0a900019329f3</guid>
        <category><![CDATA[ Web Development ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 16 Dec 2025 17:00:30 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">🤔</div><div class="kg-callout-text">This post deviates from my normal woodworking focus. It assumes that you're familiar with css in general and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Cascading_variables/Using_custom_properties?ref=tonywallace.com" rel="noreferrer">custom properties</a> in particular.</div></div><p>When I build a design system for a website, I like to define a family of lighter and darker variants of each colour. In the past, I've done this by manually generating each variant in one of two ways:</p><ul><li>Using a design or colour management app to define each variant, then setting the hex/rgb values as css custom properties. This was slow to set up in the first place and made it difficult to adapt to changes later on. If I wanted to change the hue for a colour, I had to redefine all the variants and update all the custom properties.</li><li>Defining the colours in code using <code>hsl()</code>. This made it easier to define variants by adjusting saturation and lightness without affecting the hue, and to change the hue later on without affecting saturation and lightness. The downside is that most of the colour values I receive from other people aren't defined in hsl to begin with. I still needed a colour picker to translate from other colour spaces.</li></ul><p>Granted, you've been able to solve these issues for years by using <a href="https://sass-lang.com/documentation/modules/color/?ref=tonywallace.com" rel="noreferrer">sass</a>, but I prefer standard css. This post will demonstrate how we can use the new <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/color-mix?ref=tonywallace.com" rel="noreferrer">color-mix</a> function to generate colour variants in code without requiring other languages or tools. (At the time of writing, the <a href="https://web.dev/baseline/?ref=tonywallace.com" rel="noreferrer">Baseline</a> status for <code>color-mix()</code> is "widely available," meaning that it has been implemented in all major browsers for at least 30 months and can generally be used without worrying about compatibility.) </p><p>The first step is to define a custom property for the accent colour.</p><figure class="kg-card kg-code-card"><pre><code class="language-css">:root {
  --color-accent: #6795cb;
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Defining a css custom property for the accent colour.</span></p></figcaption></figure><p>I used this technique to generate the color variants for the Ghost theme on this site, using the <code>--ghost-accent-color</code> custom property instead of a fixed accent colour. This allows the accent colour to be configured in the Ghost theme settings. </p><figure class="kg-card kg-code-card"><pre><code class="language-css">:root {
  --color-accent: var(--ghost-accent-color);
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Setting the accent colour to the </span><code spellcheck="false" style="white-space: pre-wrap;"><span>--ghost-accent-color</span></code><span style="white-space: pre-wrap;"> custom property that Ghost injects in the theme css.</span></p></figcaption></figure><p>Having defined the accent colour, we can define tinted variants of white and black. Adding a subtle tint to white and black can soften them and help them sit more comfortably with the accent colour. </p><p>I define custom properties for pure white and black that I incorporate into the <code>color-mix()</code> function and use anywhere else I want the pure variant. You might consider this to be an unnecessary step because pure white (<code>#fff</code>) and black (<code>#000</code>) are constant, but I prefer to have everything defined in one place.</p><p>Next, I use <code>color-mix()</code> to generate the tinted variants. This function requires a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color-interpolation-method?ref=tonywallace.com" rel="noreferrer">colour interpolation method</a> consisting of the keyword <code>in</code> followed by a <a href="https://developer.mozilla.org/en-US/docs/Glossary/Color_space?ref=tonywallace.com" rel="noreferrer">colour space</a>. (I'm using the <a href="https://developer.mozilla.org/en-US/docs/Glossary/Color_space?ref=tonywallace.com#cielab_color_spaces" rel="noreferrer">oklch</a> colour space.) The second argument is the base colour – white or black, in this case. The third argument is the colour to be mixed into the base colour, and the mix percentage. The result is assigned to a new custom property. </p><p>Increasing the mix percentage will push the result towards the accent colour. Decreasing it will push it towards the base colour. The key here is subtlety – I normally use a 1% mix of the accent colour for white, and around 5-10% for black. The result should still pass for white or black if you look at it in isolation. If the mix is too strong, it will start to look like a highly diluted version of the accent colour.</p><figure class="kg-card kg-code-card"><pre><code class="language-css">:root {
  --color-accent: #6795cb;

  --color-white: #fff;

  --color-black: #000;
  
  --color-white-tinted: color-mix(
    in oklch, 
    var(--color-white), 
    var(--color-accent) 1%
  );
  
  --color-black-tinted: color-mix(
    in oklch, 
    var(--color-black), 
    var(--color-accent) 10%
  );
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Defining tinted variants of white and black using `color-mix()`.</span></p></figcaption></figure><p>We can use the same technique to generate lighter and darker variants of the accent colour. I name these using levels from <code>050</code> to <code>950</code>, e.g. <code>--color-accent-350</code>, similar to how <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-weight?ref=tonywallace.com#common_weight_name_mapping" rel="noreferrer">font weight</a> levels are specified. Level <code>500</code> is the pure accent colour. The levels below <code>500</code> increase the mix of white into the accent colour by 10% per level, making them progressively lighter. The levels above <code>500</code> increase the mix of black into the accent colour by 10% per level, making them progressively darker.</p><figure class="kg-card kg-code-card"><pre><code class="language-css">:root {
  --color-accent-050: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 90%
  );
  
  --color-accent-100: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 80%
  );
  
  --color-accent-150: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 70%
  );
  
  --color-accent-200: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 60%
  );
  
  --color-accent-250: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 50%
  );
  
  --color-accent-300: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 40%
  );
  
  --color-accent-350: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 30%
  );
  
  --color-accent-400: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 20%
  );
  
  --color-accent-450: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-white) 10%
  );
  
  --color-accent-500: var(--color-accent);
  
  --color-accent-550: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 10%
  );
  
  --color-accent-600: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 20%
  );
  
  --color-accent-650: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 30%
  );
  
  --color-accent-700: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 40%
  );
  
  --color-accent-750: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 50%
  );
  
  --color-accent-800: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 60%
  );
  
  --color-accent-850: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 70%
  );
  
  --color-accent-900: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 80%
  );
  
  --color-accent-950: color-mix(
    in oklch,
    var(--color-accent),
    var(--color-black) 90%
  );
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Defining variants of the accent colour using `color-mix()`.</span></p></figcaption></figure><p>If you're designing a larger system with many colours, you can repeat this for each one. Adjust the levels as necessary – perfect 10% increments may not be optimal for all colours. </p><p>I also use this technique to define variants of grey by mixing pure white into the tinted black, in 10% increments. Because we're mixing white into black, a higher mix percentage results in a lighter shade of grey. </p><figure class="kg-card kg-code-card"><pre><code class="language-css">:root {
  --color-gray-100: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 90%
  );
  
  --color-gray-200: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 80%
  );
  
  --color-gray-300: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 70%
  );
  
  --color-gray-400: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 60%
  );
  
  --color-gray-500: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 50%
  );
  
  --color-gray-600: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 40%
  );
  
  --color-gray-700: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 30%
  );
  
  --color-gray-800: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 20%
  );
  
  --color-gray-900: color-mix(
    in oklch,
    var(--color-black-tinted),
    var(--color-white) 10%
  );
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Defining variants of grey using `color-mix()`.</span></p></figcaption></figure><p>Incorporate these variants into your design system however you like. For example, if you use <code>--color-accent-500</code> (the pure accent colour) as the text colour for buttons, you might use a darker variant like <code>--color-accent-600</code> for the hover and active states, and one of the greys for the disabled state.</p><figure class="kg-card kg-code-card"><pre><code class="language-css">button {
  color: var(--color-accent-500);
}

button:hover,
button:active {
  color: var(--color-accent-600);
}

button:disabled {
  color: var(--color-gray-500);
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Using the colour variants to style buttons.</span></p></figcaption></figure><p>You might not use every one of these variants in your styles – I rarely do – but having them makes it easy to tweak the contrast between elements without altering the basic hue.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ How to Make Beeswax Paste ]]></title>
        <description><![CDATA[ Make a simple and versatile paste wax with besswax and mineral oil. ]]></description>
        <link>https://tonywallace.com/how-to-make-beeswax-paste/</link>
        <guid isPermaLink="false">69330f19db88f40001558d40</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Fri, 05 Dec 2025 18:12:13 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/beeswax.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>Beeswax paste has a variety of uses. As a wood finish, it's simple to apply, easily reapplied when necessary, and food safe. It's great for lubricating screw threads before driving them into pilot holes –  especially the tiny screws for guitar tuners and string trees. It's also a good rust inhibitor for hand tools.</p><p>Beeswax paste is also very easy to make. You'll need beeswax, which you may be able to find at a farmers market or natural foods store, and mineral oil. You can buy mineral oil from any pharmacy but it's often a much better value if purchased from a farm supply store. The catch is that you'll have to buy a lot more. I bought a 3.78l jug from a farm supplier for about $35 CAD when my local pharmacy was selling 250ml for $13, but that jug is probably a lifetime supply. Good thing it doesn't spoil.</p><p>You can vary the ratio of wax to oil to obtain different consistencies. 1 gram of beeswax to 5ml of mineral oil is a good starting point. 24g of wax and 120ml (1/2 cup) of oil will make enough to last most people for a while.</p><p>Combine the wax and oil in a glass or metal container and place it in a water bath. Heat it slowly to a low simmer and stir it until the wax melts. Mix thoroughly until the wax is fully blended into the oil. Remove the water bath from the heat and let the mixture cool to room temperature. It will be liquid at first but will thicken as it cools. Store the wax in the container that you made it in. </p><p><strong>WARNING:</strong> <strong><em>Mineral oil is flammable.</em> If your cooking surface uses an open flame, e.g. a gas stove, please use an induction burner or hot plate instead. Never leave it unattended or let it come in contact with hot surfaces. </strong>The melting point of the wax (approximately 65°C) is far lower than the oil's flashpoint, so the risk will be minimal if you bring the mixture up to temperature slowly and  don't let it get hotter than necessary to melt the wax. </p><p>To use the paste wax as a wood finish, pick up some wax on a cotton rag and apply it evenly to the surface, rubbing in the direction of the wood grain. Leave it to sit for a few minutes (or more – it won't dry out) and buff it out with a clean rag. Keep in mind that the wax won't harden and isn't the ideal finish for objects that will be subject to a lot of handling. (Also, it might be a bad idea to use it as a finish for a candle holder. See the warning above.) </p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Create an Ergonomic Sanding Block From an Old Hand Plane ]]></title>
        <description><![CDATA[ How to easily and inexpensively adapt an old flea market hand plane to be used as a comfortable sanding block. ]]></description>
        <link>https://tonywallace.com/create-an-ergonomic-sanding-block-from-an-old-hand-plane/</link>
        <guid isPermaLink="false">6931f5fc4586720001469489</guid>
        <category><![CDATA[ Woodworking ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 04 Dec 2025 21:01:37 +0000</pubDate>
        <media:content url="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/sanding-block-assembled-1.webp" medium="image"/>
        <content:encoded><![CDATA[ <p>I sanded my first two electric guitar bodies with a block that consisted of a piece of 5/8” birch plywood glued to a half-thickness of 2×4 offcut. The plywood provided a reliably flat substrate for the sandpaper and the 2x4 gave me something to grip. This was a simple solution and it worked well. The problem was that it wasn’t very comfortable to use. I had to take frequent breaks to keep my hand from getting tired. There was also something about the technique of using it that seemed to encourage bad posture, making matters worse.</p><p>I thought that the tote and handle from a hand plane would be a good interface for a sanding block. A vendor at my local flea market had a derelict Stanley Handyman #3 plane that I was able to get for $12.50 CAD. Like many junk shop hand planes, it was very rusty and had a broken tote. A night in a tray of EvapoRust followed by some light scrubbing took care of the rust. The break on the tote was clean enough to glue up without worrying too much about the strength of the joint. I also sanded out the handle and tote, and gave them a few fresh coats of shellac. The goal was to make them comfortable, not beautiful.</p><p>The new sanding block would be another strip of 5/8" birch plywood, cut to 12x3" to accommodate 1/3 of a 9x12" sheet of sandpaper in portrait orientation. This is a convenient size for the plane bed – if you design for a 1/3 sheet in landscape orientation, you'll need a 9x4" block. That's a bit shorter than the bed of a #3 plane. It might not matter in practice, but I was concerned that it would be easy to dent a workpiece with the overhanging bed if I wasn't careful. (You could also design for a smaller plane bed, but a #3 is what I had available, and is also the smallest plane you're likely to be able to get on the cheap.)</p><p>I could have mounted the handle and tote directly to the block, but the plane bed provides perfect mounting points already. Taking advantage of that would eliminate some extra work. The question was how to mount the plane bed to the block. I didn’t want to drill the bed for screws. The Handyman line may not have been Stanley’s best effort but drilling would still ruin a tool that could otherwise be restored and put to use. There was also the risk that the cast iron bed could crack while drilling.</p><p>My solution was to flush-mount two 3/4” rare earth (neodymium) magnets in the plywood block. This only required two shallow holes to be drilled into the block with a 3/4" forstner bit, to a depth of about one tenth of an inch. (The thickness may vary, so set your drill press' depth gauge to the actual thickness of your magnets.) I positioned the magnets directly under the tote and handle mounting points where the bed is thicker. This provides ample power to hold the block to the bed when you pick it up. Rare earth magnets don’t resist shear forces very well, so I knew the friction from sanding would cause the bed to slide off the block. That was easily solved by mounting 1/4” dowel posts at the toe, heel and sides to keep the bed from moving.</p><p>The resulting tool feels comfortable and encourages better posture. It doesn't damage the plane, either. If you already have a #3 plane and don't want to go looking for another to dedicate to this purpose, you can attach the block when you need it. I like having a dedicated one for a few reasons:</p><ol><li>It's always ready to use</li><li>My normal plane won't get packed with sanding dust</li><li>I can remove the frog and iron to save weight</li></ol><h2 id="how-to-make-the-sanding-block">How to Make the Sanding Block</h2><p>I didn't take process shots when I made the sanding block, so a photo of the finished product will have to suffice. From left to right:</p><ul><li>1/4" dowel post to constrain the plane bed at the toe</li><li>3/4" rare earth magnet flush-mounted under the toe</li><li>1/4" dowel posts to constrain the plain bed at the sides</li><li>3/4" rare earth magnet flush-mounted under the heel</li><li>1/4" dowel posts to constrain the bed at the heel</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/sanding-block-base.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2025/12/sanding-block-base.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2025/12/sanding-block-base.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2025/12/sanding-block-base.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/sanding-block-base.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The completed sanding block.</span></figcaption></figure><h3 id="materials-and-tools">Materials and Tools</h3><ul><li>A #3 hand plane for the bed, handle and tote</li><li>A piece of birch plywood or some other reliably flat and strong material, big enough to yield a 12x3" piece. (Thickness isn't that important. I used 5/8" plywood because I had an offcut that was almost the right size. 3/4" would be even better. 1/2" would probably be fine.)</li><li>1/4" diameter dowel rod (at least 6" in length)</li><li>Two 3/4" rare earth (neodymium) magnets</li><li>Wood glue</li><li>Cyanoacrylate (CA) glue (super glue) and accelerator spray </li><li>Contact adhesive spray (I like 3M Super 77)</li><li>Sandpaper</li><li>Table saw (or some other means of cutting an accurately sized block)</li><li>Drill press</li><li>1/4" brad-point drill bit</li><li>5/16" drill bit or transfer punch (optional)</li><li>3/4" forstner bit</li><li>Mallet</li><li>Small square</li></ul><h3 id="assembly">Assembly</h3><ol><li>Remove the frog and iron from the plane, but leave the handle and tote installed. This is optional but will make the tool lighter and easier to handle.</li><li>Cut a 12x3" piece of birch plywood at the table saw. This will be the sanding block. Use sandpaper to break the sharp edges and corners.</li><li>Center the plane bed on the plywood block. Use a drill bit or transfer punch to mark the centers of the holes for the dowel posts. I used a 5/16" transfer punch to ensure a slight gap between the 1/4" dowels and the bed. This makes it easier to attach and detach the block. Mark one hole at the center of the toe, two at the heel on either side of the tote, and one on each side about halfway along the bed.</li><li>Drill the dowel holes using a 1/4" brad-point bit, preferably on a drill press. These holes only need to be about 1/4" deep.</li><li>Place the bed back on the block and make sure the holes are all in the correct locations, and the dowels won't interfere with the bed. It's easier to fix problems at this stage.</li><li>Cut a 1" length of dowel for each hole. </li><li>Glue the dowels into the holes using wood glue. Use a mallet to make sure the dowels are seated and a small square to make sure they stand straight in their holes. You don't have to clamp the dowels down, but leave the glue to set for the manufacturers recommended clamping time (usually around 30 minutes.)</li><li>Using a block of 1/2" thick material (e.g. plywood) as a guide, flush cut the dowels to a consistent length. (The actual length doesn't matter, so don't worry if your guide is slightly thicker or thinner than 1/2".)</li><li>Decide where you want to position the rare earth magnets. The plane bed will be thicker under the handle and tote mounting points, so the magnets will exert more force in those locations. Mark the centers for the magnet holes on the block.</li><li>Chuck a 3/4" forstner bit into your drill press and set the depth gauge according to the thickness of your magnets. </li><li>Drill the holes for the magnets. It's better to start shallow and sneak up on the correct depth. The magnets should sit flush with the surface of the block. If they're proud of the surface, the plane bed won't be stable. If they're below the surface, the magnets' strength will be reduced.</li><li>Glue the magnets into the holes with CA glue. Use regular CA glue, but if you also have thin CA, you can flow some around the edge of the hole after the magnet is seated. Give the magnets a shot of the CA accelerator spray to cure the glue.</li><li>Attach the block to the plane bed. It should hold securely but be fairly easy to remove.</li></ol><h3 id="usage">Usage</h3><ol><li>Remove the block from the plane bed.</li><li>Use the block as a template to cut a matching piece of sandpaper.</li><li>Lay the sandpaper upside down on a piece of paper or plastic to protect your bench.</li><li>Spray the back of the sandpaper with contact adhesive. If you're using 3M Super 77, leave it for about 20 seconds until it starts to turn white. (You could also use PSA-backed sandpaper rolls if you prefer to exchange money for time.)</li><li>Align the sandpaper carefully with the block and press it on.</li><li>Sand! Using an emery block to clean the sandpaper frequently will extend its life.</li><li>When you need to replace the sandpaper or change grits, peel the old piece off and glue a new piece on.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/sanding-block-assembled-2.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1125" srcset="https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w600/2025/12/sanding-block-assembled-2.webp 600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1000/2025/12/sanding-block-assembled-2.webp 1000w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/size/w1600/2025/12/sanding-block-assembled-2.webp 1600w, https://storage.ghost.io/c/c7/b6/c7b6bcc1-8332-4c1f-bb68-1960fb8a8798/content/images/2025/12/sanding-block-assembled-2.webp 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The completed sanding block with sandpaper applied.</span></figcaption></figure> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Welcome ]]></title>
        <description><![CDATA[ A new tonywallace.com for 2026. ]]></description>
        <link>https://tonywallace.com/welcome/</link>
        <guid isPermaLink="false">6931814d0b7517000837d997</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 04 Dec 2025 12:40:45 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>2026 is almost upon us and it's time for a new website. </p><p>My last site was a static site built with Eleventy. It worked well enough (and cost nothing) but the publishing process, while not <em>terribly</em> onerous, still discouraged me from writing. Plus, any new post would have to be accompanied by a newsletter for anyone to notice it, which was just another thing to do.</p><p>This site is hosted with <a href="https://ghost.org/?ref=tonywallace.com">ghost</a> and uses a custom theme that I can update easily on a whim. Or when something breaks. The big benefit of this setup is that I can type and press a _Publish_ button like a normal person, and other people (like you!) can <a href="#/portal/">subscribe</a> and receive posts by email.</p><p>If you know me at all, it's likely that you know me as a software developer. Maybe as the guy who made the (now defunct) <a href="https://cdm.link/drum-machines-browser-tab-places-find-web-audio/?ref=tonywallace.com" rel="noreferrer">WebX0X</a> drum machine back in 2015. I will occasionally write about software here, but my focus will be on woodworking and guitar making. Life's too short to stare at a screen all day, but I hope you'll find a few minutes to follow along with me.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Introducing Serialist ]]></title>
        <description><![CDATA[ Serialist is a live coding environment that uses serialist-grammar to generate MIDI messages. ]]></description>
        <link>https://tonywallace.com/serialist/</link>
        <guid isPermaLink="false">695fc63e1ba5ea0001d1639a</guid>
        <category><![CDATA[ Audio ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sun, 20 Nov 2016 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">This post was originally published on the Irritant Creative blog but was moved here to preserve history. Please update your links. If you're looking for the Irritant Creative website, <a href="https://irritantcreative.ca/?ref=tonywallace.com" rel="noreferrer">click here</a>.</div></div><p></p><p>Serialist is a live coding environment that uses <a href="https://github.com/irritant/serialist-grammar?ref=tonywallace.com">serialist-grammar</a> to generate MIDI messages. It requires a MIDI synthesizer (software or hardware) and does not generate any sound on its own.</p><p>View the project on <a href="https://github.com/irritant/serialist?ref=tonywallace.com">Github</a>. Just want to play? Visit <a href="http://serialist.irritantcreative.ca/?ref=tonywallace.com">serialist.irritantcreative.ca</a> for the live demo.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Introducing serialist-grammar ]]></title>
        <description><![CDATA[ A new grammar and parser for the expression and transformation of rows in serial music composition. ]]></description>
        <link>https://tonywallace.com/serialist-grammar/</link>
        <guid isPermaLink="false">695fc7e51ba5ea0001d163bf</guid>
        <category><![CDATA[ Audio ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">This post was originally published on the Irritant Creative blog but was moved here to preserve history. Please update your links. If you're looking for the Irritant Creative website, <a href="https://irritantcreative.ca/?ref=tonywallace.com" rel="noreferrer">click here</a>.</div></div><p></p><p>A few weeks ago, I attended the <a href="http://iclc.livecodenetwork.org/2016/?ref=tonywallace.com">International Conference on Live Coding</a> at McMaster University in Hamilton, Ontario, Canada. The opening day workshops inspired me to design a new grammar and parser for the expression and transformation of rows in <a href="https://en.wikipedia.org/wiki/Serialism?ref=tonywallace.com">serial music composition</a>. The resulting JavaScript library is called serialist-grammar and is available for free on <a href="https://github.com/irritant/serialist-grammar?ref=tonywallace.com">Github</a> and <a href="https://www.npmjs.com/package/serialist-grammar?ref=tonywallace.com">npm</a>.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ webx0x.com - Save and Share Your Beats ]]></title>
        <description><![CDATA[ WebX0X has a new home at WebX0X.com. ]]></description>
        <link>https://tonywallace.com/webx0x-com/</link>
        <guid isPermaLink="false">695fc5501ba5ea0001d16389</guid>
        <category><![CDATA[ Audio ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 08 Sep 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">This post was originally published on the Irritant Creative blog but was moved here to preserve history. Please update your links. If you're looking for the Irritant Creative website, <a href="https://irritantcreative.ca/?ref=tonywallace.com" rel="noreferrer">click here</a>.</div></div><p></p><p><a href="https://webx0x.com/?ref=tonywallace.com">WebX0X</a> has a new home at <a href="https://webx0x.com/?ref=tonywallace.com">WebX0X.com</a>. This update enables saving and sharing your beats.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Introducing WebX0X ]]></title>
        <description><![CDATA[ WebX0X is a drum synthesizer and sequencer built using the Web Audio API. All sound generation is performed entirely in the browser without the use of samples. ]]></description>
        <link>https://tonywallace.com/webx0x/</link>
        <guid isPermaLink="false">695fc2b81ba5ea0001d1636f</guid>
        <category><![CDATA[ Audio ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 18 Jun 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">This post was originally published on the Irritant Creative blog but was moved here to preserve history. Please update your links. If you're looking for the Irritant Creative website, <a href="https://irritantcreative.ca/?ref=tonywallace.com" rel="noreferrer">click here</a>.</div></div><p></p><p><a href="https://tonywallace.com/projects/x0x">WebX0X</a> is a drum synthesizer and sequencer built using the Web Audio API. All sound generation is performed entirely in the browser without the use of samples.</p><p>Web Audio promises to bring high performance, low latency audio playback, processing and synthesis to the web. It's an intriguing prospect, since web browsers' audio capabilities have historically been limited to playback of pre-recorded files. Simple playback is important - it's easily the most common way that most people experience digital audio on the web - but without tools to generate and modify sound our creative options are restricted. Web Audio gives us those tools. WebX0X is a demonstration of some of its possibilities.</p><p>WebX0X takes its name from the classic drum machines made by Roland in the 1980s, most notably the <a href="https://en.wikipedia.org/wiki/Roland_TR-606?ref=tonywallace.com">TR-606</a>, <a href="https://en.wikipedia.org/wiki/Roland_TR-707?ref=tonywallace.com">TR-707</a>, <a href="https://en.wikipedia.org/wiki/Roland_TR-808?ref=tonywallace.com">TR-808</a> and <a href="https://en.wikipedia.org/wiki/Roland_TR-909?ref=tonywallace.com">TR-909</a>. Like the 606 and 808, WebX0X synthesizes all its sounds using simple oscillators, noise generators, filters and envelope generators (the 909 used a mix of analog synthesis and digital samples, while the later 707 was entirely sample based), and has an integrated step sequencer to control patterns. WebX0X has 4 synthesizers, or ‘voices’. Unlike most classic analog drum machines, WebX0X uses the same algorithm for all voices. Each voice is tuned to resemble a different kind of drum by default (kick, snare, hihat and cowbell), but is also capable of a wide variety of other percussive sounds. This makes WebX0X very flexible.</p><h2 id="voice-architecture">Voice Architecture</h2><p>Each voice has two signal paths, <em>Tone</em> and <em>Noise</em> that are combined at the <em>Mix</em> stage.</p><h3 id="tone">Tone</h3><p>The <em>Tone</em> signal path consists of an oscillator, a filter and an amplifier. It can be used to give a sound ‘body’, like the ringing of a snare drum or the booming sound of a kick drum.</p><h4 id="oscillator">Oscillator</h4><ul><li><em>Waveform:</em> Selects the oscillator's waveform (<em>triangle</em>, <em>sawtooth</em> or <em>square</em>).</li><li><em>Initial Pitch:</em> Controls the oscillator's frequency at the onset of a sound.</li><li><em>Final Pitch:</em> Controls the oscillator's resting frequency.</li><li><em>Pitch Decay:</em> Controls the time it takes to transition from <em>Initial Pitch</em> to <em>Final Pitch</em>.</li><li><em>Decay Curve:</em> Selects the curve used by the pitch envelope generator (<em>linear</em> or <em>exponential</em>).</li></ul><h4 id="filter">Filter</h4><ul><li><em>Type:</em> Selects the filter's algorithm (<em>lowpass</em>, <em>highpass</em> or <em>bandpass</em>).</li><li><em>Initial Cutoff:</em> Controls the filter's cutoff frequency at the onset of a sound.</li><li><em>Final Cutoff:</em> Controls the filter's resting cutoff frequency.</li><li><em>Cutoff Decay:</em> Controls the time it takes to transition from <em>Initial Cutoff</em> to <em>Final Cutoff</em>.</li><li><em>Q:</em> Controls the filter's resonance or bandwidth.</li><li><em>Decay Curve:</em> Selects the curve used by the filter cutoff envelope generator (<em>linear</em> or <em>exponential</em>).</li></ul><h4 id="amp">Amp</h4><ul><li><em>Level:</em> Controls the tone's volume at the onset of a sound.</li><li><em>Decay:</em> Controls the time it takes to transition from <em>Level</em> to silence. This determines the perceived length of the tone.</li><li><em>Decay Curve:</em> Controls the curve used by the amp envelope generator (<em>linear</em> or <em>exponential</em>).</li></ul><h3 id="noise">Noise</h3><p>The <em>Noise</em> signal path consists of a noise generator, a filter and an amplifier. It can be used to give a sound ‘snap’, like the snares on a snare drum or the attack of a kick drum. It is also the main component of hihat and cymbal sounds.</p><h4 id="oscillator-1">Oscillator</h4><ul><li><em>Color:</em> Controls the quality of the noise source. Lower settings generate a more stable, ‘pure’ sound. Higher settings reduce fidelity.</li></ul><h4 id="filter-1">Filter</h4><ul><li>Similar to the <em>Tone Filter</em> section.</li></ul><h4 id="amp-1">Amp</h4><ul><li>Similar to the <em>Tone Amp</em> section.</li></ul><h3 id="mix">Mix</h3><ul><li><em>Level:</em> Controls the voice's overall volume.</li><li><em>Mute:</em> Mutes or unmutes the voice.</li></ul><h2 id="sequencer">Sequencer</h2><p>Each voice has a 32 step sequencer. Each step represents one sixteenth note. Turn steps on or off by clicking them. The voice will play when the sequencer's playback position reaches a step that is on (highlighted).</p><p>All four sequencers are synced and controlled by the global transport buttons (<em>Play/Pause</em> and <em>Stop</em>) and tempo input.</p><h2 id="browser-compatibility">Browser Compatibility</h2><p>WebX0X supports recent versions of Chrome, Firefox and Safari on desktop (Chrome works best). It has also been tested in Mobile Safari (iOS 8).</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WebSynthUI ]]></title>
        <description><![CDATA[ WebSynthUI is a collection of HTML5 UI components. ]]></description>
        <link>https://tonywallace.com/web-synth-ui/</link>
        <guid isPermaLink="false">695e7f6acf5f8000016fcd1a</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 09 Jun 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/WebSynthUI?ref=tonywallace.com">WebSynthUI</a> is a collection of HTML5 UI components that I designed for a Web Audio project I'm working on, but that could be just as useful in other interfaces. It currently consists of a rotary knob, a segmented switch and a toggle switch.</p><p>I plan to add more components as I have time. The most obvious omissions from the current collection are horizontal and vertical faders, and a momentary switch or trigger pad, so I'll try to get to those soon.</p><p><a href="https://github.com/irritant/WebSynthUI?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WebDrum ]]></title>
        <description><![CDATA[ WebDrum is a WebAudio drum synthesizer. ]]></description>
        <link>https://tonywallace.com/web-drum/</link>
        <guid isPermaLink="false">695e8285cf5f8000016fcd53</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sat, 14 Mar 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/WebDrum?ref=tonywallace.com">WebDrum</a> is a WebAudio drum synthesizer that uses my <a href="https://github.com/irritant/WebNoise?ref=tonywallace.com">WebNoise</a> and <a href="https://github.com/irritant/WebAHDSR?ref=tonywallace.com">WebAHDSR</a> projects. Each WebDrum instance can be configured to produce a single drum sound. You can create as many instances as browser performance will allow to produce a varied drum set.</p><p>Speaking of browser performance, Chrome currently handles projects with large or complex audio graphs better than Firefox or Safari, so I recommend running WebDrum under Chrome.</p><p><a href="https://github.com/irritant/WebDrum?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WebSequence ]]></title>
        <description><![CDATA[ WebSequence is a sequencing toolbox intended for use in WebAudio projects. ]]></description>
        <link>https://tonywallace.com/web-sequence/</link>
        <guid isPermaLink="false">695e8036cf5f8000016fcd2d</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sat, 07 Mar 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/WebSequence?ref=tonywallace.com">WebSequence</a> is a sequencing toolbox intended for use in WebAudio projects, but it is also usable for repetitive timing tasks in non-audio projects. It consists of two objects:</p><ul><li><em>WebSequence</em> controls the order and execution of a series of <em>events</em>. Events are merely functions that execute arbitrary code at a given step in the sequence. Sequences may be modified by adding, replacing or removing events at any time, even during playback.</li><li><em>WebSequenceTimer</em> controls the timing pulse for one or more <em>WebSequence</em> objects. The time interval between pulses can be set in milliseconds or by specifying a tempo in beats per minute and a duration (e.g. <code>1/4</code> for a quarter note).</li></ul><p><a href="https://github.com/irritant/WebSequence?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WebNoise ]]></title>
        <description><![CDATA[ WebNoise is a noise generator for WebAudio. ]]></description>
        <link>https://tonywallace.com/web-noise/</link>
        <guid isPermaLink="false">695e80fbcf5f8000016fcd40</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Sun, 22 Feb 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/WebNoise?ref=tonywallace.com">WebNoise</a> is a noise generator for WebAudio. You can adjust the noise character by setting the block size, which changes the frequency at which the output value fluctuates. This feature was influenced by Hexinverter's excellent <a href="http://cv.hexinverter.net/?projects=vcnoiz-v10&ref=tonywallace.com">VCNoiz</a> Eurorack module.</p><p><a href="https://github.com/irritant/WebNoise?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WebAHDSR ]]></title>
        <description><![CDATA[ WebAHDSR is an envelope generator that controls the value of any JavaScript AudioParam. ]]></description>
        <link>https://tonywallace.com/web-ahdsr/</link>
        <guid isPermaLink="false">695e8303cf5f8000016fcd66</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 16 Feb 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/WebAHDSR?ref=tonywallace.com">WebAHDSR</a> is an envelope generator that controls the value of any JavaScript AudioParam. Useful if you want to create synthesizers using the WebAudio API.</p><p><a href="https://github.com/irritant/WebAHDSR?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Sequencing with TWNote ]]></title>
        <description><![CDATA[ A tutorial on using TWNote, TWPitch and TWDuration in SuperCollider. ]]></description>
        <link>https://tonywallace.com/twnote-tutorial/</link>
        <guid isPermaLink="false">695e857ecf5f8000016fcdac</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 01 Jan 2015 16:10:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>I designed <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twnote">TWNote</a> (and its constituent classes, <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twpitch">TWPitch</a> and <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twduration">TWDuration</a>) to make working with traditional musical notes in <a href="https://github.com/supercollider/supercollider?ref=tonywallace.com">SuperCollider</a> easier. This tutorial will demonstrate how to use TWNote and SuperCollider's <a href="http://doc.sccode.org/Classes/Task.html?ref=tonywallace.com">Task</a> object to create sequences.</p><p><em>This tutorial assumes that you have basic working knowledge of the SuperCollider language. If you need help, the </em><a href="http://doc.sccode.org/Help.html?ref=tonywallace.com"><em>SuperCollider documentation</em></a><em> is a good place to start.</em></p><h2 id="installing-twsupercolliderextensions">Installing TWSuperColliderExtensions</h2><p>Follow the <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#installation">TWSuperColliderExtensions installation instructions</a> before continuing with this tutorial.</p><h2 id="introducing-twpitch-twduration-and-twnote">Introducing TWPitch, TWDuration and TWNote</h2><h3 id="twpitch">TWPitch</h3><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twpitch">TWPitch</a> describes a pitch as a combination of a <a href="http://en.wikipedia.org/wiki/Pitch_class?ref=tonywallace.com">pitch class</a> and octave. The pitch class and octave may be provided or inferred from a MIDI note number:</p><pre><code class="language-supercollider">(
    var pitch1 = TWPitch.newPitch(pitchClass: 9, octave: 5);
    pitch1.pitchClass.postln; // 9
    pitch1.octave.postln; // 5
    pitch1.midiNoteNumber.postln; // 69
    pitch1.frequency.postln; // 440

    var pitch2 = TWPitch.newPitchWithMIDINoteNumber(noteNumber: 69);
    pitch2.pitchClass.postln; // 9
    pitch2.octave.postln; // 5
    pitch2.midiNoteNumber.postln; // 69
    pitch2.frequency.postln; // 440
)
</code></pre><p>TWPitch calculates frequency based on a reference frequency that defaults to 440Hz. You can change the reference frequency globally for all instances of TWPitch:</p><pre><code class="language-supercollider">TWPitch.setReferenceFrequency(442.0);
</code></pre><p>If the new reference frequency does not relate to the note A in the 5th octave, you will also need to change the reference pitch class and octave:</p><pre><code class="language-supercollider">// Set the reference frequency to approximately C (pitch class 0) in the 4th octave (slightly flat):
TWPitch.setReferenceFrequency(130.8);
TWPitch.setReferencePitchClass(0);
TWPitch.setReferenceOctave(4);

(
    var pitch = TWPitch.newPitch(pitchClass: 9, octave: 5);
    pitch.pitchClass.postln; // 9
    pitch.octave.postln; // 5
    pitch.midiNoteNumber.postln; // 69
    pitch.frequency.postln; // ~439.957
)
</code></pre><p>TWPitch can also provide a MIDI-compatible octave number. By default, the MIDI octave is equal to <code>pitch.octave - 1</code>. This is appropriate for most MIDI systems. Some systems (eg. Yamaha) use <code>pitch.octave - 2</code>, which can be obtained by adjusting the MIDI base octave:</p><pre><code class="language-supercollider">(
    var pitch1 = TWPitch.newPitch(pitchClass: 9, octave: 5);
    pitch1.octave.postln; // 5
    pitch1.midiOctave.postln; // 4
)

TWPitch.setMIDIBaseOctave(-2); // Allowable range is -2..0

(
    var pitch2 = TWPitch.newPitch(pitchClass: 9, octave: 5);
    pitch2.octave.postln; // 5
    pitch2.midiOctave.postln; // 3
)
</code></pre><h3 id="twduration">TWDuration</h3><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twduration">TWDuration</a> describes a note duration as a fraction, in which the denominator represents a division of a typical 4 beat measure (eg. <code>4</code> for a quarter note or <code>8</code> for an eighth note) and the numerator represents the number of divisions:</p><pre><code class="language-supercollider">var wholeNote = TWDuration.newDuration(numerator: 1, denominator: 1);
var halfNote = TWDuration.newDuration(numerator: 1, denominator: 2);
var quarterNote = TWDuration.newDuration(numerator: 1, denominator: 4);
var eighthNote = TWDuration.newDuration(numerator: 1, denominator: 8);
var sixteenthNote = TWDuration.newDuration(numerator: 1, denominator: 16);
var dottedHalfNote = TWDuration.newDuration(numerator: 3, denominator: 4);
var dottedQuarterNote = TWDuration.newDuration(numerator: 3, denominator: 8);
var eighthNoteTriplet = TWDuration.newDuration(numerator: 1, denominator: 12);
var quarterNoteTriplet = TWDuration.newDuration(numerator: 2, denominator: 12);
</code></pre><p>The value of a TWDuration can be calculated as a decimal value:</p><pre><code class="language-supercollider">(
    var duration = TWDuration.newDuration(numerator: 1, denominator: 8);
    duration.decimal.postln; // 0.125
)
</code></pre><p>As a clock value, which can be used with SuperCollider's Task object:</p><pre><code class="language-supercollider">(
    var duration = TWDuration.newDuration(numerator: 1, denominator: 8);
    duration.clock.postln; // 0.5
)
</code></pre><p>Or as time in seconds or milliseconds. Time calculations are based on a reference tempo, which defaults to 60 beats per minute. You can change the reference tempo globally for all instances of TWDuration:</p><pre><code class="language-supercollider">(
    var duration1 = TWDuration.newDuration(numerator: 1, denominator: 8);
    duration1.seconds.postln; // 0.5
    duration1.milliseconds.postln; // 500
)

TWDuration.setReferenceTempo(120.0);

(
    var duration2 = TWDuration.newDuration(numerator: 1, denominator: 8);
    duration2.seconds.postln; // 0.25
    duration2.milliseconds.postln; // 250
)
</code></pre><h3 id="twnote">TWNote</h3><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twnote">TWNote</a> describes a note as a combination of a pitch (an instance of TWPitch) and a duration (an instance of TWDuration). TWNote objects also have a boolean property named <code>isRest</code> that indicates whether or not the note should be treated as a rest. <em>(It is the responsibility of the code that interprets the note to handle the rest properly.)</em></p><pre><code class="language-supercollider">(
    var note = TWNote.newNote;
    note.pitch.postln; // a TWPitch
    note.duration.postln; // a TWDuration
    note.isRest.postln; // false
)
</code></pre><p>TWNote has several constructors:</p><pre><code class="language-supercollider">// Verbose constructor:

(
    var note1 = TWNote.newNote(
        pitch: TWPitch.newPitch(
            pitchClass: 9,
            octave: 5),
        duration: TWDuration.newDuration(
            numerator: 1,
            denominator: 4),
        isRest: false);

    note1.pitch.pitchClass.postln; // 9
    note1.pitch.octave.postln; // 5
    note1.pitch.midiNoteNumber.postln; // 69
    note1.pitch.frequency.postln; // 440
    note1.duration.decimal.postln; // 0.25
    note1.isRest.postln; // false
)

// Convenience constructors:

(
    var note2 = TWNote.newNoteWithPitchClass(
        pitchClass: 9,
        octave: 5,
        durationNumerator: 1,
        durationDenominator: 4);

    note2.pitch.pitchClass.postln; // 9
    note2.pitch.octave.postln; // 5
    note2.pitch.midiNoteNumber.postln; // 69
    note2.pitch.frequency.postln; // 440
    note2.duration.decimal.postln; // 0.25
    note2.isRest.postln; // false
)

(
    var note3 = TWNote.newNoteWithMIDINoteNumber(
        noteNumber: 69,
        durationNumerator: 1,
        durationDenominator: 4);

    note3.pitch.pitchClass.postln; // 9
    note3.pitch.octave.postln; // 5
    note3.pitch.midiNoteNumber.postln; // 69
    note3.pitch.frequency.postln; // 440
    note3.duration.decimal.postln; // 0.25
    note3.isRest.postln; // false
)

(
    var rest = TWNote.newRest(
        durationNumerator: 1,
        durationDenominator: 4);

    rest.duration.decimal.postln; // 0.25
    rest.isRest.postln; // true
)
</code></pre><h2 id="sequencing-twnote-objects-with-tasks">Sequencing TWNote Objects With Tasks</h2><p>SuperCollider's <a href="http://doc.sccode.org/Classes/Task.html?ref=tonywallace.com">Task</a> object provides a convenient and powerful way to sequence events that works well with TWNote. You can build simple sequence with a list of TWNote objects:</p><pre><code class="language-supercollider">(
    // Create a global clock using the TWDuration reference tempo:
    ~clock = TempoClock.new(TWDuration.referenceTempo / 60.0);

    var sequence = Task({[
        TWNote.newNoteWithPitchClass(pitchClass: 0, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 4, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 5, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 11, octave: 4, durationNumerator: 1, durationDenominator: 4)
        ].do({
            // The .do function receives the note object as its first argument:
            arg note;
            // Print the note's frequency:
            note.pitch.frequency.postln;
            // Wait for the duration of the note's clock value:
            note.duration.clock.wait;
        });
    }, ~clock);

    sequence.play;
)
</code></pre><p>Now add a simple SynthDef to play each note in the sequence:</p><pre><code class="language-supercollider">// Boot the local server:
Server.default = s = Server.local.boot;

(
    SynthDef(\osc, {
        arg frequency = 440.0, duration = 1.0;
        var attack = 0.05;
        var decay = 0.1;
        var hold = duration - (attack + decay);
        var osc = SinOsc.ar(
            freq: frequency,
            mul: EnvGen.kr(
                envelope: Env(
                    levels: [0.000001, 0.1, 0.1, 0.000001],
                    times: [attack, hold, decay],
                    curve: \exponential
                ),
                doneAction: 2)
        );
        Out.ar([0, 1], osc);
    }).load(s);
)

(
    // Create a global clock using the TWDuration reference tempo:
    ~clock = TempoClock.new(TWDuration.referenceTempo / 60.0);

    var sequence = Task({[
        TWNote.newNoteWithPitchClass(pitchClass: 0, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 4, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 5, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 11, octave: 4, durationNumerator: 1, durationDenominator: 4)
        ].do({
            // The .do function receives the note object as its first argument:
            arg note;
            // Use the time in seconds for the synth duration:
            Synth(\osc, [frequency: note.pitch.frequency, duration: note.duration.seconds]);
            // Wait for the duration of the note's clock value:
            note.duration.clock.wait;
        });
    }, ~clock);

    sequence.play;
)
</code></pre><p>Polyphonic sequences can be created by combining multiple Task objects. Notice how rests are handled in <code>sequence2</code>:</p><pre><code class="language-supercollider">// Boot the local server:
Server.default = s = Server.local.boot;

(
    SynthDef(\osc, {
        arg frequency = 440.0, duration = 1.0;
        var attack = 0.05;
        var decay = 0.1;
        var hold = duration - (attack + decay);
        var osc = SinOsc.ar(
            freq: frequency,
            mul: EnvGen.kr(
                envelope: Env(
                    levels: [0.000001, 0.1, 0.1, 0.000001],
                    times: [attack, hold, decay],
                    curve: \exponential
                ),
                doneAction: 2)
        );
        Out.ar([0, 1], osc);
    }).load(s);
)

(
    // Create a global clock using the TWDuration reference tempo:
    ~clock = TempoClock.new(TWDuration.referenceTempo / 60.0);

    var sequence1 = Task({[
        TWNote.newNoteWithPitchClass(pitchClass: 0, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 4, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 5, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 11, octave: 4, durationNumerator: 1, durationDenominator: 4)
        ].do({
            // The .do function receives the note object as its first argument:
            arg note;
            // Use the time in seconds for the synth duration:
            Synth(\osc, [frequency: note.pitch.frequency, duration: note.duration.seconds]);
            // Wait for the duration of the note's clock value:
            note.duration.clock.wait;
        });
    }, ~clock);

    var sequence2 = Task({[
        TWNote.newRest(durationNumerator: 2, durationDenominator: 12),
        TWNote.newNoteWithPitchClass(pitchClass: 0, octave: 6, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 11, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 9, octave: 5, durationNumerator: 1, durationDenominator: 4),
        TWNote.newNoteWithPitchClass(pitchClass: 7, octave: 5, durationNumerator: 1, durationDenominator: 12)
        ].do({
            arg note;
            // Do not play the synth during rests, but do wait out the duration:
            if (note.isRest.not, {
                Synth(\osc, [frequency: note.pitch.frequency, duration: note.duration.seconds]);
            });
            note.duration.clock.wait;
        });
    }, ~clock);

    var polySequence = Task({
        sequence1.play;
        sequence2.play;
    }, ~clock);

    polySequence.play;
)
</code></pre><p>Be sure to check out the full documentation for <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twnote">TWNote</a>, <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twpitch">TWPitch</a> and <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twduration">TWDuration</a>. Documentation and help for the SuperCollider language is available at <a href="http://doc.sccode.org/Help.html?ref=tonywallace.com">doc.sccode.org</a>.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ TWNote SuperCollider Extension ]]></title>
        <description><![CDATA[ TWNote is a SuperCollider extension that combines one instance each of TWPitch and TWDuration to create a description of a musical note. ]]></description>
        <link>https://tonywallace.com/twnote/</link>
        <guid isPermaLink="false">695e842bcf5f8000016fcd8a</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twnote">TWNote</a> is a <a href="https://github.com/supercollider/supercollider?ref=tonywallace.com">SuperCollider</a> extension that combines one instance each of <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twpitch">TWPitch</a> and <a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twduration">TWDuration</a> to create a description of a musical note.</p><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ TWDuration SuperCollider Extension ]]></title>
        <description><![CDATA[ TWDuration is a SuperCollider extension that facilitates conversion from fractional note durations to time in seconds and milliseconds. ]]></description>
        <link>https://tonywallace.com/twduration/</link>
        <guid isPermaLink="false">695e8545cf5f8000016fcd9b</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Wed, 31 Dec 2014 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twduration">TWDuration</a> is a <a href="https://github.com/supercollider/supercollider?ref=tonywallace.com">SuperCollider</a> extension that facilitates conversion from fractional note durations (eg. <code>1/4</code>, <code>1/8</code>, <code>1/16</code>) to time in seconds and milliseconds.</p><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ TWPitch SuperCollider Extension ]]></title>
        <description><![CDATA[ TWPitch facilitates the use of pitch class notation in SuperCollider. ]]></description>
        <link>https://tonywallace.com/twpitch/</link>
        <guid isPermaLink="false">695e838fcf5f8000016fcd79</guid>
        <category><![CDATA[ Programming ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Tue, 23 Dec 2014 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com#twpitch">TWPitch</a> facilitates the use of pitch class notation in <a href="https://github.com/supercollider/supercollider?ref=tonywallace.com">SuperCollider</a>. Pitch class notation is a system in which pitches and their enharmonic equivalents are identified by integers ranging from <code>0</code> to <code>11</code>:</p><pre><code>0:  C
1:  C sharp / D flat
2:  D
...
9:  A
10: A sharp / B flat
11: B
</code></pre><p>Octaves are identified by integers ranging from <code>0</code> to <code>inf</code>. Pitch class <code>0</code> in octave <code>0</code> produces C at ~8.176Hz. Pitch class <code>9</code> in octave <code>5</code> produces A at 440.0Hz.</p><p><a href="https://github.com/irritant/TWSuperColliderExtensions?ref=tonywallace.com">Check out the source on Github.</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ WWDC 2013 ]]></title>
        <description><![CDATA[ A brief review of WWDC 2013. ]]></description>
        <link>https://tonywallace.com/wwdc-2013/</link>
        <guid isPermaLink="false">695e7eabcf5f8000016fcd0c</guid>
        <category><![CDATA[ Apple ]]></category>
        <dc:creator><![CDATA[ Tony Wallace ]]></dc:creator>
        <pubDate>Mon, 17 Jun 2013 00:00:00 +0000</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>I was lucky to be able to attend Apple's <a href="http://developer.apple.com/wwdc?ref=tonywallace.com">Worldwide Developer Conference</a> (WWDC) in San Francisco this year and I can't imagine a better year after 2007 to have been there. Seeing your primary platform recieve a massive design overhaul and then getting an entire week to soak in all the changes is something else, and the one-to-one time with Apple's engineers is invaluable. If you're an iOS or Mac developer and you haven't been to WWDC, try to get there.</p><p>If you care about iOS and OS X at all and still haven't seen the keynote, it's worth a few hours of your time. If you're an iOS developer, you <em>need</em> to bring yourself up to date with the new design language in iOS7, UIKit Dynamics, Multipeer Connectivity and SpriteKit (even if you aren't a game dev) first. They will change how you design your apps. The session videos are available in the <a href="https://itunes.apple.com/us/app/wwdc/id640199958?mt=8&ref=tonywallace.com">WWDC app</a> now.</p><p>A lot of apps are going to have to undergo significant change to look and feel right in iOS7. Within a day of the announcement I started planning a ground up redesign of Taxulator, inside and out. A simple freshening isn't going to cut it. It's time to rethink how the app works and how users will interact with it. Taxulator was the first app I built for the "old" iOS and I'm excited to bring it to iOS7, hopefully in time for the official release.</p> ]]></content:encoded>
    </item>

</channel>
</rss>