It came down to a simple fact that I was not at all happy with BoxMaker, or the alternatives. Boxmaker had lots of features, but also some bugs; it’s source code was difficult to read and modify, it produced asymmetric box designs ---- including corner pieces that would sometimes be disconnected from the main shape ---- and it had no automated tests. The last part made it difficult to think about contributing fixes.

To top it off it was written in Java, which was the right choice back in 2001.. but we are not there anymore. I think.

So I embarked on writing my own, and as of a few weeks ago, the beast is now feature complete, as far as basic box making is concerned. It’s written in pure ruby with the Prawn library, it has a beautiful command line interface, it’s box cut out designs are handsomly symmetric, and all of my recent boxes have been made using it. And yet, there is so much more that I want to do more with it in the future.

To the coders reading this, I will shamefully admit that the current incarnation of this library (version 1.0.3) contains a number of hacks, and there is a consistent lack of clean intentional software design. I’ve sort of taken a brute force approach in a couple o places, and consequently been awarded a pretty low Code Clime score. (Although who are they to judge! Some computers, dammit :P) But on the bright side, I am planning a refactor before I do more with it. The algorithmic part of this ended up being a bit tricky (surprise!), but the kinks are ironed out and the tests are there to prove it.

Wait, you said "tests"? WTF! Yes tests. We, in the ruby world, can’t take a shit without writing a test for it. Ruby is a dynamic language and makes test writing both fun and necessary. With tests, someone else can come and contribute to my library, because of the confidence tests provide that they won’t break anything. Well, nearly anything. Not everything is as well tested as it should be, and I’ll slap my own wrists sometime before bed. But some tests are infinitely better than none :)

Tab (aka "notch") Geometry One of the key components of laser cut boxes is the tabs that make two sides snap into each other, by using alternative in/out tabs on each side. The width of this tab has a lot to do with the way the box will ultimately look. The default is to use 3 x material thickness, but feel free to experiment with other values. Note that notch width input field is treated as a guideline, and not a promised value.