Contact, archive, etc
Reprap blog 2020

This Blog Has Moved To


I'm entering a new period of full-time independent open source work. I figured that I will need a nice place to publish stuff.

So, I've given my blog some love and moved it to a prettier domain =)=)=). I have made it easier to maintain, and also added some rudimentary analytics. (Publicly viewable, see The new page replaces the good old list of links with more obvious and touch screen friendly navigation.

This is the last post to be published on the old domain,

Ehem. A Few Final Words

It's the end of a little mini-era. The blog started out in Jan 2014, as a hand-coded html document with 50 lines of hand-coded css. It wasn't even version controlled. A friend said "I can host your page", so we uploaded the html, the css, and the images to his server via command-line ftp. And it appeared on the web within 1 min, it was a bit magic to me.

My mentality at the time was "keep everything extremely simple, and thresholds extremely low, and feel no prestige ever". So I kept the ftp deployment strategy, uploading each html and each image individually via command line. I also kept the long url, added no javascript, no analytics, no comments sections or anything. There was no platform around it, no ads, almost no readers.

The extreme simplicity and low threshold worked. It got my productivity from 0 to something. I wrote simple posts about simple things.

Web programming is very time consuming. The very simple web site took me 10 full working days to massage into its current shape. While my old ftp-based hand-coded system was clunky, it has also "just worked" for 6 years straight. Thanks sluggo setting it up and for hosting it. I hope the new page will be as simple and robust as what you set up for me in 15 minutes in 2014 :)

- tobben

Becoming a Type 3 Worker


I've been thinking about what I want to make this year. I've quit my job because I wanted to work on Hangprinter. No real plan. So now what?

I think I will be heading where most of us will be heading. I think work is changing.

History of Worker Types

Type 0

Let's skip hunter/gatherers. Let self-sufficient farmers be our basline type 0 workers. They spent most of their time producing food at home.

Mrs. Bissie and family in 1909. Image source

Type 1

A few generations ago, work moved from farms into factories or factory-like workplaces. They had two pre-defined economical roles built-in, with often conflicting interests, packed tightly together: Workers and owners.

Theres was some power struggle between them. Company employment structures were invented to regulate work relations, like families had done for type 0 workers.

Type 1 workers got paid for working hours, so that they could buy stuff during non-work hours. They became type 1 worker/consumers.

Work and consumption got separate physical spaces: Work places, and consumption places. Work and consumption also got separate time slots: 9-5 work, and 5-9 consumption.

This was the happy, but unsustainable equilibrium state worker/consumer type 1: Producing objects at work, buying objects at home, more and more, better and better.

Type 2

As factories moved abroad, work moved into office buildings. These produced no physical output.

There was no new power struggle. Rather, there was a great consensus: Every single aspect of type 2 economic everyday life should mimic the type 1 system as closely as possible. Still more and more, better and better, only not objects.

Workers got employed by companies. They were paid for being in offices, 9-5. They consumed 5-9. The worker and consumers roles were kept distinct.

Words had to change meaning, to make type 1 and type 2 systems fit together. Words like "work", "consumption", and "employment" were all generalized.

Work became "service". Consumption became "spending money". Employer became "shoehorn for legal formalities".

Image by: Dietmar Rabich, Image source, CC BY-SA 4.0

A common way to get "employed" was to create a 1-person company, and simply hire onself. Most type 2 work was about feeding computers anyways. It not fit very well into the type 1 system.

Some workers eventually stopped showing up at office. Instead, they fed computers while travelling. They called themselves "digital nomads". They were a hint about what was to come.

Early Type 3

Work soon moved out of offices and onto the Internet. The Internet was not factory-like or office-like at all. The consensus about mimicing the type 1 system broke down. There went 9-5/5-9 time slots, specific work buildings, and employers. Even monthly salaries went away.

Type 3 workers didn't apply for their Internet work. They just created content, uploaded to Internet platforms, and waited for users. No formalities.

Getting paid was more complicated and unpredictible. Rules and platforms were changing. Time, size, and even currency of payouts were in flux.

Late Type 3

So here we are, in a new era with less old structure, and with new built-in economic roles: Platforms, creators, and users. There is also new finite resource, to spend and earn: Attention.

The meaning of the word "work" is moving towards "whatever someone pays attention to you doing". Attention now has a fairly predictible exchange rate into hard digital cash, via ads and donations.

