Archives for: October 2009

10/30/09

Permalink 09:33:57 am, by Ben Franske Email , 376 words   English (US)
Categories: Radio Stuff

Packet Radio With Soundcards Including APRS

This summer I decided to explore a bit more about packet radio. You know, transmitting small amounts of information over amateur radio frequencies at very slow speeds. Prior to the advent of fairly ubiquitous high speed Internet connections this was a popular way for hams to move around information related to their activities. As it turns out the need for a dedicated packet modem (TNC) has gone away and the functionality can now be replaced with software and a sound card. One of my specific interests though was in learning about and improving the APRS system in the Twin Cities which allows people to automatically send GPS position information along with remote weather station packets and a variety of other small pieces of data. As it turns out APRS data can also be sent and received with a soundcard attached to a radio, forgoing the TNC and reducing the barrier to entry.

The primary program for soundcard TNC emulation is a free program called AGWPE and my first task was to learn how to setup and configure it as some of my firends had tried and failed to get it working in the past. Thanks to the great resources on the Internet I came upon the website of KC2RLM which contained excellent instructions for setting up and using the AGWPE program as well as a number of applications which would interact with the software.

Once I had gotten the basic soundcard TNC software up and running the next step was to start experimenting with APRS software. I tried lots of software including the common UI-View32 software but found the easiest to use and most modern software to be AGWTracker, a trialware program by the maker of AGWPE which supports all kinds of map layers such as Google Maps, MapPoint, etc. greatly improving the user experience. Of course, if you want to send updates back to the APRS-IS Internet network you need a password to go along with your callsign. As it turns out the password is a simple hashing algorithm designed just to prevent non-hams for injecting data into the network and is a documented algorithm. You can get your own APRS password or learn more about the algorithm at the APRS Password Generator website.

10/29/09

Permalink 10:49:51 am, by Ben Franske Email , 312 words   English (US)
Categories: Software, Build-It (Projects), Tips & Tools

Making Relational Databases Hierarchical

I'm not one who really enjoys writing code. In fact, I tend to avoid it whenever possible as it's just not that interesting to me. That said from time to time I have projects to complete where no existing software quite meets my needs and writing my own makes the most sense. This summer I was in the midst of collecting information and publishing a large extended family directory.

Clearly, the best way to do this is to store the data in a database. Because relational databases are most prevalent, I already have quite a bit of experience with MySQL and I knew I wanted to eventually make the data available via a PHP web application I decided to go with a MySQL backend. The trick here is that families aren't as relational as you might originally think. Families are really hierarchical data (parents, children, grandchildren, etc.) and relational databases have a hard time storing and recalling things based on these types of relationships. For example, a typical family query might be one for a list of all descendants of someone. As it turns out families aren't the only hierarchical data people might try to store in a relational database. Any business database which shows managers and reporting personnel is also a hierarchical data set albeit usually with fewer levels and much less complication (no need to track divorces, remarriages, spouses, etc.)

I was able to find and read up on several methods for storing the relational information but the one I ended up using is that proposed by Rob Volk of SQLTeam where the expensive (computationally) hierarchical relationships are stored in two additional fields for each record (depth and lineage) with parseable separators between generations. The database is initially loaded through a series of several (expensive) recursive queries but then can be maintained through triggers when information is added or updated.