CQ-editor Standalone On VM Via RDP

I’m looking forward to learning CadQuery and I’m happy to learn constraint solver capability exists. It may be experimental, and it may yet prove to be as frustrating as its FreeCAD counterparts, but knowing it exists gives me a goal to learn enough CadQuery to get there. As part of that journey I thought I would take another attempt at getting its default GUI tool CQ-editor up and running.

On my first pass, I followed instructions to install CadQuery components in a Python virtual environment then installed CQ-editor as an add-on within that Python virtual environment. Sadly I only got into an useless state where I could launch CQ-editor but nothing ever showed on screen. Did I make a mistake somewhere? Or is this a bug? I had no diagnostic feedback. Very FreeCAD-like, and not a great start! At least I could get Jupyter working in that Python virtual environment, so I had something.

Re-reading CadQuery installation instructions again, I noticed there was a standalone installer for CQ-editor. So instead of installing CadQuery as a collection of Python libraries then installing CQ-editor as a consumer of those libraries, we have an installer more along the line of standard desktop software installer. Which in this case means installing CQ-editor and pulling in CadQuery as its dependency.

Wary of the possibility that this installer may go sour and collide with what I have running (it is just a “nightly” build and not an official release) I decided to try it on a virtual machine first. I spun up a new VM with Proxmox and booted it into a network installer for Debian. For most experiments that is enough, as I can remotely control the machine via a command line using SSH. But CQ-editor is a graphical interface tool and my main machine runs Windows 11 so I wanted to access its graphical interface via Microsoft’s Remote Desktop Protocol.

This is a job xrdp. Multiple tutorials exist on the internet for more details (example) but the succinct note for my future self is:

  • Install the component with sudo apt install xrdp
  • Give xrdp user permission to access SSL resources (to establish RDP connection) with sudo adduser xrdp ssl-cert
  • Restart xrdp so it can access its new SSL permissions with sudo systemctl restart xrdp
  • Verify it is back up and running with sudo systemctl status xrdp

This procedure allowed me to connect to this fresh virtual machine via “Remote Desktop Connection” application from my Windows machine, and I could follow instructions for CQ-editor standalone installer without any issue. And this time, when I launched CQ-editor, I saw its interface on screen come up and I could use it. Fantastic! I now have that option in addition to the Jupyter interface so I could play with both.

CadQuery Constraints: Friend or Foe?

Dreaming about cars I can’t buy was fun but now it’s back to study time. I’ve got CadQuery + Jupyter set up and ran through its quick start tutorial. I think there’s a lot of promise in CadQuery and plan to invest time to climb its learning curve. Before I roll up my sleeves and dive in, though, I skimmed ahead to check a few features, the biggest one being constraints.

Specifying constraints in CAD is a concept that is almost as old as CAD itself. It is an important tool for a part designer to embed intent into a design ensuring future changes will not deviate from original intent. The ideal target for a design is to be fully constrained. An under-constrained design is ambiguous because it means some attribute can change without violating specifications, and that is rarely desirable. An over-constrained design is an impossible contradiction that needs to be resolved, a task that can be frustrating if a CAD tool fails to provide sufficient feedback. Such frustration can drive people (me) away from certain tools (FreeCAD) to seek out others (CadQuery).

When I explored the world of code-based CAD earlier, I had no luck finding ways to specify constraints or provide tools to resolve constraints. I inferred this to mean that they’ve left constraints to be specified in our code. Want to constrain a line to be tangential to an arc? Calculate their intersection point in your own code and use that point. The upside is that we have full control, the downside is a lot of duplicate effort repeating common constraint-solving tasks.

The good news is that CadQuery doesn’t drop constraints in our lap as our responsibility. Or at least, it has ambition to handle constraints. I found a page discussing sketch constraints (addressing the arc+line tangent example above) but with a disclaimer the feature is still experimental in development. There are also ways to specify constraints in multi-part assemblies, which seem to be a counterpart to Onshape mates that I’ve used to specify relationship between Sawppy parts.

It looks good on paper! But then, FreeCAD looked good on paper as well. I won’t know if CadQuery constraints will be my friend or foe until I get deeper into learning it, but I wanted to know it at least existed before I got too deep into CadQuery. For now I’m still working to get basic tools up and running.

My Desired Hyundai Doesn’t Exist (Yet?)

I had contemplated buying a Hyundai IONIQ 5, but poor dealership experience turned me off of that path. Which was just as well, because my ideal Hyundai isn’t available for purchase anyway. An IONIQ 5’s SUV form factor is not my first choice as it is far larger than I want in a car. What I would love is to have that design language in a 2-door sports car.

We got a preview of that idea’s greatness with Hyundai’s N Vision 74 concept. It has a hydrogen-electric hybrid powertrain featuring fuel cells and batteries feeding electric motors. Optimized for high performance on the race track, complete with aerodynamic assists like a deep front splitter and a huge rear wing. But most importantly, it applied IONIQ 5 school of design to a sports car form factor. This has been very well received with many calling for Hyundai to put the concept into production. I’ve read that Hyundai is contemplating building a very limited number of them as six figure track toys for the rich, which isn’t actually what I had hoped for when I wished for a production version.

I don’t want the N Vision 74 as-is, I wanted a production car that the concept race car implied. Something without race aerodynamics and with an interior usable for daily living. Remove the hydrogen tank and fuel cell leaving a pure battery electric car. And since I’m wishing anyway, sell it around IONIQ 5 price range and make it smaller. According to numbers floating around on the internet N Vision 74 is about twenty inches longer and eight inches wider than my 2004 Mazda RX-8. That’s enormous! Some of that length might be aerodynamic bits and some of that width are race car tires, but it clearly casts a big shadow.

