Skills

Programming with Grok — Updated

In Perl, a scalar is represented as $scalar, an array as @array, and a hash as %hash. In PHP all variables are represented as $var. In C or C++, you declare your variables, so int i; int array[25];. Java uses C like declarations.

JavaScript can’t make up its mind, so everything can be anything.

I also program in Python and other languages. The syntax gets me. In addition, each language has its set of libraries to do more complex things.

My fingers get confused. In addition, when programming in JavaScript, you need to know what framework you are using and what style sheets you are working with.

I decided to use Grok as a co-worker for coding.

We will be working in HTML and pure JavaScript or Typescript.

The server will be sending a <select> element with multiple sub-select options. The id will be categories. The entire select structure is for multiple selections. display=”none”

The framework is Bootstrap. We have jquery available but I would like to avoid using it.

We need to provide a multilevel drop-down that will allow the user to make selections within that large select element. We need to display their current selections. The user needs to be able to remove a selection.

Tell me the goals, and what needs to be done before providing code.

What Grok gave me was an excellent starting point. The HTML was clean. The JavaScript was well structured. The code matched my prompt.

And it was broken.

I explicitly stated that I was providing the input data as a hidden, multi-level, unordered list. Grok took that list and cloned it, including all the ids. This breaks things. There was no reason to do the clone. It just happened to be a pattern Grok had seen on the net.

For the next five hours I fought with the code. At first, Grok was able to do revisions exactly as I expected and wanted.

Then it went off the reservation.

I had refactored a large anonymous event listener to an explicitly defined function. Grok had no problems doing that. Then it proceeded to revert to the anonymous event listener again and again.

This is because anonymous event listeners are the norm in JavaScript. Nobody has an issue with attaching duplicate event listeners to a few hundred or thousand elements. Nobody cares that the code gets crowded, with it being difficult to see what is outside the scope of the listener and what isn’t.

Grok also had a horrible time sticking with the current version. I would tell it to correct one line, and it would decide I was talking about something else entirely and revert a revision or more.

Overall, it took me about 8 hours to get the JavaScript, CSS, and HTML to the point where I was happy with the code.

The biggest strength was in how it knew the different patterns. My first pass used dropdown menus. That wasn’t working. I switched to accordion style. Grok originally used Bootstrap-5, when I told it to use Bootstrap-4, it just made the changes.

One of the things that was extremely helpful was getting rapid confirmation that a feature didn’t exist.

When a feature does exist in a library or framework, it is often trivial to locate it. When it doesn’t exist, that is harder. Do you have the correct search terms? Does the function exist under a different name? Does that feature not exist, but there is a quick, well known, method that does the same thing?

Grok is a tool in the tool chest. I will continue to use it. It is getting better every month.

A Plan with Phases of Project Management on the board.

Project Management

In software development, project management comes in several phases. The first phase is presale, the second is scope and function, the third is product development, and the fifth is quality control.

Once we are past the design stage, it is important to track progress and issues. If you don’t, your project is likely to fail, horribly.

I’m dealing with a maintenance project with ongoing enhancements.

The tool I have settled on is Gitea, Git with a cup of tea. It is similar to GitHub.com, GitLab, and others. I don’t want a public hosting site where there is a potential for code leakage; this omitted GitHub and its competitors.

GitLab has a self-hosting option, but it is such a pig that even though I started with it, I dropped it when I couldn’t upgrade it as needed.

Gitea was the next, and it is working much better for me.

While there is a cloud version of Gitea, I don’t feel pushed into it. With GitLab, half the things I wanted to do required a license. Even when self-hosting, there were limits on the number of users, number of projects, and everything.

I’ve not noticed that with Gitea. In fact, it wasn’t until I wrote this last paragraph that I remembered that Gitea had a paid version.

Feature Requirements

  • Git repository. This is my version control system of choice. Having used everything from CDC’s “update,” SCCS, RCS, CVS, SVN and likely a few others, Git is the one that works for me.
  • A document repository. Gitea comes with a git based wiki. It is not as powerful as a full wiki and adding images to pages is painful, but for text, it just works.
  • Branch management, i.e. pull requests. Standard feature.
  • Project management. This is provided with a KanBan style interface. I use it for development.
  • Issue tracking.

Ticket System

