Mac Docker 1.12.0-rc3-beta18 native client and insecure registry

A while back I set up a local Docker Registry to share images between different machines, and configured it as an ‘insecure registry’ since it’s just for testing. With the latest native Docker engine for Mac OS, I was having difficulty pushing to the Registry, it was just fail with a cryptic message:

$ docker push 192.168.1.66:5000/rpi-mongodb

The push refers to a repository [192.168.1.66:5000/rpi-mongodb]

Get https://192.168.1.66:5000/v1/_ping: http: server gave HTTP response to HTTPS client

I noticed in the Docker menu from the menu bar that there’s a Insecure Registries section under Preferences, Advanced Options. Adding the IP and port of my Registry there fixed my problem, now I can push:

$ docker push 192.168.1.66:5000/rpi-mongodb:latest

The push refers to a repository [192.168.1.66:5000/rpi-mongodb]

3d4f4a09f67b: Pushed 

fc91d495516f: Pushed 

5f70bf18a086: Pushed 

532820a7256b: Pushed 

ed62ae893def: Pushed 

994d5442545b: Pushed 

f097d343f850: Pushed 

latest: digest: sha256:c71c6743924243d6117050a1b5b95adf4effee7c9059315c0bfe500f67e0d16b size: 260

Windows History: DOS vs NT sourcecode heritage

As a software developer, I’m fascinated by computer and IT history. I grew up with 8 bit home computers like the Sinclair ZX Spectrum, and developed my first applications in Sinclair BASIC which most likely kickstarted my interest in software development.

I find it interesting when developers have very little interest or knowledge in even recent history of the tools and platforms that they work with every day. For example, statements like “I’m glad Windows 10 no longer has any dependence on MS-DOS like Windows 8 did”, or “Microsoft completely developed Windows 10 from scratch, you know”, – neither statements which could be further from the truth.

Up until Windows XP, Windows was developed as two parallel code lines, the MS-DOS based code line, Windows 1.x through 3.x, 95, 98, and ME, (95, 98 and ME aimed at home consumers) and the Windows NT code line for enterprise users. After Windows ME, Windows XP was developed based on the NT kernel from Windows 2000, with some features taken from ME and it’s MS-DOS code line.

There’s a great history of the parallel code lines in this article on the History of Microsoft Windows on Wikipedia, and clearly illustrated in this diagram:

(From https://en.wikipedia.org/wiki/Timeline_of_Microsoft_Windows, shared under Creative Commons Attribution-Share Alike 3.0 Unported license).

Windows ME was the last release of the MS-DOS based Windows code line, and Windows 10 is the next release in the Windows NT code line, which as you can see from the timeline above, shares it’s heritage with 8, 7 and Vista before it.

Running gpsd on a Raspberry Pi 3 over UART

Adafruit have a great tutorial for connecting and setting up their GPS Shield on the Pi. To connect it direct to the tx/tx GPIO pins on the Pi (instead of USB), there’s some additional steps covered here. Since the Pi 3 uses it’s hardware serial with the onboard Bluetooth, there’s additional steps covered that are Pi 3 specific.

After following those steps however, runnning cgps would run for a second and quit, with ‘No Fix’. What’s odd was that doing a ‘cat /dev/ttyS0′ would show the GPS NMEA messages being received, so I could tell the GPS board was up and receiving, but something else was not right.

Instead of starting gpsd as a daemon, running it form the commandline with additional debugging options gave some additional clues:

pi@raspberrypi:~ $ sudo gpsd /dev/ttyS0 -n -N -D3 -F /var/run/gpsd.sock

gpsd:INFO: launching (Version 3.11)

gpsd:ERROR: can’t bind to IPv4 port gpsd, Address already in use

gpsd:ERROR: maybe gpsd is already running!

gpsd:ERROR: can’t bind to IPv6 port gpsd, Address already in use

gpsd:ERROR: maybe gpsd is already running!

gpsd:INFO: command sockets creation failed, netlib errors -1, -1

This thread has others with the same issue. There are some suggestions towards the end of the thread to edit /lib/systemd/system/gpsd.socket and change some values, but the one recommendation that worked for me was to use this to start the service:

sudo service gpsd start

and then running cgps connected to the gpsd daemon, and everything is good!