For an analogy, Hyundai recently released a race-ready variant of the IONIQ 5 N called the eN1 Cup car. Featuring suspension, tire, and aerodynamic aids appropriate to track duty. The relationship between that eN1 Cup car and a normal IONIQ 5 is the same relationship between the N Vision 74 and an electric two-door coupe of my dreams. Too bad that car does not exist but, if it ever comes into being, it might entice me to walk back into a Hyundai showroom.


Images from Hyundai news room

Plug-In Car Research Eliminated Hyundai

My time with my 2004 Mazda RX-8 may be coming to an end given fading interest in doing my own work and condition of its engine. For now it has fresh coolant as part of recent radiator replacement. I also replaced the engine air filter and gave it an oil change. Brakes and tires both have plenty of life left, so that takes care of all minor wear and tear items. It is all set to ride until the next major event which will demand a big decision. To help inform that decision, I visited a nearby cluster of car dealerships. Going west to east on Gale Ave. in Puente Hills, CA, for an in-person look at various plug-in vehicles.

Toyota Prius Prime

First stop was Puente Hills Toyota to look at their new plug-in hybrid. I had leased a Chevrolet Volt from 2012-2015 and thought GM had the start of something good. Give it three generations of evolution and it should be a really compelling product. Sadly GM killed the Volt after just two generations, but Toyota continued developing their counterpart and a new Prius Prime was recently released. It is a hit! So much that Puente Hills Toyota allocation are sold before they even reach the lot. I could look at an already-sold Prius on the lot but none were available for a test drive. Toyota will make plenty, I’m sure, I just need to wait a bit for my hands-on time.

Chevrolet Bolt

A block away was Chevrolet of Puente Hills, with a red 2023 Chevrolet Bolt on the lot. Bolt production situation is opposite of the new Prius: Chevrolet shut down Bolt production late 2023 so dwindling inventory will not be replenished. I explained my situation to the employee who greeted me and asked for to take the Bolt around the block. The short drive was uneventful and mostly quiet, since I explained up front there will be no deal today.

I think the Bolt is a sufficient and capable compact car. It had much of the GM traits that I remember from my Volt, and it checks all the boxes for basic electric transportation. As a battery-only car it doesn’t have the road trip gas-and-go capability of a Prius Prime, but I rarely take such trips so it’s a tradeoff I’d consider making.

Nissan Leaf

Puente Hills Nissan was next door but I did not stop in. Leaf has toned down visual weirdness of earlier generations but still not a sight I’d enjoy walking up to. Nissan also decided against a liquid-cooled battery pack on cost and complexity grounds, an engineering decision that has been blamed for Leaf battery degradation faster than other EVs on the market. And finally, Nissan had bet on the wrong horse for high-speed charging. CHAdeMO lags far behind other alternatives in North America.

I took a brief look at Ariya, which addressed the battery cooling and charge plug challenges of a Leaf but it came across as a very generic vehicle with nothing that grabbed my attention as worth a price premium over a Bolt.

Ford Mustang Mach-E

The Mach-E, in contrast, was more distinctive. I studied its styling for a few minutes on the lot of Puente Hills Ford next door. I’m no Ford Mustang purist so Mach-E’s mere existence did not offend me, but I decided its Mustang-inspired styling didn’t attract me either. Still, I had little to lose by taking it for a spin around the block. Despite my clear up-front statement I would not be buying today, the representative made an earnest pitch. I appreciate his effort to make a case for my business. I found the Mach-E distinctive, but not in any way that enticed me to pay more over a Bolt.

Hyundai IONIQ 5

But the Hyundai IONIQ 5, now we’re talking. It has a creased-edge retro-future style I find much more attractive than a Bolt. Though they’re not really head-to-head competitors. The fact they both look like 5-door hatchbacks in pictures is a deception of proportions: Ioniq 5 wear 21″ wheels in advertisements, the Bolt rolls on 17″ wheels. So the car is bigger than I want, and those big tires promise big replacement bills to come, but I was willing pay a price premium for that styling.

I walked in to Puente Hills Hyundai and explained that I was researching potential cars and asked to take an IONIQ 5 around block. I was denied and told to come back when I’m serious about buying. This was quite jarring immediately following my experience at Ford! So I didn’t get any data on how well I fit in the car, but I did get data on how Hyundai treat customers. That’s enough to eliminate IONIQ 5 from consideration.

Summary

Toyota Prius Prime is a sleek sedan that can drive mostly electric but can run on gas for road trips, built with Toyota quality for the long haul. Production is still ramping up.

Chevy Bolt has an overstyled busy exterior and economy class interior, but it should be a practical and economical box until/unless infamous GM quality rears its head. Inventory is running out.

Leaf, Ariya, and Mach-E failed to build a compelling case over a Bolt and/or Prius Prime.

Hyundai IONIQ 5 styling looks fantastic, but given my dealership experience I will spend my money elsewhere.

CadQuery Quick Start in Jupyter

After a few unproductive FreeCAD sessions where I spent most of my time trying to understand uninformative error messages, I decided I need to take a break from banging my head against that particular brick wall and look at something else. When I had performed a brief survey of open-source CAD solutions, I only scratched the surface of CadQuery because I had managed to catch it at an awkward stage. At the time most of Python ecosystem have moved to 3.11 but CadQuery had not done so yet. Most critically, I wanted the Jupyter interface and it would not be possible until the version support lines up between those two pieces of software.