I believe it was Admiral Grace that was having issues with a program on an early computer. It just wasn’t working. During the process of figuring out what was wrong, they did a hardware check. They located an insect that was causing electrical issues. They located a bug. That insect was framed, and the term “debugging” was coined.

Unfortunately, proper communication means we can’t call a bug a bug anymore. Nor can we call them errors or mistakes. Instead, everything is clumped together as an “issue”. Bah, Humbug.

Thus we have an “issue” system. This is really a ticket tracking system. I use the term ticket because it allows me to use the term “issue” for issues, bugs, enhancements, requests.

First Requirement

An issue should be well defined. The other day a client emailed us. It was a screenshot of a page of the product list page from the backend of their site. The client has drawn an angry spiral in red like a child coloring. His comment was, “This page is busted.” The account manager got this email, forwarded it to me with the following text “Thank you”.

This is a horrible issue statement. Ok, it’s broken. How is it broken? The screenshot doesn’t show any error messages; it looks like everything is right. So what is “busted” or “broken”.

It is the job of the person taking the error report, in this case the account manager, to create the ticket. To document the issue.

Actual ticket, after I started working on it: “The filter panel that is not functioning. All filters are ignored.” The actual problem was that a piece of JavaScript was failing if a filter selection was not made. This caused the filter button to not do anything.

The fix was about 4 minutes of coding and 40 minutes of explaining it to the account manager.

There should be a single issue per ticket, and the ticket title should be meaningful and properly identify the issue.

A Good Problem Description

Years ago I got a bug report from my boss; it was something to the effect of “such and such page is broken.” I went to the page and looked for the error. After about an hour I spotted the error. It was subtle but real, and it required significant effort to fix.

I pushed the fix reported that I had fixed the page to my boss.

About 30 minutes later, my very upset boss was at my desk telling me on no uncertain terms that the page was still broken and I hadn’t fixed a damn thing.

When I finally got him to calm down and to tell me exactly what was broken on the page, he pointed to the background of a button. “That’s the wrong color!”

It happened to be the color he approved, but it wasn’t the color he wanted in that spot, so the entire page was broken.

Make sure you have a good problem description.

Make Your Comments Meaningful and Useful

The way I explain it to people is that you are writing comments for yourself, six months from now. Yes, RIPLVB is very meaningful to you, right now, but RIPLVB on line 32627 isn’t really useful to you in six months nor to anybody else following behind.

(This was a real comment in a large piece of code, something like 60 thousand lines of code. It was the only comment. When the code broke, programmers spent way to much time trying to figure out the meaning of this incredibly important comment.

It stood for Rest in Peace, Ludwig van Beethoven, who died March 26, 1827, 3-26-27.)

If there are any supporting documents, screenshots, data files, log files, they should be attached to the comment.

If there are supporting documents, the comment should state what the document(s) are.

A comment of “See attached.” is a shit comment. It is your command to every person that follows you to open the attached document to figure out what it is.

“See the attached CSV for an example of the import format the client is looking for” tells you exactly what the document is for.It is meaning full.

Don’t Use Propritary Documents

If there is a common format, use it. Just because your system can magically open that particular file doesn’t mean that anybody else can. Yes, you have the latest version of Vizeo installed; putting a Vizeo document on the ticket shouldn’t be an issue. And it isn’t for you. But if your client doesn’t have Vizeo installed, or your coworker doesn’t, then that Vizeo Document is worthless.

Sure, you can attach the document, but also attach an SVG or other non-proprietary way of viewing the content of your file.

This one just pisses me off no end. The number of times I’ve had to deal with some PC user sending me a megabyte Word Document with a short paragraph in it when they could have sent a text message is uncountable. Or worse, every PC user assuming that every other person in the world has the latest version of Microsoft Excel.

Yet, I I send them a LibreOffice document, I will never hear the end of it.

Email is not a ticket system

Just because the client sends you an issue report in email doesn’t mean that email is a good ticketing system. I can’t count the number of times I’ve had to spend 10 or more minutes in a phone call tracking down the particular email my account manager wants to talk about. Often because he says things like, “Did you read the email client sent?”

Which one? When? What was the subject?

Worse is when the subject of the email chain changes, but they continue to use the same chain. Now there is a new issue in the middle of an email about a different subject.