Like in the type 1 era, I think we will see power struggles. Platforms control the attention and write the contracts, without negotiations. For content creators it's like type 1 work before unions.

Creators need to bond together, and gain the power to refuse bad deals. Together with users and platforms, they can create fair Internet rules. This will make platforms better.

My Work

I'm optimistic that platform work will be well regulated. The platforms are few and exposed. Creators and users are many and resourceful. If platforms misbehave too badly, users and creator unions can even make their own.

I've started to think that a type 3 system that works well would be great. It would nurture the best creators, worldwide and on equal terms. It would give us more and more, better and better entertainment, science, inventions, ideas, thoughts.

Maybe creators would get paid enough to become first class type 3 consumers, just like type 1 workers became type 1 consumers. Maybe, just maybe, our thoughts, packaged up like content, will get good enough to solve some of the problems we have in the world today.

I think I will stop avoiding platforms. I'm not as scared of them anymore, even if they suck sometimes. I just have to learn how to use them.

My new goal is to just keep publishing. Mostly RepRap. My new value proposition: Giving me money is like watering a flower.

By The Way

I've found a platform called Brave. It's a browser that reroutes ad- and content-based revenue streams toward themselves, creators, and users. It aggressively modifies websites before they're displayed, and has banking built-in. It might turn out to suck, like other platforms do, but it might also become what we need to turn attention into creator income via less ads.

It has a list over content owners, and it wants to cover basically all content. I've registered as the owner of my content, so you can now support me for example like this:

Late type 3 work. You can barely see the human in there anymore. It sits behind the contribution buttons saying "thank you".

Also, if you get Brave Browser via, then this link, then I'll get a small kickback. So, hint hint, and thank you for reading.

- tobben

Introducing Line Collision Detector


I got asked again recently, about the Hangprinter print volume. How big is it, and what shape is it?

A line collision. We don't want this.

A Print Volume?

All 3D printers I know, except Hangprinter, have a print volume: A volume within which we can print freely, and outside which we can't print at all. A print volume has a shape and a size that doesn't change.

The print volume is used to determine if an object is too big for a particular 3D printer. If the object doesn't fit in the printers print volume, then it is too big. Otherwise, it's not too big.

The Short Answer

How big is it? What shape is it? Sorry, can't answer that. A Hangprinter doesn't have a well defined print volume.

I sometimes lie a bit and say "it's a big trumpet shaped print volume". That mostly gives a good enough intuition about what's printable with Hangprinter. And it saves me from having to formulate the long answer.

The Long Answer

Let's first restrict ourselves to objects that are printed layer by layer. Then, for any particular Hangprinter, assume that we could deduce a max object: An object that has a larger size than any other object that is printable with that Hangprinter. Let's call the volume enclosed by the max object the max volume. It would have the max size and the max shape.

The max shape would probably look vaugely similar to a slightly triangluar trumpet. Finding it would be nice, and useful. The max size would roughly capture the size of the entire Hangprinter in one number. As with a print volume, we could for sure print freely within the max volume.

However, Hangprinter would not be restricted to only ever print within the max volume, so the max volume would not be the print volume we're looking for. We'll explain this weird fact, but let's focus on two related, more practical questions first.

The Reachable Volume

A hypothetical weightless Hangprinter effector would be able to reach any position within the tetrahedron spanned up by its four anchors. Let's call this the enclosing volume.

Adding mass to the effector changes things slightly. Firstly, the machine then gains the ability to toss the effector out of this tetrahedonal envelope, so the volume is not an enclosing one anymore. Secondly, the machine looses the ability to keep the effector still near any of the tetrahedrons three upper faces. Mass will sag inwards towards the origin, no matter the stiffness of the lines or torque of the motors.

Since Hangprinter can't print out an enclosing volume shaped object, the enclosing volume is not the print volume.

Adding a sag to the enclosing volume gives us the reachable volume: The volume within which it's possible for the Hangprinter to position its effector and make it stay put. It would looks like this:

Exactly how much sag to expect can be calculated from the weight of the effector and the maximum static force of the motors. Fred Hedenberg made this nice rendering when investigating error due to line flex. Error due to limited motor power will have the same basic shape.

Can We Print That?

