A couple of years ago my friend Joe recommended this stuff called
Plastimake to me.

It is a hard plastic which goes soft and malleable at around 60 degrees
celcius. You drop some in boiling water until it goes clear and soft and
then you can mold it into whatever shape you want. It cools and hardens
again quickly in whatever shape you have molded it into. You can re-heat
it to soften and re-use it again.

Scout and I have used it several times to hand craft little figures for
play. I've also used it around the home and when prototyping things as
it's a very quick way to get a hard plastic into exactly the shape you want.

Here's their video which is clear and honest:

]]>/tags/allThu, 01 Mar 2018 04:19 GMTInternet of Things Questionsentries/internet-of-things-questionshttp://mccormick.cx/news/entries/internet-of-things-questions
A list of real questions that could be answered by teensy little technology nuggets.

In which physical folder is my child's birth certificate?

What items of mine are not here?

How much hand soap refill is left in my bathroom cupboard?

What is the smallest storage space in which I can fit all of my furniture?

Which items that I own do I never use?

At what time of day do I interact with different items I own?

What is the total weight of my filing cabinet and work desk?

I need a new one of these, pull up the page where I purchased it in my browser.

This thing does not belong to my grandmother. Who did she borrow it from before she died?

List the items in my craft box which have "needle" in the name.

How much television are my kids watching and what percentage are educational shows?

Are there any NE5532s in my tool box?

Graph my family's diet composition. How much of it is fresh food?

Place a grocery order under $50 for the items I most commonly use that I will soon run out of.

Search all of the physical books in my personal library for the following phrase.

Are my running shoes in this house or the holiday house?

We are leaving this hotel. Have we packed everything?

Where have I put my phone and keys?

Most of these question could be answered without an internet connection. "Of Things" sounds kind of weird by itself though.

"Internet connected lightbulb" does not provide a use-case that anybody wants or needs.

The things should be telling us their data. They should not be telling corporations our data.

What you want is dumb little things that do one thing well. Good traditional design plus CPU, I/O, and memory.

The documentation is comprehensive but arcane so here are my field notes.

I'm using piCore the Raspberry Pi variant of TinyCore but most of these notes should work for other variants too. These notes assume you are already a GNU/Linux desktop user and know basic Linux command line fu.

Find the Pi on your network

Immutable by default

Tiny Core Linux is a perfect fit for Raspberry Pi because it does not write to disk by default. Note that between reboots if you want to persist any changes you've made, you need to do it manually with filetool.sh -b. You'll especially want to do this after first boot to persist the SSH server keys. This includes any changes you make to files in the home directory.

This lack of disk writes is a huge boon because it prevents issues that distributions like Raspbian have with SD card corruption when you power off the Raspberry Pi. Immutability is also just a good thing generally for building robust software systems.

Various useful commands

Download and install packages (nodejs binary package in this example):

tce-load -wi node.tcz

Show which packages are currently installed:

tce-status -i

Install a package for doing C/C++ compilation & development:

tce-load -wi compiletc

Find current OS version info:

version

Search for and install packages with console UI:

tce

Where to put your own startup and shutdown scripts:

/opt/bootlocal.sh
/opt/shutdown.sh

Getting WiFi working

You'll want the packages wifi and firmware-rpi3-wireless and then reboot and set up a connection:

sudo wifi.sh

Don't forget to persist your changes.

Getting sound working

You'll want the alsa and alsa-utils packages.

I managed to compile Pure Data and output a basic test tone. I went into the src folder of Pd and issued make -f makefile.gnu to build it from the source after checking it out from git.

GPIO access

I managed to interface with the Raspberry Pi GPIO by installing node and then using the onoff package installed via npm. Lots of dev packages were required for a successful build (compiletc probably covers most of them). Each time npm threw an error I looked at what the error message was to determine which package to install next until it built successfully.

Philosophical waxing

GNU/Linux has now been subsumed into the technological substrates of the world. It is found in most phones, servers and appliances that people interact with every day. There are probably 10 copies of Linux running in the median developed-world household. It has become infrastructure, like roads and wires and water pipes.

I don't see that many young people at GNU/Linux meetups these days. I don't think we GNU/Linux nerds are required by the world in the same way that we were before when it was sparkly and new.

It's exciting for me to find Tiny Core Linux which has re-ignited the spark of enthusiasm for this technology.

In the style of this guy in the style of Scott Robertson space ship sketches.

]]>/tags/allTue, 17 Oct 2017 03:55 GMTLovelace Day 2017entries/lovelace-day-2017http://mccormick.cx/news/entries/lovelace-day-2017
A non-exhaustive list of technologies that I used this year which happen to be built by women:

I love this piece of software and I use it every day. It is a simple note taking application which syncs across all of your devices. It is a self-hosted single-page web app that runs on a PHP server and does not require a database.

I run a copy on my phone and a copy on my laptop.

I used Add to homescreen on my phone so that it gets an icon and launches full-screen.

There are times in life when you need to keep track of periodic events as they happen. For example when you have a new baby it is sometimes useful to keep track of when they feed, nappy changes, etc. Another example might be tracking how often you eat chocolate or drink beer.

