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)

JavaScript’s prototypal inheritance

In this final part of our series on JavaScript prototypes, we’re going to discuss using them to implement inheritance as it’s typically thought of in classical object-oriented design. Having said that, I once again suggest that you try to put aside what you may already know about how objects and inheritance work in other languages and treat the way JavaScript works as its OwnThing.

So, let’s get on with it.

Continue reading “JavaScript’s prototypal inheritance”

JavaScript and ‘this’, arrow function edition

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.

Continue reading “JavaScript and ‘this’, arrow function edition”

The JavaScript prototype chain

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 prototype. In particular, we learned that if you try to access a property of on object, the JavaScript engine will first look in the object itself for the property, and it if doesn’t find it there it looks in its __proto__ property, which is also the constructor’s prototype.

This leads to a good question: What happens if the property isn’t in the constructor’s prototype either? One possible answer is that the JavaScript engine gives up and says the property is undefined. But that’s not what happens.

Continue reading “The JavaScript prototype chain”

Designing out designers?

I’m teaching myself React, the JavaScript library du jour that’s meant “for building user interfaces.” Interestingly, it doesn’t use a templating language. Instead it offers JSX: an extension of the JavaScript language that lets you write JS code that looks very much like HTML and that can be rendered into HTML. On the surface this seems like a cool idea, but the apparent simplicity starts to break down when you want to do anything other than straight-line HTML.

Continue reading “Designing out designers?”

JavaScript prototypes

This is the first in a series of posts intended as a gentle guide through the realm of JavaScript prototypes. If you’re coming here from a class-based language like Java, PHP, C#, or C++ I suggest you put aside everything you know about how objects and inheritance work in those languages. Try to treat the way JavaScript works as its OwnThing.

Continue reading “JavaScript prototypes”

JavaScript and ‘this’

Keeping your head square about JavaScript’s 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):

this can 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 this.”

Let’s see what this means (pun intended?) for various scenarios.

Continue reading “JavaScript and ‘this’”

What is a single-ended amplifier?

Single-ended amplifiers, whether made with triodes (as in the single-ended triode, or SET, amplifier), pentodes, or solid state devices, entered the high-end consumer audio consciousness a couple decades ago, and they continue to have a particular pull for a certain camp of audiophiles. This may lead the rest of us to wonder whether these folks are onto something that we should pay attention to. However, there seems to be some confusion regarding what exactly single-ended amplifier are. So I thought I’d try to clear things up a little.

So, what exactly is a single-ended amplifier?

It might be easier if we first cover what isn’t a single-ended amplifier.

Continue reading “What is a single-ended amplifier?”

USBtiny on Debian

USBtiny error

I was able to clear a “Warning: cannot open USB device: Permission denied” error when using a USBtiny programmer on my Debian sid system by adding the suggestion at the end of this Adafruit page.

Specifically, as root create a file /etc/udev/rules.d/99-USBtiny.rules with the following single line:

SUBSYSTEM=="usb", ATTR{product}=="USBtiny", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"

The next time you log in, your USBtiny should work as expected.

You can confirm the ATTR{idProduct} and ATTRS{idVendor} values by plugging in your USBtiny and running dmesg (as root):

# dmesg
[404467.789928] usb 2-1.2: New USB device found, idVendor=1781, idProduct=0c9f
[404467.789930] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[404467.789931] usb 2-1.2: Product: USBtiny

Update (9/17/2018)

I received a new programmer that was identifying itself as “USBtinyISP” rather than “USBtiny”, and so the udev rule above wasn’t allowing user access to the new programmer. The solution was to add a new rule in the form of a second line to /etc/udev/rules.d/99-USBtiny.rules:

SUBSYSTEM=="usb", ATTR{product}=="USBtiny", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
SUBSYSTEM=="usb", ATTR{product}=="USBtinyISP", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"