Connecting APRS apps to a software TNC over your network

A useful feature of Direwolf is that it exposes an AGWPE port on your local network that you can connect to across your local network. I use this feature to run an APRS app on my laptop elsewhere in the house with Direwolf running on a Raspberry Pi beside my 2m radio in my office upstairs.

With the YACC APRS app, this is as easy as adding an AGWPE port in the app and pointing it to the IP and 8000 port of the Raspberry Pi where Direwolf is running:

Revisiting Packet Radio on a Raspberry Pi with Direwolf: part 2 (minimal installation)

This is a continuation of part 1 here. To summarize the required steps to setup ax25 and Direwolf for software based packet radio, here’s the minimum steps need to get up and running:

Install libasound2-dev and libudev-dev:

sudo apt-get install libasound2-dev
sudo apt-get install libudev-dev

Clone the source for Direwolf, then build and install:

git clone https://github.com/wb2osz/direwolf.git

Compile and install Direwolf (build steps changed recently):

cd direwolf
mkdir build && cd build
cmake ..
make -j4
sudo make install
make install-conf

Plug in a soundcard device like a Signalink or Rigblaster, run ‘aplay -l’

Get the device number, in this case my Rigblaster is 2,0:

card 1: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Audio [RIGblaster Advantage Audio], device 0: USB Audio [USB Audio]
Subdevices: 1/1

Configure ~/direwolf.conf – change ADEVICE to refer to the device number from the previous step:, and then set your call sign:

ADEVICE plughw:2,0
MYCALL KK6DCT-5

Run alsamixer, select your soundcard attached to your radio, and make sure playback and capture sound levels are around 70% and not muted:

Install ax25 apps and tools:

sudo apt-get install libax25 ax25-apps ax25-tools

Add 1 line in /etc/ax25/axports – the number in the first column is the port number, you’ll need this in the next steps:

1 KK6DCT-1 1200 255 2 2m packet

Run:

direwolf -t 0 -p

Look for the last line for /dev/pts:

Ready to accept KISS client application on port 8001 ...
Virtual KISS TNC is available on /dev/pts/0
WARNING - Dire Wolf will hang eventually if nothing is reading from it.
Created symlink /tmp/kisstnc -> /dev/pts/0

Run kissattach:

sudo kissattach [/dev/pts/value here] [ax25 port value here]

e.g.

sudo kissattach /dev/pts/0 1

You should see:

AX.25 port 1 bound to device ax0

Now you’ll set to use the ax tools to connect to other nodes, for example, run:

axcall [ax25 port number] [nodename]

Done!

Effective Java: recommended 18 years ago, still top of my recommended reading list today

In past years I used to put together a recommended reading list for software developers, particularly Java developers. I think I stopped doing it as often because year to year my list really didn’t change much, if at all.

As an example, 18 years ago, Effective Java by Josh Bloch I would say was required reading for all Java developers, new and experienced. It would still be at the top of my list today. It’s essential reading and solid guidance for all Java developers. If you’re a Java developer and you haven’t read this book yet, pick up a copy and read it now.

As an industry we do a poor job of teaching new developers how to develop software

This is not a criticism of any specific school course, bootcamp or on the job training, it’s merely an observation over the years: early Spring and late Autumn/Fall there is always an increase online of very basic developer questions. These questions always include things like: “why doesn’t my code work”, “can someone debug this for me”, “why does this code not produce the result I’m looking for”, and even the flatout “please help me with my homework – here’s the assignment”

These points in time coincide with the start of a new term as new students are starting to learn a programming language, I guess it’s pretty much expected that we would see the number of these types of question increase during these times of the year. My point though is that these types of questions appear again and again every year. Every. Year.

Why have we not progressed past the point where new developers don’t need to ask basic questions as they are starting out? Why are software development courses not equipping new developers with basic problem solving skills to help them trouble solve basic problems for themselves?

Most of these questions and problems could easily be solved by the developers themselves if they stepped through their code in a debugger in their IDE and looked at what happens in their code step by step up to the point where something goes wrong usually because of a simple logic error.

Other problems could easily be solved by applying basic problem solving and software development core techniques:

  • breaking a large problem down into smaller parts
  • writing unit tests to test each smaller part of the app in isolation to confirm each part works by itself
  • testing with a range of valid and invalid values to find what works and what doesn’t work
  • using log statements to trace execution through an app
  • identifying what changed since it was last working, incrementally backing out last changes to find the point where a change was added that broke something
  • using a debugger

There’s too much emphasis on learning a programming language to write code, and not enough focus on techniques to develop software. None of things I listed above are new ideas or concepts, experienced developers have applied these concepts daily for decades. It seems we’re failing short in training new developers if we’re missing out the basics.