In the time since my survey, this problem has been resolved and I could play with CadQuery in a Jupyter notebook. I tried to get the default GUI CQ-editor running just for the sake of looking it over, but I had no luck running it. I would start the executable, I could see an application process running, but no GUI ever showed up on screen. Shrug. I doubt I would have used it anyway because I like the concept of doing CadQuery in Jupyter.

A big advantage I see in code-based CAD is the ability to add code comments in between operations, describing the high-level intent behind the actual code statements. Commenting individual operations is not practical in GUI-based CAD tools like Onshape or FreeCAD. Furthermore, while I could enter comment text with Python comment syntax in CQ-editor, a Jupyter notebook offers significantly more documentation capabilities. As I understand it, it’s literally the difference between plain text and markdown.

While CadQuery’s quick start tutorial was written for a beginner to follow along in CQ-editor, my failure to get CQ-editor running meant I had to convert instructions to Jupyter on the fly. My biggest light bulb moment was realizing I could call display(result) at multiple points in my Jupyter notebook. This gives me a snapshot of the current incomplete state, every time I called display(result). So anyone reading the notebook (like me, 6 months from now) could visually see how the object evolved into its final form. I like where this is going.

Infuriating FreeCAD Error Messages

I haven’t 3D printed anything of my own design in many months, mostly due to a desire to switch from proprietary Onshape CAD to an open source CAD solution. I thought FreeCAD was the obvious thing to learn but after months of struggle I’m starting to think that decision may have been a mistake. While I have a long list of FreeCAD complaints, this page highlights the worst offender in my book: FreeCAD’s error feedback system.

Redundant constraint error has been the biggest enemy to my productivity. The most infuriating aspect is the message “Recompute failed! Please check report view.” It is a general catch-all message promising more details in the report view. The problem is that message is itself displayed in the report view and there are no more details to be found! I thought maybe I need to enable verbose mode or something, so I right-clicked in the report view and activated everything. While that did display more text in the report view, there was nothing I could understand as a helpful direction.

Graphically, redundant constraints are rendered in a different color. But it can be a time-consuming game of hide and seek to find that little icon of a different color within a complex shape. Sometimes I swear I’ve looked at every single constraint and couldn’t find one rendered in a different color.

The toolbar has a “select redundant constraints” icon. In theory I could click on that tool and hit delete to remove the redundant constraints. In practice I click on that tool, hit delete, and get an error message saying nothing is selected.

If the above steps fail, I could click “Undo” to remove the most recent action. Then I have to sit and think about what I did and how it might lead to redundant constraints. I test my hypothesis one by one and sometimes I find a solution that gets me out of my mess.

But then there are the times when I don’t have that option. Recently I drew a profile that I wanted to revolve into a solid. The operation failed with a complaint my profile (wire) is not closed, but it doesn’t tell me where the opening is and I couldn’t find it. The toolbar has a “close shape” icon but, if I click it, my profile is over constrained and I don’t know where to look because I don’t know what “close shape” did. Absent that knowledge I couldn’t form and test hypothesis to repair my shape.

In this specific instance I ended up redrawing the shape from scratch, and it was successful the second time. Experiences like this do not endear me to FreeCAD. Beginners like myself will make mistakes, and we want to learn from our mistakes, but FreeCAD error reporting system is of absolutely zero help. It’s hard for me to be an enthusiastic user when the system wastes my time and saps my motivation by repeatedly telling me to go find a needle in a haystack with no directions.

Showing Failures On The Route To Success

This blog serves as my project notebook, and for completeness I try to document my failures as well as my successes here for future reference. The header image came from testing my Sawppy rover wheel design to failure. Sometimes documenting my failure is hard to do, especially for problems whose solutions look obvious in hindsight. Once I solved it, I have a hard time articulating why it was ever difficult!

Most people tout their successes and de-emphasize their failures. I can respect their choice but I love seeing blooper reels both in and out of show business. A few days ago Boston Dynamics announced retirement of their hydraulically actuated Atlas humanoid research robot with a highlight reel of its history. Alongside Atlas accomplishments, the reel also included Atlas flailing and taking some bad spills.

This is only the latest in a series of impressive and occasionally amusing videos released by Boston Dynamics. Most videos are edited down to show only successful actions, because that’s what they want people to focus on. But their success rate are far below what these “best case scenario” edits imply. Anyone who worked with robots know how low general success rates are, and would notice all the scuff and scrapes visible on Atlas’ body to know Boston Dynamics is not immune. But other people lack such knowledge and would miss such indication of damage, to a point these videos are borderline misleading when viewed by the general populace That history is why I was very happy to see this “Fare to HD Atlas” video covering some failures on the route to success in a very impressive project.

That said, the best example of the genre remains “How Not to Land an Orbital Rocket Booster” from SpaceX. A compilation of many failures on their way to successfully landing boosters for reuse. Once considered impractical, now routine for SpaceX, but many millions of dollars had to go up in big fireballs in order to get there.

Less Enthusiasm For Car Projects

I had some project ideas for my 2004 Mazda RX-8 that involved tapping power from its auto-dimming rear view mirror. After determining its power connector pinout, I realized I wasn’t excited to keep going. This marks the end of a chain of events that started with a puddle of coolant demanding my attention to find the leak. I think I’m done with car projects for a bit. I’m writing down my current thoughts which may or may not hold up in the future with more hindsight wisdom.

A big part of keeping an old car running is replacing or repairing old worn out parts. As a car of early 2000s vintage, my RX-8 has lots of plastic and rubber pieces that have become brittle and fragile with age such as the radiator I just replaced. Paradoxically, much older cars may be easier to keep running because more of their parts were made of metal. It’s not very satisfying to replace plastic and rubber pieces that were only designed to survive duration of the warranty.