In the same way, taking an email and attaching it to a ticket isn’t useful. This goes back to “Does everybody who has access to this ticket have the right program to read that attachment?” as well as violating the requirement of not needing to open an attachment to know what is in the attachment.

I Don’t need a meeting to read you the content of comments on the ticket

All good ticketing systems, including Gitea’s, send email when tickets are updated. Before you demand a meeting to discuss a ticket, check your email for updates on that ticket. Read the ticket. If the answers to your questions are in the ticket, there is no need for a call.

If you have questions that haven’t been answered, add them to the ticket.

No, you don’t need to call me to decide if you are going to add another issue. Add the issue. We’ll put it where it belongs or close it if it is a duplicate.

Use The Tool, Don’t Sabatauge It

Gitea ticket tracking system is a tool. You can subvert it and make it do bad things. You can make it useless. You can avoid using it forcing everyone else to use email.

Don’t! It is a powerful tool that should be used correctly.

vintage rocket takes flight with uncertain trajectory, concrete background. false start concept. 3d render.

To Mars or Crash!

A few years ago, NASA crashed a Mars probe into the surface of the red planet when they got their units mixed up. One group was using metric, and the other was using Freedom Units.

I would have laughed if it hadn’t been such an expensive mistake, both in terms of money and lost opportunity.

I’m a firm believer in Freedom Units. It is what I use regularly. My last big learning curve was going from 1/2 inch, 1/4 inch, 1/8 inch to 0.500, 0.250, 0.125, and 0.062, as in thousandths of an inch.

This small-scale metric stuff is for the birds.

Whenever I start to get a bit confused, I go 25.4 mm == 1 in. That’s close enough to 1/32 of an inch that I can use it for a working number.

The other number I use is 6 mm, which is around 1/4 inch. These are just to get some sort of feel for the numbers.

I just printed my second book for crimpers and terminals. It is 5 x 3 units and 6U tall. I found a Gridfinity bin to hold the crimpers I purchased. All’s good.

Except the bin doesn’t fit the pair I purchased. Slightly different.

So I went back to learning how to do this.

To help with just this task, I purchased a cutting mat with grid lines and other fancies on it. Here is the first photo I took.

It is in its blow-molded holder. This should give me the ability to trace the factory’s cutout/shadow box.

Once this is imported into FreeCAD, you rotate it until the grid is aligned properly, then you “calibrate” the image.

Calibrating means drawing a line between two points with known distance. In this case I have a bunch of 1cm squares. To average out my error, I clicked on one intersection, then counted over 70 mm by 10 mm and clicked. The image scaled. It is now ready to be traced.

I used a B-spline curve, which worked well. I’m getting the hang of it again, it having been 20 years since I used b-splines of this style.

When done, I simply cut the curve from a rectangle, padded the result to 3 mm, and printed it. This allows me to test fit the tool to the shadow without wasting lots of plastic and time.

It didn’t fit. It was too small.

I need to do it over again. This time I’m omitting the blow mold and working directly from the tool. I’ll draw a close-fitting curve, then pad it in X and Y by a mm or so.

This will work better; can you see why?

Yep, one side of the cutting map is in Freedom Units and the other in metric. My first photo was on the Freedom Unit side because it is less crowded. When I was counting out 70 mm, I was really counting out 3.5 in. If I had input 3.5 in into the calibration, it would have been fine.

Leason learned.

3d rendering the group various color of Polylactic Acid (PLA) filaments materials for 3d printing.

Organizational Things

I finished the first set of base plates for putting Gridfinity into the top desk drawer of the printer support platform.

It looks nice. It is a 15 inch by 14 7/8 inch drawer. The base plate printed in four sections. It could have been just put in the drawer and worked, but I put snaps on the edges.

Since then, I’ve been watching as things move from the desk next to the printer and into its own bin, often custom, in one of three Gridfinity drawers. The two custom printed drawers in the riser and the one desk drawer.

It is slower than I would like, but it keeps getting better. I think this is going to work.

The next base plate will be for the “Shelf of No Return”. This is the shelf where things from the dining table get cleared, never to be seen again.

The hope is that when we turn that into an organized space, there will be less inclination to just pile stuff there.

Prepping – Scenario: Vehicle Down Embankment

