The open source community has produced a number of serviceable tools for two-dimensional design. These include GIMP for bitmap graphics and photo editing, Inkscape for vector art, and Scribus for page layout. On the 3D side, Blender, Wings 3D, Art of Illusion, and a few others have served the needs of those doing surface and subdivision modeling. And while lots of good work has been done using those tools, I haven’t found surface and subdivision modelers very useful for industrial design work, except for occasional rapid ideation or visualization. FreeCAD is different in that it’s a parametric modeling tool, which has a history of effective use in ID.Continue reading “FreeCAD for Industrial Design”
Timestamps for KiCad footprints
I’m bulk editing a bunch of KiCad footprints (a.k.a. modules) in a text editor. Said footprints have a
tedit field, which turns out is a hex-coded timestamp. This means to properly edit a KiCad footprint in a text editor, you should update that field when you save it.
A one-liner for producing a hex-coded timestamp in Linux bash is:
printf "%X\n" $(date +%s)
It happens sooner or later to all consulting designers: your client decides not to use your work or — if it’s what they hired you for — take your advice.
In a previous installment, we took a dive into the
this variable and how it behaves in different ES5 situations. In this installment, we’ll do the same but for so-called arrow functions, introduced in ES6.
So far we’ve learned what the relationship is between an object and its constructor’s
prototype and what happens when we change properties set on the
__proto__ property, which is also the constructor’s
undefined. But that’s not what happens.
JS prototypes and property values
Designing out designers?
this variable can be a little challenging. A wonderfully concise summary on the issue is found in chuckj’s answer to a StackOverflow question (modified here to account for differences between ECMAScript 5’s strict and non-strict modes):
thiscan be thought of as an additional parameter to the function that is bound at the call site. If the function is not called as a method then the global object (non-strict mode) or
undefined(strict mode) is passed as