I did learn quite a few things as I worked my way to the radiator, understanding more of what’s under the hood. I now recognize hoses not just between the engine and radiator, I also recognize hoses leading to the coolant reservoir and leading back towards the interior heater core. This is similar to the thrill I get from teardowns, but that thrill is diminished by many annoyances. The first is that age throws barriers in my way — like stubborn hoses — that are not illuminating and not fun to solve. The second is that, unlike most of my teardown projects, I have to put this thing back together afterwards!

21st century cars also tend to be very cramped under the hood, making everything hard to access compared to the relative wide open spaces under the hood of something from the 1960s. So many sensors, wires, and hoses are packed in there and every single one is a potential point of failure. Parts availability dry up as cars get older, but this problem is worse for low volume cars like a RX-8. Parts are expensive when they are available at all. This is a problem shared with most cars that date back to the 1960s, the difference is that it’s much easier to design and fabricate a substitute. For a 1960s car, it’s likely something mechanical that can be built in a home workshop. For a 2004 car, good luck fabricating a replacement sensor that can keep the engine control unit (ECU) happy. And there’s a risk of such a project going sour killing the ECU, which would turn a small problem into a huge one.

Some people work on their cars to make it uniquely their own and feel a connection to it. I can certainly understand that and I’ve played around with it myself. But projects like retrofitting Android Auto and a backup camera aren’t breaking any ground. (New cars just come with that stuff now.) Neither is a dashcam, so I don’t think it’s going to happen.

Mazda Mirror (Auto Dimming with HomeLink) Pinout

Once I completed a radiator (and radiator hose) replacement for my 2004 Mazda RX-8, I moved on to another item that has been sitting on the to-do list for many years. At one point I was excited to add a dashcam to my car, and thought I could do a clean job of integrating one because a wiring harness already exists high and center on my windshield for my fancy rearview mirror. At night it automatically dims in response to bright lights behind me, and it has a HomeLink remote control with three function buttons. (One of which is worn out because I use it for my garage opener.) I saw the same mirror installed across the Mazda lineup so it is not a RX-8 exclusive feature.

Many years ago I visited a RX-8 at a local salvage yard for an unrelated project and picked up an extra fancy mirror along with a segment of its wiring harness. I figured it would help me experiment with how to tap power from its counterpart in my car. It sat until today, when online resources included Mazda wiring diagrams for reference. I didn’t have to determine the pinout experimentally, I could just look it up.

Only four wires were used in this 10-position connector. All four had black insulation, but three of them had a thin color stripe for identification. The Mazda diagram labeled the wire positions A (upper right in picture above), B (lower right), through J. The four wires were:

Position B has a black wire with no color stripe. This wire provides +12V power only when ignition is in the “On” position. This ensures auto-dimming feature doesn’t waste energy when the car is parked.

Position D has a black wire with green stripe. This wire provides +12V power only when reverse gear is engaged. I’m not sure why this is here. Perhaps auto-dimming is disabled when I’m backing up? I never noticed one way or another.

Position F has a black wire with yellow stripe. This is the ground wire.

Position J has a black wire with red stripe. This wire always has +12V power for the HomeLink transmitter.

Whenever I get around to the dashcam installation, I would first try using the black (ignition on) wire for power. Unless the camera storage may get corrupted by abrupt shutdown. In that case, I will use black/red (always on) for power and use black (ignition on) wire as inverted signal to finish writing to storage and perform a proper shutdown. But honestly I don’t think it’s going to happen.

Compensating For Lower Radiator Hose Mismatch

I’ve managed to replace the radiator in my 2004 Mazda RX-8, and now I have to put everything back together starting with new engine radiator hoses. Just like with the radiator, I did a quick comparison of old and new before installation and I’m really glad I did.

Cars typically have two hoses between engine and radiator, a RX-8 has three. Its top hose is divided into two parts joined by a metal mid pipe visible in the top left of this picture. The new upper front hose looks pretty close to the old one.

The new upper rear hose looks pretty close as well.

And this is where doing the comparison paid off: the lower hose is not an exact match. It looks pretty good on the engine side (left in this picture) but I see problems beyond that. The hose curvature is different but probably close enough to be bent into shape. The next two problems might be related: First, the radiator-side outlet flares out to roughly 5mm larger diameter than it should be, more than what the hose clamps can compensate for. Second, the flared section added overall length of the hose making it too long. I did a loose trial fit and jamming a too-long hose in place would cause unacceptable kinks in the hose.

Maybe it was a packing error? I double checked part number on the label (Continental 61098) and verified it was the intended product to fit my car. My next hypothesis is a manufacturing error. Somehow this hose wasn’t bent to the exact curvature and the radiator end was not trimmed to the correct diameter and length. The good news is that it’s a lot easier to cut a hose shorter than it is to cut a hose longer. I can fix it now rather than return this item and wait for a replacement to be shipped. I trimmed off the flared end so both the length and diameter is correct for a secure and kink-free fit against the lower radiator fitting.

The final challenge is compensating for curvature. The flawed shape wants to rub up against a sharp corner on the mid pipe bracket. That would quickly cut a hose open and not acceptable.

Fortunately Mazda engineers designed a white plastic clamp that clips between hose and mid pipe bracket so the lower hose is properly routed to avoid damage. Success!

RX-8 Radiator Replacement Route: Above or Below? I Say Both!