So one of the prepper groups I belong to on Facebook has been posting these. I thought I’d pass some along. I believe these are meant for law enforcement, hence the “pursuit” comment.

As a prepper, I would not be worried about some of the things LEOs would be concerned about. I look at this scenario and the only “weight” that I would bother to attempt pulling up a steep embankment is a living person. The vehicle and the dead can stay at the bottom of the ravine, if we’re in a SHTF event.

Pulleys make lifting things easier. There’s a system called a 4-in-1 that would work in this case, though we’d be doing a 3-in-1 as we only have 4 pulleys. Rather than spend 20 minutes typing it up, I’m going to share a video that shows you the details clearly.

detailed engineering drawing of a mechanical component, housing or mounting plate, various views and dimensions CAD design

Design Decisions

I have been doing computer modeling of some sort since around 1989. I’m not great at it; my task was generally making software that real modelers would use.

The software I worked on was BRL-CAD. BRL-CAD is a true solid modeling system. It is based on Combinatorial Solid Geometry (CSG). That is to say, you create solids and then use Boolean logic to get the shape you want.

What this means, in practical terms, is that you represent a sphere with a vector and a scalar. The first is the point in 3 space where the center of the sphere is located, and the other is the radius of the sphere.

The way we viewed the geometry was wireframe for modeling and then ray tracing for 3D rendering.

And we did astonishing things with this software. The visuals were often not the point of the model; often it was analysis of the model. For example, we had code that could be used to analyze the penetration mechanics of one solid impacting another solid, a target.

When we needed to move to the modern graphics processors, we needed a method of converting our solid models into triangles. We used non-manifold geometry instead of the industry standard of winged edges, thanks to some cutting edge research out of Australia.

That’s just backstory; sorry for the interruption.

Here is a case I’m designing for a Banana Pi BPI-M2 board that is running my NTP service.

This doesn’t have any of the cutouts required for the ports, but it is a good generic case. I’ll be adding design parameters for putting in posts for the board and other needed options for the case.

The basic design is parameterized. Which is to say, I have a spreadsheet that has values for width, length, height, shell thickness, and clearances.

The wedges for the snap fit are also derived from those values. It looks good.

Until I started to do the math.

I know what an inch is. I even have a good idea of what a 1/16th of an inch is. And because I’ve been playing with it, I know that 0.062 inches is close to 1/16th of an inch.

I have a feel for all of that.

What is a millimeter, though?

Well, that turns out to be 0.039 inches. Closer to 1/32nd than to 1/16. That’s small.

0.5 mm is 0.0196 inches. This is even smaller. While I strive to hit my tolerances within a few thousandths, and when I’m dialing something in, I’ll always get to a thousandth or less, those are small numbers.

And here is where I started to realize that I was making design mistakes. I had set my shell thickness to 1.5 mm with a clearance of 0.5 mm.

I got the 0.5 mm clearance from several sources talking about 3D printing snap-together cases. When I set the lip to be half the shell thickness, I got a 0.75 mm wide lip. That looked great. Then I remembered the clearance requirements and added allowance for that.

This meant that my lip was only 0.25 mm thick, or 0.0098 inches. That’s not a feature; that’s a burr.

In addition, the nozzle I’ll be using is 0.4 mm in diameter. The smallest feature I can print will be 0.4 mm or larger. I would have to use a different nozzle to get that level of detail.

The image you see above had the shell thickness set to 3 mm. I still want to do the lip, I’ll do a few test prints to dial it in.

There is this place where the mathematically perfect collides with physics, which collides with engineering, which is firmly entrenched in the real world.

The real world always wins.

CAD frustrations

One of the most powerful things about FreeCAD is that it is a fully scriptable CAD modeling system. This means you can write python scripts to do things.

They call them macros.

Which means they have plugins that do remarkable things. Just wonderful things.

The one I recently started using is the Gridfinity addon. Click the add button, and it will give you a bin. You can click some parameters to get exactly the shape you want.

If all you want is a bin, this works perfectly.

I want to make custom shadow cutouts in bins for some of my tools.

What I can’t do is select the face of the Bin and make direct modifications to it.

More learning to do.

For now, it is getting easier to get things done the way I want to.

