Chicken portrait relief

I’ve been working for a while to design a relief from a photo of one of our chickens. Over the break, I managed to get the first modest success! Not done yet, but happy with making progress towards a vision.

Chicken portrait CNC relief rough cut in wood
Chicken portrait

The process is a mix of analog and digital. Starting from a photo, using Affinity Designer, I manually created a depth map: first I traced hard edges as a vector layer, wrote down rough heights at various points on a paper, then roughing out a strongly quantized depth image in Affinity Designer, and finally adding some finishing filters to blend the layers together. Here’s the original photo:


CNC dovetails, part 2

After several failed attempts, I finally managed to get a complete run of the dovetail program on the CNC. While Camotics and the stable version of Universal-G-Code-Sender both choked due to the large size of the GCode program, a nightly build of Universal-G-Code-Sender was able to cut it.

Here’s how it came out after the program completed:

The CNC didn't quite get all the way through the board

The CNC didn’t quite get all the way through the board, due to some basic operation mistakes on my part. It also took somewhere in the area of 5 hours to cut — way too long. Some optimization in the cutting paths would be a clear win.

Red oak board being routed in the CNC

I was happy to see the stair-stepping on the pin board seems to have worked alright. Now that I see the result, I’m interested to see how the finish might come out moving the two axes together, to get a line segment instead of stair stepping.

Pin board in vice

After the CNC finished, I used a chisel and small saw to chop out the main pieces from the frame.


I accidentally broke off two out of six of the dovetails, when I chiseled in the wrong order. The correct way, I found, is to first chisel the angle at the cross-grain, and second with the grain. Chiseling with the grain first resulted in the detached dovetails. (edit: the real correct solution, of course, is to orient the grain the other way, so it extends out with the dovetail, which is so obvious now in hindsight!)

Testing the fit of tail and pins

After I broke the dovetails off, I wasn’t motivated to keep working to get a perfect fit. I tested the fit here between the dovetail and pin slot on which I got furthest. Still needs more work, but at this point I’ve learned a lot of lessons and got what I want out of the project. I’ll try cutting again in the future and hopefully won’t repeat my mistakes.

CNC Dovetails

I’ve been hacking on a heightmap to Gcode generator, and thought for fun I’d try to put it through the paces of cutting out pieces for a dovetail jointed box. The SVG is generated via DOM manipulation in JavaScript, and the Gcode generator is in C# (Mono) just as a refresher, since I haven’t used .NET in a while.

Heightmap generated with SVG:
Heightmap for dovetail jointed box sides

Converted to Gcode, and rendered in CAMotics:


Unfortunately my GRBL controller seems to not be responding properly. It somewhat works in Carbide Motion, but can’t run the program for these, and responds with gibberish on connect instead of the usual Grbl version information as prompt. I think a reflash might be in order.

Graph Party!

The web has changed the way people interact in a profound way. Here are some ideas for web apps, which focus on interfaces for data management and metadata creation.

The great news is that many multimedia functions are now standardized to the point where they work almost anywhere.

While images have long been shareable in a standard format, video and audio have now almost reached a similar point. Most of the major browsers have support for h264 and mp3 in their most recent versions.

This is empowering in many ways. The ability to apply commentary not only to media objects themselves, but to subdivisions of them in space-time is great. Link content to a particular region of a photo, or a specific time range in an audio recording, and the way is opened for more refined research.

The modern state of the web enables better networking than heretofore available, in a more universally accessible medium. The possibilities opened by the ease of writing networked apps with persistent storage and active updates are full of promise.

The figures shown were made using the Paper app for the iPad. It is very pleasant to diagram concepts with.


Figure 1. A geographic view useful for pinpointing specific locations, such as the site of a photograph recorded with GPS. Other content may have no geographic coordinate, but references to it imply a ‘floating’ location.


Figure 2. A grid-and-pin system provides an elegant and readable media index. Pinning an item preserves its location and scale in the grid, while the other items swap into view based on search directives.


Figure 3. Masking regions in a zoomable image interface extends to multiple users in realtime. Avatars provide communicative information about intent and activity.


Figure 4. A graph network in which items are sized based on a cluster identifier, such as a hashtag. Relations between two clusters allows traversing through large datasets while keeping performance manageable for clients.


Figure 5. Users watch the same video concurrently, but not necessarily synchronized to each other. A text-chat like interface enables leaving notes containing not just the content of the text, but the point in the video at which the text began to be entered, the author, and the date stamp of when the entry took place.

Simple Python Platforming

Had a chance to nerd some this weekend, building on some code I’ve had sitting around for a second. It’s been a while.

The result looks like:

I don’t intend to take this much further; rather, I endeavored to keep the code simple and small, so that it could be taken in multiple directions quickly. Made using the usual suspects: ODE, SDL (pygame), and OpenGL.