I’ve been working my way to the radiator in my 2004 Mazda RX-8, which is buried pretty deep in its nose and set at an angle. It’s been a production to get to it for replacement. Once I removed the engine radiator hoses (which I will also replace) I have removed everything explicitly called out in the workshop manual. That manual called for removing the radiator with the cooling fan module still attached, but it didn’t explicitly say whether the assembly should be lifted up out of the engine bay or dropped down below it. People on RX-8 Club forums have reported success in both directions.

Either choice requires careful maneuvering. Lifting up means I have to be careful not to damage large stubborn wiring harnesses and refrigerant lines for air conditioning. Dropping down means being careful not to damage the air conditioning condenser dangling by refrigerant lines. The radiator’s protruding top mounting brackets are especially dangerous to condenser fins.

I first tried lifting the radiator up but got tangled up between refrigerant lines and wire harnesses. I then tried going the other direction and had better luck carefully lowering it below the car onto the floor.

I removed the fan module and found several pieces of debris that has fallen in there over the life of this car. The largest piece was a rubber bushing that I didn’t immediately recognize. I would later figure out it was part of the cosmetic engine cover. I lost both bushings over the years and my engine cover could only sit loosely in its position. Now that I’ve recovered one bushing I could reinstall the cover more firmly when I care to do so.

Some of the debris bounced around fan blades before settling down off in a corner. The old radiator on the left showed two arcs of damaged fins that lines up with the lower edge of fan blades. I set the replacement radiator down to the right for a quick side-by-side comparison to verify it looks largely correct. All the hose fittings seem to be the same diameter and located in the same places, as are all the attachment points for the fan assembly, the AC condenser, and chassis structure.

Transferring the fan assembly and mounting hardware, I had a new radiator assembly to install. I tried to reverse what I did earlier but had trouble lifting the assembly from the ground into the engine bay. This assembly is not heavy, but lifting it means bending over the front of the car and reaching through the engine bay out the bottom. It was an awkward pose with poor lifting leverage.

Next I tried to drop the assembly in from the top, but the same wire harness and refrigerant lines were in the way. This time I got smarter: I rotated the assembly 90 degrees so I could lead with the narrow side edge of the radiator, and that allowed me to clear refrigerant lines and wires. Once the leading edge is poking down under the car, I carefully rotated the radiator back into proper orientation.

So my opinion for the top route vs. bottom route discussion is: both! I think it’s easier to let gravity help instead of fighting gravity. Which means removing old radiator out the bottom, then install new radiator from the top. This is especially true for someone working solo as I did. If there are more hands available, it should be easier to maneuver the assembly and lift against gravity so a different path may work better when installed by a team.

Peeling Old Radiator Hoses Off Fitting

I’ve learned that the radiator in my 2004 Mazda RX-8 was long overdue for replacement. Conventional wisdom says if a radiator is getting replaced due to age-related issues, it’s a good idea to replace hoses at the same time. Partly because they are flexible parts subject to wear from age, and partly because we have to remove one end anyway during radiator replacement. I added hoses to my radiator order.

First lesson: my locking pliers are my allies when battling hose clamps.

Second lesson: radiator hoses that have been clamped to the same fittings for over twenty years are reluctant to move. Once I freed the hose clamp, radiator-side hoses came loose with a hard tug. But the engine-side fittings were more challenging. It took far more effort to remove the top radiator hose and, once freed, I could see the problem: a layer of buildup acted as glue between hose and fitting. I think most of this is dried coolant, but some of it may be corrosion. Most of it crumbled when I scraped with my fingernail which I then wiped away.

The engine’s lower radiator hose is buried deeper. I chose to remove the secondary air injection pump to give myself more elbow room but I still couldn’t pull the hose free. Again I exercised my dial-an-expert option and Emily Velasco suggested working a screwdriver in there to free up the hose. This makes sense: I’m pulling parallel to the adhesion surface, the direction where it is strongest. I need to apply force perpendicular to the adhesion surface, like how we peel off a piece of adhesive tape.

However, tight quarters meant I couldn’t get a tool in there, but Emily had a simple solution: bend a screwdriver. I chose a small one that was bundled with my Creality Ender 2 and bent it into a tiny little pry bar. Now I could push the tip into the gap between old hose and engine fitting, and I could hear and feel the tactile sensation of those surfaces peeling apart.

Once the adhesive bond between hose and fitting was broken, I could pull these old hoses free clearing the way for radiator removal.

Old RX-8 Radiator Was About To Fail Anyway

I decided to go ahead and install a replacement radiator in my 2004 Mazda RX-8 despite the fact it arrived with some minor damage presumably in shipping. I’ve temporarily patched my old radiator but I expected it to fail again soon given its age. This turned out to be a good call! As I started preparing to move the coolant reservoir tank out of the way, its associated radiator fitting broke off.

I learned from RX-8 Club forums this fitting becoming fragile with age is a known common problem, but I was surprised at how little effort was involved. I estimate it took less force than what it would take to break a piece off a chocolate bar. I might have been one bad pothole bump away from this thing breaking on me. In fact, looking at the pattern of dried residue around the break, it was already degraded enough to seep coolant for some time.

My next problem was how to extract its remnants from the hose. Consulting my friend Emily Velasco’s experience of working with old machinery, she expected this segment to be just as fragile as the rest. A firm squeeze with some big pliers should be enough to break this apart into smaller pieces for extraction.

Her expectation was correct, it didn’t even take much of a squeeze for the thing to fall apart. I had expected to feel some resistance or maybe a “snap” marking the point of breakage, but there was nothing. I squeezed and it collapsed. I pulled out the pieces and tried squeezing the hose again with my pliers. The effort level was basically the same.

I picked up one of the pieces and tried pushing it with my finger. I was able to fold it in half with about as much effort as a graham cracker. Yikes. This thing is long gone.