Modern Bambu Lab 3D printers with a stack of colorful filament spools and printed

Choosing A 3D-Printer

The very first thing you need to do when choosing a printer is know what you want to print.

I can’t stress this enough. Sure you can go buy a $2000 11×17 color laser printer. But are you going to print 11×17? Do you need full photographic quality prints?

If what you are doing is printing your tax forms, then a simple $200-$300 black & white printer will do just fine.

The same is true for 3D printers. What do you want to print?

For me there was the “true” driving want, which wasn’t enough to justify a printer. I wanted to be able to print foundry patterns.

With enough research I found that organizational capabilities was high on my list of to-dos that has never gotten done.

To that end I picked MultiBoard as the ultimate pegboard and Gridfinity as my “flat surface” organizer.

Given these three drivers, I could start to list what I required in a printer.

I have tried printing foundry patterns in the past. It didn’t work. Today it should work better.

Most, if not all, of the MultiBoard and Gridfinity can be printed in the cheapest, easiest filament, PLA.

PLA requires a build plate that will support 55°C and a nozzle that supports 220°C. This is every printer out there.

If you need something a bit stronger, PETG is the go-to today. It requires a 70°C build plate and a 230 °C nozzle. Still well within the reach of most 3D printers.

Everything else requires more series printers. ABS, ASA, PA, and PC all require an enclosure. Without an enclosure, your prints will fail. The print will warp, and you will have issues with bed adhesion.

If you need to print something that will be exposed to the elements or that needs to be stronger, you need to go with one of the stronger plastics.

Which leads to the next class of filaments, those with additives. Carbon fiber and glass fiber are two of the common additives.

These fibers will eat your equipment. It will wear your PTFE tubes, but worse, it will eat your extruder and nozzle. You need hardened steel extruder driver gears and nozzle. You just have to plan on replacing the PTFE tubes as they wear. This should already be on your to-do list.

Some new printers come with multiple hotends so you can switch filaments while printing, quickly and easily.

For me, all of this took me to an 3D printer in an enclosure with a series build volume. The build volume I was looking for was 250x250x250 mm.

Because I knew I was going to be printing some CF or GF filament, I knew I wanted to upgrade my hotend to hardened steel.

Finally, I wanted to be able to change the nozzle without messing with cables, wires, or complex procedures.

After doing some back-of-the-envelope research, I started looking for a low cost printer that met my needs.

The printer names that popped up were Elegoo, Flashforge, Creality, and Bambu Lab.

I had never heard of Elegoo or Flashforge, but I had heard of both Creality and Bambu Lab.

The printer I was looking into was a Creality printer, but the Bambu Lab kept showing up with positive reviews. Their P1S met my needs except for the hardened nozzle, but that was an “easy” upgrade. The thing that was blocking me from pulling the trigger was that replacing the nozzle required changing out electronics. Something I did not want.

And then I stumbled on Bambu Lab P2S. This was released in late 2025. The reviews were all positive, but more than that, the reviewers were surprised at the types of improvements.

The P2S came with a hardened extruder and a hardened nozzle. They had also ditched the old hotend and gone with the hotend from one of their higher-end printers. They went with the H2D hotend.

This hotend has a quick replace system for the nozzle. You no longer need to replace electronics or mess with cables; you remove a silicon boot from the nozzle, release two spring clips with your fingers, remove the old nozzle, put the new nozzle in, close the clips, put the boot back on, tell the printer what nozzle you have installed.

I’ve done this twice. The first time took about 5 minutes, the second time about 30 seconds.

This left the ecosystem.

Bambu Lab is a closed ecosystem. They recently updated all their printers. With this update, 3rd party software tools lost the ability to control the printer. You could still move files to and from the printer, but you couldn’t initiate a print.

I had also read that Bambu Lab was using AI to evaluate the things being printed and would refuse to print some models from the cloud.

You could move the files by USB drive, but that gets painful.

They did have a LAN-only mode. That is what I am currently using. In LAN only mode you get full control of your printer. Your printer no longer talks to the Cloud. Your printer is yours.

It also turns out that the OrcaSlicer, which is a fork of the Bambu Studio slicer just works in LAN-only mode.

In addition, the price for the printer and the Automatic Material System (AMS) was less that the Creality printer I was looking for.

Conclusions

