Discover more from The Dan Catt Pen Plotting Newsletter
📙 #019 - Stealing your moves
Robots all the way down.
Everything is a day late, which I guess is better than the normal weeks or months late. Tuesday I had to stay home for family stuff, again, so the Tuesday video got pushed back to yesterday, and here we are now on Thursday doing this. Also, I spent a lot of yesterday getting distracted with this.
Long time followers of my work will know I've been playing around with "handwriting" on and off for a few years now, but over the last couple of weeks I decided to finally dive in a bit more.
There's was a lot of tedious hoops to jump through before I even got the point where I could create the text above, my aims were roughly.
The letters/glyphs need to be controlled by code.
They need to be a series of evenly spaced x,y points rather than curves (so I can explode, distort and otherwise screw around with them, which you can't do in their original curves and control points form).
More than one version of each letter/glyph and common joined up letters, i.e. 'tt', 'oo', ‘th’.
The code to create new variations on the fly based on blending and otherwise gently distorting the source letters.
Full real-joined up cursive.
So far I'm only up to step 3. Which has the unfortunate attribute of already being too much fun to play with compared to starting on 4 & 5.
The "proof of concept" was to write a script that would take some text and fit it onto sheet of paper, given some reasonable margins. Which is basically playing a game of 20 rounds of higher-or-lower; "Oh, the letter size is to big to fit everything into the space, make it smaller", "Now it's too small and we don't fill the space, go a bit bigger". It seems you only need to do that about 13 times to divide-and-conquer your way to the right value.
I now have a new rule of thumb metric...
4.8 words per cm²
...for a small-as-you-can-go-before-it's-illegible size (0.2mm nib)
If you have an A1 sheet of paper (59.4 x 84cm), with a 4cm margin all around, you have a space of 51.4 x 76cm to write in, which is an area of 3,906cm².
With 4.8 words per cm², we have 4.8 * 3,906 = 18,748 words.
Bonus: the AxiDraw writes at about 15 words per minute.
Short stories you can probably fit on an A1 sheet.
Story books, you're going to need some kind of shenanigans.
Anyway, to get back to yesterday, turns out that slinging around short stories, where each word is made up of letters, and each letter is made of strokes and each stroke is made of 100s of points, in code takes time. I was often waiting 5-10 minutes to fail, then attempting to fix it based on a hunch before waiting another 5-10 minutes to discover how I didn't quite get the fix right.
That's my excuse for this newsletter being late.
(I think the solution is to "proxy" words with rectangles while working on layouts and designs, then drill in with rectangles for letters, and only then, once I think the code can generate what I want throw in the actual points)
And yes, I can now get a robot to "handwrite" (with a fountain pen) text generated by AI, Kitty had this to say about setting up a gallery installation.
Thanks for reading The Dan Catt Pen Plotting Newsletter! Subscribe for free to receive new posts and support my work.
# Stealing your moves
Sometimes I have a little peek around inside code to see how "plottable" it is. Again, I don't really do curves, I do lots of small lines joined up with points to make my shapes.
In pen plotting world there are really just two commands; toggle pen, and move to x,y.
In p5js and html canvas objects these two commands moveTo(x, y), and lineTo(x, y) translate to "toggle pen up (if it's down) and move to x,y" and "toggle the pen down (if it's up) and move to x,y". So whenever you see those commands in code you know they'll work for pen plotter, with a bit of wrangling.
Diving into Landline Art’s original code, left, we can see a few moveTo and lineTo. The code on the right is where I've piggybacked onto those commands to shove the x,y co-ords, whatever they are, into an array. I have no idea what any of the original code is doing, but I know just enough to steal those moves.
The aim is to export those lines and points out into a file (text or json) as quickly and simply as possible. Once you have that, you can figure out what to do next (normally scaling it to paper size).
There's a strange little rabbit hole of ownership and authorship you can go down, but I promised myself I'd try and keep this newsletter short, and I've already failed.
I started this collection about a year ago, as a maximalist explosion of wanting to throw everything in and then pare it back, which is my usual strategy. I really wanted to have it over the top, but I was never quite happy with it, so I stripped it back and shelved it for a while.
But it's been bouncing around the back of my brain for months now so I decided it was time to pick it back up and amazingly a plan of attack has fallen into place already. I guess my subconscious has figured it all out which is better than forcing it.
It's falling into place to be an fxhash 2.0 project, probably on eth, with no (or very minimal) params, a seed at most if anything. I'll drop more details as we get closer, but it's nice when the timing of a project and a platform come together.
# Validation & Preservation
I'm pretty good at not needing external validation, or "needing a cookie" for doing things. But I do want to share this...
I've just finished putting all my fxhash projects onto my own website. I've updated the code for all the projects to bring it inline with where I'm at now. I've also put the all the code onto GitHub, and have versions running on my own site. AND, I generated high-rez images for every single one of them (jpg version, because hosting .png versions was gigs and gigs of files, you can still easily export a .png at any time though).
The thing is, no-one really cares (which is fine), and it was a huge effort which I didn't really need to do, and no-one else really seems to do. But, I've been around the block enough times to see link-rot happen and stuff that was around a couple of years ago vanish, so it was important to me to put everything somewhere I control.
I've still got to get the ArtBlocks, Foundation and Alba projects up there, but this seemed milestoney enough to mention.
Once that's done the aim is to keep it updated as I go along, rather than leaving it until there's a whole bunch to do. On the plus side I now have the tools in place to grab everything I need from a project & generate the high-res images & thumbnails with a couple button presses, which is delightful.
I think this was part of my "What if social media just goes away" thought process, and decided that at least I'd have this newsletter and website 😅
Anyway, it was a huge pain in the ass and took weeks to get done, so well done me!!
# Job hunting and the like
Just a quick note, and if you've made it this far, thank you!
This has come up a few times recently where I've had people say "Oh, we would have asked you to do such-and-such, but we assumed you were already too busy".
Because apparently I give off the air of someone who is a) busy and b) generally has their shit together. And I've missed out on a couple of fun sounding gigs and shows because of it.
So, yes, while I am a full-time artist, one of those full-time things is sometimes doing work with/for other people (upto but not over 20hrs per week), and I've just finished two projects back-to-back (secret project 2 and secret project 3, for those keeping track, not "Secret Project Ken" which is still ongoing), meaning I have availability coming up.
I realised that there no way anyone would know that unless I mentioned it 🙂
So in a networky way, if you know anyone that needs a pen plotting, Kitty, AI, nodejs backend, museum API, graphql wrangler then I'm currently free from the end of October to around April, maybe longer.
# The End
Right, that's long enough. The next couple of weeks is going to be full of experimenting and undoubtedly more handwriting. And I'll leave you with a riso print.
Love you all,