Clerk is a simple self-hosted web application that I built which you can install to the home screen of your device (by doing "add to home screen" in your browser) or load up on your tablet or laptop. You can then keep track of simple events with two taps on your device - once to open the app and once to record the event.

For every event logged the event type, timestamp, and comment are stored in CSV files. Events are stored in individual CSV files - one file per event type. You can also download all CSVs stiched together with an extra column for the event name.

]]>/tags/allThu, 08 Jun 2017 09:06 GMTA Smart Alternative to `watch make`entries/a-smart-alternative-to-watch-makehttp://mccormick.cx/news/entries/a-smart-alternative-to-watch-make
watch-make is a script that rebuilds your project only when make detects it needs a rebuild, for example when source files change.

Features:

Works with any existing Makefile based project.

No dependencies apart from make.

Passes any arguments to make (such as -C mydir).

Silent if there is nothing to build and does not swallow output when there is.

I went to the woods because I wished to live deliberately, to front only the essential facts of life, and see if I could not learn what it had to teach, and not, when I came to die, discover that I had not lived.

In November I was in New York for PdCon 2016 and to visit my brother, thanks in large part to my friend Joe Deken and his not-for-profit, New Blankets.

The conference was fantastic. Many fascinating performances, a chance to catch up in person with people from the Pure Data community, and the opportunity to present and perform some of my own work. A highlight for me was hearing Miller Puckette, creator of Pure Data, talk about his approach and philosophy.

On top of that I got to catch up with some awesome people outside of the conference, especially my brother. We went hiking together one day - a rare opportunity to hang out together in nature.

Tonight my friend Fenris and I will play some music in a park here in
Perth, Western Australia, on Gameboy and Commodore 64 powered by
batteries and broadcast over FM radio to local speakers hanging from the
trees. We'll start playing at 9:30pm and after us our friends Atomsmasha
and Kataplexia will also play some music on Gameboys.

Might see you there!

]]>/tags/allFri, 06 Jan 2017 07:07 GMTGeodesic Scale Testentries/geodesic-scale-testhttp://mccormick.cx/news/entries/geodesic-scale-test
]]>/tags/allSat, 26 Nov 2016 06:32 GMTOpen Skiesentries/open-skieshttp://mccormick.cx/news/entries/open-skies
]]>/tags/allFri, 25 Nov 2016 01:51 GMTAlgorave Set in Williamsburgentries/algorave-set-in-williamsburghttp://mccormick.cx/news/entries/algorave-set-in-williamsburg
Lately I've been working on new algorave
music in the style of
drill&bass and I'm playing a set here
in New York for the PdCon16
party. It's at a space
called Vital Joint in Williamsburg, tonight (Saturday) at midnight.

There is a gap in the web app paradigm as users don't always realise they can install a web app they use by going to "Add to homescreen".

An interesting way to fill that gap would be to build an "app store" for web apps. That is, a native app that curates and carries out the "add to homescreen" process for the user for a wide variety of quality web applications. So basically like Firefox OS but without the OS - just the installer, and for the native browser of each platform.

Ideas are cheap and execution is everything - you don't need my permission to take this idea and run with it if you're convinced.

Couple of weeks ago I was fortunate enough to visit Delhi and spend a
week with my colleagues Umang, Gaurav and Tom. We had an excellent and
productive week and in between development discussion Umang was kind
enough to drive us to many fascinating and beautiful places - not least
of all to enjoy a wonderful meal at his sister's house.

]]>/tags/allSun, 21 Aug 2016 02:05 GMTYou Are Hereentries/you-are-herehttp://mccormick.cx/news/entries/you-are-here
]]>/tags/allSun, 24 Jul 2016 08:13 GMTOMG Not Another TODO List Applicationentries/omg-not-another-todo-list-applicationhttp://mccormick.cx/news/entries/omg-not-another-todo-list-application
My wife and I needed a collaborative shopping list that we could update
from our phones. There are proprietary solutions to this but after some
research I was surprised to discover that there is no Free Software
application that meets the following criteria:

We've been using this "in production" for 3 months and so far it fills
our need without issue.

Authentication can be accomplished with a .htaccess file or similar.

The text-file format is designed so that you can edit lists with a
text-editor directly if you want to.

If you want to support multiple users you can set up two instances
in two different folders and symlink the textfile of the list you want
to share between them. Each folder can have its own authentication.

You can also do other textfile things like make a symlink into a
Syncthing folder which enables you to modify
your TODO lists on your laptop or server as well as through the web app.

The realtime updating is accomplished via long-polling. Primarily I used
this instead of websockets because when it comes to browsers, older tech
is more robust to different operating environments than newer tech.