Am I happy with my purchase? Yes.

Is there anything I regret? Yes, I didn’t get enough filament out of the gate. I’ve gone through about 10 pounds of filament so far, and I’m not slowing down.

I don’t like finding out that I need a seperate dryer. And the amount of effort it takes to get dry filament.

I don’t like that I can’t directly move files from the Bambu Cloud to my printer; I have to move it through OrcaSlicer.

Would I do it again? Yes. Would I get a different printer? No.

My printer has been printing nearly non-stop since I got it. There were a couple of days when it was busy drying filament and not printing.

They offer the A1 combo at $399. That is the A1 and the AMS light. The AMS light handles four spools and you can have upto four AMS connected to your printer.

They also have the A1-Mini which comes in at $219 but only has a 180x180x180 build volume.

Please remember that I’m a Unix/Linux geek with to much experience in too many fields. What works for me might not work for you. Do your own research, but remember the first rule, have a reason you are going to spend some money. If you aren’t sure, look for a used A1 or A1-Mini or the most popular 3D printer, the Creality Ender 3.

Modern Bambu Lab 3D printers with a stack of colorful filament spools and printed

It Is About the Process

I went with a Bambu Lab P2S printer. It is an enclosed printer; it has excellent support and ecosystem. And it has strong vertical integration.

In order to 3D print something, you need the printer, a build plate, filament, a model, and a slicer.

The build plate is a surface that the filament will adhere to when you want it to and release your printed part when you want it to release.

Filament is a thermoset plastic. I.e., a plastic that melts when heated and can be reshaped and then will hold that new shape after it cools.

The model is a digital 3D solid. It is normally generated with a CAD package.

The slicer take the 3D solid and slices it into layers, then creates a sequence of g-code instructions to recreate that solid in plastic.

The First Print

To start with, I purchased filament from Bambu Lab to use on my printer. Their filament spools come with RFID tags. When you put the spool in the AMS, it will read the RFID, which tells the AMS what type of filament it is and what color. It also says it is Bambu Lab filament, but nobody else has permission (cryptographic) to create RFID tags that the printer/AMS will read.

I selected a useful “print” from the prints that are preloaded in the printer. Then I pressed “go”.
It printed exactly what I wanted, and it has been in use ever since.

The Second Print

It is nice to have models preloaded to print, but that would get boring rapidly. The next step was to use their phone app to print something.

This consisted of starting their app, pointing my phone camera at a QR code on a box. That QR took me to a model in the Bambu Lab cloud. I clicked the print button and a short time later I had a 3D version of that print.

There were more things I printed this way, but it was time to move up.

The slicer

The approved software is Bambu Studio. Which is an Apple or Windows program, no Linux version. I choose to go with OrcaSlicer because it is well respected and integrates nicely with Bambu Lab printers.

Using the slicer, I was able to download models from other sites, outside of the Bambu Lab cloud, slice them, and then send them to the printer. I could then use the Bambu App to start the print, or print directly from the printer control panel.

Over time, I’ve moved away from the Bambu Lab Cloud. I’m doing everything locally now. I still use their cloud to find models ready to print, but that is only because it is easy. I can use their phone app, search for a model, tag it, then download and print it later.

ReMix

My first major print was a riser for the AMS. This was printed in four large parts and a set of TPU gaskets. Yes, I can print custom gaskets.

The riser holds two drawers. I printed those drawers with a Gridfinity base.

All is good so far. I then print a deburring tool Gridfinity bin. It should fit perfectly. It does, except it is too tall. I can’t close the drawer.

This lead to me doing my first remix. I pulled the STL into FreeCAD, then created a sold cube the right size. Intersected the two solids and ended up with a shortened version.

This worked. My deburring tool now fits perfectly in my Gridfinity drawer.

This type of remix is simple. More complex remixes take more time. I’m not good at it yet because it requires me to create a solid from an STL or STEP file.

My First Model

I wanted a Gridfinity box to hold my ultra-precision torque screwdriver. I did all the right things, except I did a shit job of my B-splines. I also took a bad picture. I was too close, so lines that should have been straight were not.

Regardless, I printed it. What came out fit the Gridfinity base. The bin was short enough that the drawer would close.

