PiAware dump1090 no longer loading on 8080 (and easy solution)

I recently noticed that my dump1090/PiAware web ui stopped loading. The unusual thing was that part of the webapp appeared to load but then it would hang with the ‘please wait’ spinner.

Looking in dev tools in Chrome, there’s a bunch of 404s on the data feeds:

A quick search found a couple of useful posts, especially this one, suggesting to first check the logs, with:

sudo journalctl -u dump1090-fa -n50 --no-pager

And here’s what I found:

Apr 22 20:24:02 raspberrypi systemd[1]: dump1090-fa.service holdoff time over, scheduling restart.
Apr 22 20:24:02 raspberrypi systemd[1]: Stopping dump1090 ADS-B receiver (FlightAware customization)…
Apr 22 20:24:02 raspberrypi systemd[1]: Starting dump1090 ADS-B receiver (FlightAware customization)…
Apr 22 20:24:02 raspberrypi systemd[1]: Started dump1090 ADS-B receiver (FlightAware customization).
Apr 22 20:24:02 raspberrypi dump1090-fa[27365]: Wed Apr 22 20:24:02 2020 PDT dump1090-fa 3.5.1 starting up.
Apr 22 20:24:02 raspberrypi dump1090-fa[27365]: rtlsdr: no supported devices found.
Apr 22 20:24:02 raspberrypi systemd[1]: dump1090-fa.service: main process exited, code=exited, status=1/FAILURE
Apr 22 20:24:02 raspberrypi systemd[1]: Unit dump1090-fa.service entered failed state.

Here’s your problem, right here:

dump1090-fa[27365]: rtlsdr: no supported devices found.

Quick fix, pushed the rtl-sdr usb dongle back in (it had come slightly loose) and rebooted, problem solved:

-- Logs begin at Wed 2020-04-22 20:27:02 PDT, end at Wed 2020-04-22 20:27:55 PDT. --
Apr 22 20:27:05 raspberrypi systemd[1]: Starting dump1090 ADS-B receiver (FlightAware customization)…
Apr 22 20:27:05 raspberrypi systemd[1]: Started dump1090 ADS-B receiver (FlightAware customization).
Apr 22 20:27:05 raspberrypi dump1090-fa[571]: Wed Apr 22 20:27:05 2020 PDT dump1090-fa 3.5.1 starting up.
Apr 22 20:27:05 raspberrypi dump1090-fa[571]: rtlsdr: using device #0: Terratec T Stick PLUS (Realtek, RTL2838UHIDIR, SN 00000001)
Apr 22 20:27:05 raspberrypi dump1090-fa[571]: Found Elonics E4000 tuner
Apr 22 20:27:05 raspberrypi dump1090-fa[571]: rtlsdr: enabling tuner AGC

Problem solved – look at that empty sky over Sacramento!

Using Avro Serializer with Kafka Consumers and Producers

Some of the Avro Serializer/Deserializer and Schema Registry classes are not available in jars from the usual maven-central repo. Confluent manage their own repository which you can add to your pom.xml with:

<repositories>
    <!-- For io.confluent Jars not in maven central -->
    <repository>
      <id>confluent</id>
      <url>http://packages.confluent.io/maven/</url>
  </repository>
</repositories>

And then you can add dependency:

<dependency>
  <groupId>io.confluent</groupId>
  <artifactId>kafka-avro-serializer</artifactId>
  <version>5.4.1</version>
</dependency>

This dependency will allow you to use the AvroSerializer in your properties:

value.serializer=io.confluent.kafka.serializers.KafkaAvroSerializer

To generate Avro Specific classes from an .avsc file following the Avro developer guide here, add the Avro dependency and generator plugin:

<dependency>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro</artifactId>
  <version>1.9.2</version>
</dependency>

and the plugin:

<plugin>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro-maven-plugin</artifactId>
  <version>1.9.2</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals> <goal>schema</goal> </goals>
      <configuration>.     <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
      <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

The plugin configuration is looking for .avsc schema files in the /srv/main/avro folder. An example schema file looks like this:

{
  "namespace": "kh.kafkaexamples.avro",
  "type": "record",
  "name": "TestMessage",
  "fields": [
    {"name": "firstName", "type": "string"},
    {"name": "lastName", "type": "string"}
  ]
}

The plugin will generate the Avro class for any .avsc file it finds in the configured folder.

To use Avro messages with Confluent Platform (or Confluent Cloud), you also need to specify a url to the Schema Registry, otherwise you’ll see this error:

Caused by: io.confluent.common.config.ConfigException: Missing required configuration "schema.registry.url" which has no default value.
at io.confluent.common.config.ConfigDef.parse(ConfigDef.java:251)

You also need to prefix the url with http/https, otherwise you’ll see this exception:

Exception in thread "main" org.apache.kafka.common.errors.SerializationException: Error serializing Avro message
Caused by: java.net.MalformedURLException: unknown protocol: localhost

Assuming you’re running Confluent Platform locally, the Schema Registry property is:

schema.registry.url=http://localhost:8081

To publish a message using the generated TestMessage class from the above schema:

Producer producer = new KafkaProducer<>(props);
TestMessage message = new TestMessage();
message.setFirstName("firstname");
message.setLastName("lastname");
producer.send(new ProducerRecord("test-avro-topic", "1", message));
producer.flush();
producer.close();

Done!

Random useful MacOS shortcut keys

Finder shortcuts:

Cmd-down – navigate into folder (down)

Cmd-up – navigate up from current folder

Spacebar – preview a file

Shift-Cmd . – toggles display of hidden files

Other tips:

When using multiple monitors, if you pull the mouse cursor down on a screen you can move the Dock to that monitor.

The Hobbit for the ZX Spectrum: a text adventure with interactive NPCs from 1982

After having a Lord of the Rings and The Hobbit movie marathon this weekend, I fired up a ZX Spectrum emulator and relived playing the text adventure game The Hobbit. I shared some screenshots in this thread on Twitter here:

The Hobbit was released in 1982 for the ZX Spectrum. For it’s time, it has some interesting features, like NPCs that wandered around, and language parsing of statements allowing you to interact with the NPCs, like ‘say to Elrond “read map”‘.

Given the unusual (for the time) ability to interact with the NPCs, there even exists a ZX Spectrum emulator specifically to play The Hobbit, which also shows the state of the interactive characters and objects in the game as you play. This is well worth taking a look at to get an insight into how the game works – quite an achievement for an 8 bit game in only 48k: http://members.aon.at/~ehesch1/wl/wl.htm