And that’s not the only thing showing severe degradation. Here’s a picture I took of the top engine hose fitting after I removed the radiator. It showed discoloration and material degradation similar to the snapped-off reservoir hose fitting. The worst discoloration corresponded to where the hose clamp applied pressure. The base of this fitting was where I found a crack (and applied J-B Weld) and it’s pretty obvious that crack was merely the first clear failure and many other potential failures were close behind.

Bottom line: Yes, replacing the radiator was a good idea! And with these broken fittings, I’m past the point of no return. The car is not going to drive under its own power again until the new radiator is installed. Next step: struggling with old radiator hoses.

Replacement RX-8 Radiator Arrived Slightly Damaged

I ordered a replacement radiator and associated hoses for my 2004 Mazda RX-8 before I found out my engine is terminally ill. I briefly contemplated not bothering with the radiator but then I decided to look on the bright side: If the engine is on its way out anyway, it doesn’t matter as much if I screw things up. I can dive into the learning experience of performing my own radiator replacement with less pressure. So far I’ve done oil changes, brake pad replacements, ignition system upgrade from Black Halo Racing, and replaced a water pump that had started weeping coolant. A radiator replacement seems like an appropriate next step up in difficulty.

After the radiator arrived I opened the shipping box and was mildly disappointed to see radiator fin damage both front and back. The radiator had fallen off of its packing foam blocks and the air pillows fell out of place. I wished they had taped the foam and pillow to the radiator instead of loosely draping. Inspecting the radiator, I saw no other signs of damage. All mounting points seem intact and accounted for, and all three hose fittings appear to be in good shape. The smallest and most fragile fitting for coolant reservoir connection even got a separate protective rubber boot!

Besides, the fin damage is pretty trivial compared to visible condition on my remaining heat exchange units: the air conditioning condenser in the middle and oil coolers on either side. Their fins are pretty bent up from twenty years of road debris, and they’re still sufficient. Besides, as a clumsy beginner, I think it’s pretty likely I’d bend a few radiator fins as I try to install it. If this radiator is not going to stay pristine for long anyway, why worry about a few bent fins now? It will have enough cooling capacity to keep the engine from overheating. And if I’m wrong… well, the engine was on its way out anyway. I’m going to jump in with an enthusiasm for learning.

Problems Of A Mazda RX-8 With Low Compression

My 2004 Mazda RX-8 has failed its compression test. This fact did not come as a huge surprise given its age, but it’s still disappointing news. Long term I will have to either get a rebuilt engine or move on to another car. In the short term I will live with this condition and I’ve been reading up on what to expect going forward from RX-8 Club owners’ forum and sites like RX-8 Help. This post is my summary notes to future self.

Poor compression degrades power output which in turn degrades fuel economy. Beyond that, it is expected to slowly degrade my car’s drivability until I reach limits of my tolerance for frustration. For example, what kicked off this investigation was the fact my car would occasionally stall instead of idle. This symptom will get worse. Increasing in frequency from “occasionally stall” to “frequently stall” and my patience will run out somewhere along that spectrum.

Low compression can also make “hot start” difficult: Unable to start an engine when it has already been warmed up and things are hot under the hood. Most commonly noticed at short stops such as when stopping off at a gas station. (… or when the engine stalls at idle…) I’ve noticed my starter motor cranking an extra second or two before the engine catches but so far it has always started. As compression degrades, it’ll take longer and longer until at some point it just won’t catch and I have to let the engine bay cool down before I can start the engine. Not a big deal if I’m sitting in a parking spot, but if I’m at a gas station I will have to push my car out of the way so other people can refuel. If this happens I will be highly motivated to act on one of my long term options.

Increased workload on the starter motor may burn it out. I could then replace it with a unit from a later “Series 2” RX-8 which runs faster. Since rotary engine compression improves with speed, a faster motor is more likely to start an engine suffering from bad compression. Some aftermarket starter motors can give me this effect as well. A faster starter is only a workaround that delays the inevitable, but it is an option if I want to spend a hundred bucks to postpone a far more expensive decision.

How long might I have before encountering such drivability issues? That is unfortunately murky. Poor compression means some of the air+fuel mixture, either before or after combustion, are escaping past one or more worn seals. The exact escape route will vary from engine to engine because every one wears out slightly differently. It is possible for certain escape routes to cause erosion that starts a destructive feedback cycle of engine wear. In which case my car’s gradual descent becomes a nosedive.

Speaking of escape routes: if some of that mixture leak past side seals, they would end up in engine oil. Such an increase in oil contamination will demand frequent oil changes in order to avoid triggering bad oil problems. I’ve done oil changes every 3k miles for as long as I’ve owned this car and this is one more reason not to slack off now.

And finally, the catalytic converter might get caught up in the aftermath. Even in a healthy engine, some small amount of fuel would escape unburned out the exhaust port. The catalytic converter exists to catch those molecules and convert the nastiest bits to less-bad compounds. But if unburned fuel is leaking past worn seals, the catalytic converter may receive more than it can safely handle and fail. Usually catalytic converter failure would illuminate my Check Engine light and the car would fail regular state-mandated emissions test. In the rare case, though, it is possible for an overloaded catalytic converter to catch on fire. At some level I admire a car that decides to go out in a blaze of glory, but that’s not the kind of excitement I want in my life.

For better or worse, none of these things demand immediate attention and I can still drive my car as-is for an unknown period of time. Which means I should get back to my project to-do list now that the replacement radiator has arrived.

Mazda RX-8 Compression Tested Low