We can't actually reach our whole reachable volume in a controlled way yet, since we don't have flex compensation in the firmware. But even ignoring flex, we still wouldn't have been able to print out an object with the shape and size of the reachable volume.

The problem is, ABC lines point downwards, so they can collide with the half-finished print. All previously extruded material is potentially an obstacle for every following move. Every possible half-finished print state shadows out part of the reachable volume in its own unique way.

Consider the following render for some intuition about line collisions:

The Hangprinter's effector is attached to the ground with six different lines. For each layer, each line will move within a "cone shape" (red). The top of each cone shape is a convex hull of the current top layer. Line collisions are marked in yellow.

Coming back to the max volume, we can now imagine how it's possible to print outside of it. We could add a wart on the max object and for every layer, make a render like the above. Then we could simply remove any part of the old max shape that turned yellow, in order to make the wart fully printable. Then if the wart turns yellow when any of the later layers are printed, we'll reshape those layers (by creating an inverted wart on the appropriate place) until all line collisions are avoided.

That procedure would give us a large printable object that is not contained by the max volume. Hence we learn that different printable objects might take up different, mutually exclusive parts of the reachable volume.

Ok, so the print volume doesn't exist, because of line collisions. Let's then revert to talking about printable versus non-printable objects. No more print volume, only reachable volume and printable/non-printable objects.

What Can We Print Then?

For every object that we want to print, we must perform a separate analysis to check whether a line collision would occur. The result of the analysis, depends on a lot of things, like:

Lots of stuff to think about, and for every single print. Sounds like we're in trouble?

The Solution

As complicated as the analysis sounds, it shouldn't have to be more than a small addition to the wealth of analyses that common slicer software already does for us before every single print. We as users should get a warning if a potential line collision is detected. The rest of the time, we shouldn't have to think about line collisions at all.

Detecting line collisions isn't entirely trivial, but I'm happy to tell you that it's already done =D It's not baked into any slicer yet, but I've written a free-standing program who does the analysis separately. Let me present line-collision-detector.

The most basic usage of line-collision-detector. A collision is detected. The big-benchy.stl contains a 16.4x scaled up benchy. The params file contains positions of anchor points and effector pivot points. See the params-example file in the repo for information about the params file.
Here, a non-scaled 3DBenchy is analyzed, and since it's so small, no collision is detected. The -l option is used to tell line-collision-detector to use a layer height of max 3 mm. A bigger l-value lets the program terminate faster because there are fewer layers to analyze.
I recommend viewing this in fullscreen. Here, the -o option is used to create a debug model, which is inspected with Blender. We can confirm that the effector is at a sensible position, and that there really is a line collision occuring at z=393.6.

For details about how to build and develop line-collision-detector, I refer to the readme in the line-collision-detector repo and the readme in the linc subrepo. For details on how to use the program, I recommend typing run --help on the command line.

This post is already quite long, so I realize I should save the details of the line-collision-detector algorithm for another blog post.

Anyways, I hope you find this new tool useful! And well, I now kind of have a better short answer to "how big is the build volume?": Ca one 15.675x scale 3DBenchy =D

- tobben


Hangprinter Campaign: Bountysource Salt

Hangprinter Merchandise USA:

Hangprinter Merchandise Sweden:

Hangprinter Project: [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], [32], [33], [34], [35], [36], [37], [38], [39], [40], [41], [42], [43], [44], [45], [46], [47], [48], [49], [50], [51], [52], [53], [54], [55], [56], [57], [58], [59], [60], [61], [62], [63], [64]

Hangprinter Project Homepage:

Print Issue Solution Filter Project: [1], [2], [3], [4]

Sourcing RepRappro Mendel in Larvik: [1], [2], [3], [4], [5], [6], [7]

Archive: 2014, 2015, 2016, 2017, 2018, 2020

Github Profile: link

Gitlab Profile: link

Hangprinter project on Gitlab: link

Vimeo User: link

Youtube User: link

Twitter User: link

Master's Thesis: link

Linkedin Profile: link

Appropedia User: link

RepRap Forums User: link

Forums threads: Hangprinter version 1, Hangprinter version 2, Hangprinter version 3, List of Hangprinter threads

Source for this blog: Gitlab repo

Everything on this homepage, except the videos, is licenced under the Gnu Free Documentation Licence. The videos published via Vimeo or Youtube are also licenced via Vimeo or Youtube.