The issue? The finger holes to lift the tool out were way too small. I’ve learned that I need between 20 mm and 30 mm to bake it easy to grip.

I have a second attempt ready to go, but I haven’t printed it yet. It was cool to see. It is a disappointment for it to not work.

My Latest Model

To control the path of filament, 3D printers use lots of PTFE tubing. This is 4 mm OD and about 2 mm ID pneumatic tubing. These fit into PTFE couplers. One of the coupler/connectors I’m using is a PC4-M10. This has a push connector on one side and is threaded M10 on the other.

I’m using a printed replacement cap for a cereal container. A 4L cereal container will hold a 1 KG spool on rollers with space for a hygrometer and desiccant. With a hole in the container, you can feed your filament out and directly to your printer without ever exposing your filament to the moisture in the air.

One method is to drill a 10 mm hole in the side of the container and use a PC4-M10 screwed into the side. A better method is to put a M10 flanged nut on the backside.

I would rather not drill holes, so I went with the replacement cap with a socket for the PC4-M10.

The model prints the cap, a sealing plug, a threaded and knurled screw-on cap. The cap proper has an inset threaded boss for the knurled cap to screw onto to seal the container.

That boss holds a PC4-M10. The model also contains a printed nut for the PC5-M10. Now here is my issue: the person that printed this seems to have found PC4-M10 with M10x1.5 threads. The PC4-M10 I have is measured with M10x1.0 threads.

I went into FreeCAD, I created a solid with a flange, 17mm hex nut, and a proper M10x1.0 threaded hole.

And it worked. Those nuts are now in use.

I am that much closer to being able to print my patterns for castings.

3d rendering the group various color of Polylactic Acid (PLA) filaments materials for 3d printing.

Chicken or Egg?

It has been a learning week for me. I’ve actually gotten to the point where I’m printing things for me rather than for the printer and the printing process.

Every part of the process is so much better than it was the last time I was attempting 3D prints. I have one confirmed model that is a failure. I’ll work with the least failed print to get the tool I need.

The two biggest issues in 3D printing today are bed adhesion and bad filament. Now bad filament isn’t always bad, sometimes it is just that it has absorbed too much water from the air.

There is a relatively simple fix for that: dry your filament.

My printer came with an AMS (automatic material system). It consists of a chamber that holds four spools of filament; each spool has its extruder/feeder. The printer controls the AMS. When the printer wants a particular filament, it unloads the current filament, then it tells the feed motor to push the filament down a sequence of PTFE tubes and Y connectors until the filament is at the extruder proper.

The printer then pushes out the old plastic from the hot end with the new filament, leaving the nozzle loaded with the new filament. It is cool to watch.

The AMS is designed for four small packages of silica desiccant. One of the first things I printed was a set of boxes to hold more desiccant. The AMS now has about between 10 and 20 times as much desiccant as it started with.

The AMS is sealed, has circulating fans and a heater. This means it can be used to dry filament as well as feed it.

There is one small issue: you can’t print while it is drying. You have to have a separate power supply for the AMS to dry while printing.

Which takes me to my “quick” fix, a SunLu S1 Plus filament dryer. This holds one spool of filament, it can run at up to 55°C, and it does a good job of PLA, PETG, and one or two other filaments.

Using it I have been able to rescue some 10 year old PLA that was stored open. It has all just printed, after it was dryed.

Now the fix to this temperature issue is to use a “blast oven”. A blast oven means an oven that can maintain a constant temperature for an extended period of time while air is forced around the filament.

I don’t have a blast oven. What I do have is a printer that can maintain a constant temperature but doesn’t have a fan.

The manufacturer recommends printing a cover in Polycarbonate (PC). But PC is extremely hygroscopic. Straight from the package, it has to be dried at 90°C. Which my SunLU can’t do.

If I had a PC drying cover, I could dry the PC in the printer. All I need is some dry PC but what I have is wet PC.

And this issue exists for every filament I have. So I’m doing a bootstrap.

I did a printer bed drying of some ASA. This took around 12 hours. I used a cardboard box, as recommended. To make a fake cover.

With the ASA dry enough to print, I’m printing a blast oven. This is a two part filament dryer that uses the printer bed for the heat source and a carefully designed drying chamber with forced air.

Now all I have to do is hope that part two prints successfully tonight.