I replaced battery terminals in my 2004 Mazda RX-8 because they were corroded and poor electrical continuity might have caused the occasional engine stall at idle. The new terminals look great, but my engine would still stall, so I investigated other possibilities listed in the workshop manual and found a likely explanation: my engine is very low on compression.

A compression test was one of the listed diagnostic items but not something I could do myself. While some auto part stores offer engine compression tester rental, they’re for piston engines. Rotary engines require a specialized testing tool. The service department of my nearest Mazda dealership doesn’t have theirs anymore so I searched for a local rotary engine specialist shop. I found Lucky 7 Racing offers rotary compression testing and took my car to their new City of Industry location.

A rotary engine tester measures pressure value for each chamber around the three-sided rotor and also engine RPM. The nature of a rotary engine means compression pressure rises with RPM. (Oversimplified explanation: centrifugal force flings apex seals outward against the housing, improving compression as it spins faster.) So the tester also normalize/compensate its readings to 250 RPM for comparison purposes. According to “Compression Inspection” section of Mazda’s workshop manual, standard compensated pressure is 830 kPa and minimum acceptable value is 680 kPa. For my engine, compensated pressure values for one rotor measured 581, 556, and 554 kPa which are well below minimum. The other rotor measured 393, 392, and 347 kPa which aren’t just below minimum, they’re less than half of standard pressure! My engine is in sorry shape.

Low compression is a common symptom of old engines as various parts wear down. For a piston engine, valves and piston rings are the usual suspects. For a rotary engine, their apex seals are usually the first things to go. Dropping below 680 kPa is cause for engine replacement under Mazda warranty but since the powertrain warranty has long since expired, this is now entirely my problem.

A new engine is not an option, Mazda production wound down years ago. A proper fix now means taking the engine apart to replace worn out bits. Lucky 7 Racing performs rotary engine rebuilds, but that is typically done for performance-focused customers who want to install more durable (and expensive) race parts to wring out maximum power. For a daily driver car like mine, its faster and easier to swap my engine core with another core that has been remanufactured at a dedicated facility. Either option will be significantly more expensive than the market value for a 2004 Mazda RX-8. In other words, it would cost more than I could possibly ever get back and makes no financial sense. Plenty of people are passionate enough about their rotary-engined cars to pour money into a hole, keeping shops like Lucky 7 busy. I will have to decide if I’m one of them. Until I make that decision, though, I will have to live with the problem.


Header image: “Rotary Man” sculpture sitting among parts and equipment at Lucky 7 Racing. His head (painted blue) is a rotor and his torso (painted white) is an eccentric shaft.

RX-8 Battery Terminal Replacement

After installing a backup camera for my 2004 Mazda RX-8, I wanted to look into an engine stall problem I’ve been having. As I approach a stop sign or red light and release the throttle pedal, engine speed will drop as expected. Usually it’ll settle at idle speed, but every once in a while the engine would drop all the way to zero RPM and I would have to restart the engine… which sometimes would stop again immediately unless I use a bit of throttle to keep it at a higher RPM.

According to the workshop manual, there are many potential explanations for this symptom. The cheapest and easiest thing to check is my battery connection. I guess the alternator doesn’t provide enough power at idle so the battery needs to pitch in?

Well, my battery terminals are pretty old. There have been several batteries throughout the car’s 20+ year life and a few of them have leaked battery acid to corrode these terminals. The plating is long gone, and some of the core metal has been eaten away as well. They are due for replacement whether they are causing this problem or not.

I first tried a set of “universal” terminals from AutoZone. I think they probably suffice from an electric continuity standpoint, but they are a little bit longer than the previous units.

For the positive terminal, they’re too long for the protective cover to close. For the negative terminal, the extra length pushed wires against the battery strap and I worry about abrading wire insulation. I don’t think these are going to work well long term.

Now that I have learned length can be an issue, I measured length of the old terminal and found these units on Amazon with the correct length. (*) I confirmed the length with a quick test fit, but the test fit found another problem: they are too loose to clamp tightly on my battery posts.

To solve this problem, I cut away the center red plastic tongue to give it more room to clamp down. I used the cut-off piece of plastic as nut washer/spacer so my socket wrench could grasp the hex nut for a properly tight fit.

Once installed, these terminals appear to give me the same fit as the earlier units. The negative terminal no longer pushes wires against the battery strap.

And now the positive terminal protective cover closes properly.

I’m happy I fixed this particular eyesore under the hood, but soon after this swap, my engine stalled again. Old corroded battery terminals weren’t the cause, so I need to continue working down the workshop manual’s checklist of potential causes.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

RX-8 Backup Camera Bracket

I’ve decided to retrofit a backup camera to my 2004 Mazda RX-8. After running the camera wire from the dashboard receiver into the trunk, I had to install the camera somewhere and plug into that wire. I decided to put the camera near my rear license plate, which meant I had to remove many old brittle plastic fasteners before I could remove my rear bumper cover. I was happy to find I didn’t need to drill any holes in either the body or the bumper cover. There’s a slot already in the bumper cover to accommodate a license plate light, and it’s much wider than it had to be. The metal body had several existing holes I could repurpose for my project. I removed an existing plastic-and-rubber plug to run my camera wire, followed by a dab of hot glue to plug it up so rain water does not enter.

That leaves the problem of exactly where to mount the camera. The bundle came with a license plate bracket that would mount it centered above the license plate, but that would block my license plate light and I doubt law enforcement would be happy about that. It also came with a small bracket and double-sided foam tape but I didn’t trust tape under SoCal summer sun. I had a metal frame around my license plate purely for aesthetics, so I drilled and tapped two M3 holes in the frame corner for the small bracket.