I resorted to using PHP for a very lightweight server backend because it
has the property that basically anybody with web hosting is able to
upload a PHP script and I think it's good to give software as
egalitarian a deployment surface as possible. Luckily it is only 150
lines of not-too-painful PHP.

]]>/tags/allSun, 27 Mar 2016 01:52 GMTMccormick Family Photo 2016entries/mccormick-family-photo-2016http://mccormick.cx/news/entries/mccormick-family-photo-2016
]]>/tags/allTue, 15 Mar 2016 12:09 GMTHeuristic For Algorave Masteringentries/heuristic-for-algorave-masteringhttp://mccormick.cx/news/entries/heuristic-for-algorave-mastering
This is the pattern I use for mastering algorithmic electronic music that I write.

First, each audio source or channel Sn is given a random (sometimes hand tuned) delay of 0 to 20 milliseconds on either the left or right channel in RPn. My friend Crispin put me on to this technique, which gives each audio source its own psycho-acoustic space in the mix, probably due to the Haas effect.

Next the resulting sources are summed together - separately for left and right channel. Here you can also run the combined signal through a high pass filter set at 5Hz to remove any DC offset present in the signal.

Then the combined signal is passed through a reverb with mostly "dry" signal - maximum 30% wet as a general rule of thumb. Adjust the reverb to taste. I'll usually make it a bit long and airy but subtle.

Next we win the loudness wars. This is dance music and we want people to dance, so it has to sound powerful. To acheive this we do something horrible: measure the RMS - the power of the sound - and then amplify until the power of the signal is normalised. Here is the "auto compress" Pure Data patch I use for doing this:

The env~ object here is a simple envelope follower and the source code is here. The dbtorms function source code is here. The possible magnitude of the power correction is limited by the clip function which does what it says on the box, and the resulting multiplier is smoothed with a 10ms rise and fall time (line~) to get rid of sudden discontinuities. Only 30% of the resulting power-normalized signal is mixed with the original signal.

Finally, run the mixed signal through a soft-clipper before sending it to the speakers. Soft clipping is a good idea because the power normalisation step above will push the peaks up above 1.0 and we don't want harsh hard-clipped distortion to be audible.

The soft clipper I use (probably incorrectly called "sigmoid" in the diagram) is simultaneously a compressor to get that extra punchy sound:

2 / (1 + pow(27.1828, -$v1)) - 1

Where $v1 here corresponds to your vector of incoming audio samples.

Hopefully this method doesn't break any international treaties or anything.

With the recent announcement of Apple's "Pencil" I feel somewhat
vindicated. I got the details wrong but I think broadly speaking that
hand-drawing, sketches, doodles, will feature strongly in the future of
human-to-human communication. Maybe even more strongly than typed
messages for some people.

I'm thinking about the 16% of people worldwide who can't read or
write, but who are rapidly adopting hand held technologies where they
can draw.

I'm thinking about the tens of thousands of years of human beings
using sticks as a technology for making marks upon a surface.

I'm thinking about the popularity of emoji, the universality of
pictographs, the cross-cultural and language-independent nature of the
medium of drawn communication.

I'm thinking about my kids and how the second thing they learn after
talking is drawing.

Maybe one future is a world in which many of our planet's population do
a significant fraction of our communication through the medium of doodles.

I feel grateful because this year when my daughter said to me "I want to
be a mummy, not an astronaut," I was able to tell her about Anna Fisher,
who in 1984 became the first astronaut-mother in space, and to show her
the stories and images online of the several astronaut-mothers who have
followed her into space.

I feel grateful this year to Jess Frazelle from Docker, who wrote an
honest blog
post that
reminded me of my privilege; reminded me how lucky I am to participate
in tech and open source communities without friction and harassment;
reminded me of a hidden strength and fortitude exhibited by amazing
people all around us that I can aspire to; and reminded me that there is
always more work to be done to make the world a better place for all humans.

I feel grateful that I am not alone in thinking and wanting that our
culture can change for the better. I'm grateful that the internet can
amplify the voices of people like Jess, and counteract the Friendship
Paradox every time
somebody speaks up.

I am grateful for the writing of bloggers like Pamela Fox and Liza
Shulyayeva and Nicole Reid who demonstrate the technical, evidence based
counter-factual to every trolling Hacker News comment.

As I do every year, this year I feel deeply grateful and so very lucky
that my parents bought our Apple IIe when I was eight years old and that
my mother taught me to code.

I feel grateful to have worked, and to continue to work beside amazing
people who every day prove that smart, capable, technical people don't
fit a stereotype.

My HTC Desire Z Android phone from 2010 died. I am taking this as a re-ware design/lifestyle provocation. As such I am now running an even older smartphone - my development iPhone 3Gs from 2009. Do we even need a modern smartphone for our day-to-day computing needs?

She SSH'es into her father's machine from her Raspberri Pi. Presumably like any good hacker she used social engineering to obtain his password. She then uses the ps or top command to find the process ID of the "Sublime Text" editor he is using - the number she reads out. She then uses the OSX say command on the command line on his computer to make it speak to him:

$ say "Dad watch out"

Given his reaction it appears he doesn't consider the possibility that anybody has remote access to his machine and he also doesn't seem to know about the OSX say command, hypothesizing incorrectly that the kids have set up a timed MP3 file. Finally, she uses the kill command on his machine to kill the "Sublime Text" process, closing down the windows he is working on.