I was so focused on the camera that I didn’t notice what I had done until I took a step back and looked at the situation: the camera now obscures my license plate registration sticker, and that’s going to make local law enforcement even grumpier than if I had blocked the light.

I have a stack of small thin aluminum sheets waiting for a project, and I decided to fashion a mounting bracket from one of them. I don’t have real sheet metal cutters (it’s on my tool shopping list) but this aluminum is barely thicker than kitchen foil and easily cut with diagonal cutters.

A test fit looks good, tucking the camera into the existing slot adjacent to the license plate light so I don’t block the light.

Now the camera draws less attention and it doesn’t block my registration sticker either. Looks great, I’ll keep an eye to see how well it holds up long term. Onward to the next project.

RX-8 Navigation Upgrade Project Phase Two: Backup Camera

My 2004 Mazda RX-8 has a cracked radiator. While I wait for a replacement radiator to be shipped to me, I’ve applied some J-B Weld as a short term workaround. And since I already have tools scattered about my garage, I thought I would work on a few more RX-8 project to-do items. First on the list is I will resume my navigation screen upgrade project. I had removed the stock GPS navigation system LCD screen and replaced it with a standalone receiver for wireless Android Auto/CarPlay. My receiver came bundled with a backup camera, but I decided against tearing up too much of the car before I decided if I even like the receiver. So I paused after receiver installation to evaluate.

It’s been a few months and the inexpensive receiver has not been perfect. I have to manually adjust screen brightness between daylight and night time driving, but that’s only 3 taps and a mild annoyance I can live with. I’ve had the occasional audio stutter and data dropout, reminding me why wired connections are always more reliable than wireless. Sadly wired Android Auto/CarPlay have fallen out of favor with standalone receivers like these. I’ve also seen the thing crash and reboot itself, but not often enough for me to recognize any pattern to what might have trigger it.

Despite its imperfections, I have grown fond of having my phone automatically connect to my car every time I start it up. It’s nice to always have Google Maps on screen and access to my entire audio entertainment library stored on my phone. Given its low price ($60 as of this writing *) I can forgive a few hiccups here and there. It’s a keeper! I will now proceed to install that backup camera which had merely been gathering dust the past few months.

Accessing the stock factory navigation display hood is a lot easier the second time around. I now know enough to avoid completely disassembling the center console like I did the first time. For example, now that I know I only need to access two fasteners behind the factory audio head unit’s face plate, I only need to slide it out a few centimeters leaving all wire bundles connected. Much easier this way!

After plugging the camera cable into the receiver, I ran its wire down the left side of the center console. Under the ashtray and along the center of the car underneath all cupholders. I mostly followed the existing navigation computer wiring harness. Speaking of which, I took this opportunity to unplug all connectors from that outdated computer so it doesn’t consume power uselessly. I thought about removing it entirely but I didn’t want to leave a hole in the console between rear seats. The backup camera cable proceeded under the now-unplugged computer, behind the right rear passenger seat back, and into the trunk where it can meet up with the camera module. That takes care of the electrical wiring, now I need a camera mounting bracket.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Temporary Radiator Fix Using JB Weld

I noticed a coolant leak on my 2004 Mazda RX-8 and tracked it down to a cracked radiator housing. The good news is I think I caught this problem before it caused any serious problems, the bad news is that it’s hard to get parts for a low volume car that’s over 20 years old. I had no luck finding a (reasonably priced) replacement radiator locally, so I ordering one to be shipped to me.

What do I do in the meantime? I suppose I could continue driving the car, frequently topping off the coolant reservoir with water. I don’t think that’s a good way to go, though, because hot pressurized liquids have a history of making small cracks bigger. Possibly turning this radiator failure into an overheated engine failure. So I decided to try plugging the leak with some J-B Weld. I learned of this miraculous product from watching 24 Hours of LeMons video summaries, helping many teams get their car back out on the track.

This will be my first opportunity to use the product myself, and a great practice opportunity! Since I plan to replace the radiator soon, it won’t really matter how well the product works. But I will gain the experience of using it, and a short period of seeing it in action. For some guidance I enlisted my friend Emily Velasco who has J-B Weld experience and here’s what we did:

For surface prep, the surface around the crack was cleaned up and sanded down to give the epoxy a rougher surface to grip on to. The coolant level was drained below the height of the crack so it would quit weeping out which would interfere with epoxy adhesion. Once the area was clean, roughed, and dry, the first batch of J-B weld was mixed and applied.

For patch jobs like this, Emily recommends putting in something to help add structure to the blob of epoxy. A thin sheet of metal is common, and I remember seeing LeMons racers cutting up old license plates for this role. Unfortunately, we are dealing with a compound curve here so bending a sheet of metal to shape is difficult. As a workaround, our Home Depot run involved picking up a sheet of fiberglass cloth (Bondo 20128) along with J-B Weld. Emily recommended using the original formula and not the quick-cure type I saw in LeMons videos, because unlike them I am not in any pressure to get back out on the track.

A small square of fiberglass cloth was cut out and pushed into the still-soft first layer of J-B Weld. After the first layer had set (4-6 hours) but before it cured (15-24 hours) a second batch was mixed and applied on top. The result is not pretty, but it held well enough to stop further coolant leaks. The awkward position of the crack meant we got some J-B weld on adjacent components though I don’t think they’ll get in the way of future radiator replacement. I hope this old radiator’s brittle plastic doesn’t crack somewhere else while replacement radiator is still in shipping.

While I wait on arrival of that radiator, I decided to tackle other RX-8 projects on the to-do list starting with installing a backup camera.