GithubHelp home page GithubHelp logo

ae5au / gmrs.app-website Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 3.0 146 KB

Lookup for amateur and GMRS radio licensees with cross-referencing between holders of both licenses

Home Page: https://gmrs.app/

License: Apache License 2.0

Shell 4.35% HTML 18.66% Python 43.72% TypeScript 31.21% JavaScript 2.05%
amateur-radio gmrs

gmrs.app-website's Introduction

gmrs.app-website

Lookup for amateur and GMRS radio licensees. Cross-referencing for those that hold both licenses.

Premise

Many GMRS radio operators are also licensed amateur radio operators. If you know an operator's call sign for one service, this app helps find the record for the other service. Even if the operator isn't licensed on the other service, you can lookup their details.

Match is first checked based on the FRN (FCC registration number). A few things to remember:

  • GMRS licenses can be shared by a whole family. The app will match to the holder of the GMRS license, but that might not be the person legitimately using the call sign.
  • Some people have different FRNs for each license. The app doesn't try to match on name, address, or anything other than FRN.
    • This isn't how the FCC indends things to be, but it happens. I don't know how much.

"Possible matches" are licenses with a different FRN but a matching street, city, and state. Some normalization is done to try to match cases such as where one address spells out "Street" and another uses abbreviated "St.", but there are plenty of cases that would not match. Don't fully trust this section to show all possible results.

A scheduled workflow downloads the data weekly when the FCC publishes new full files. Currently that is scheduled for 0700 UTC on Monday morning.

Tech bits

The site runs totally in the browser with no server processing other than serving the static files. How do we query a database with over a million total records from the browser without using a lot of data transfer? Magic! Well, not exactly...

sql.js-httpvfs from phiresky is a virtual file system wrapper around a WebAssembly client for SQLite. It allows a browser to query a database hosted on a static file hoster without fully downloading the database. It depends on a good/simple database and index structure which is a great fit for this application. It also depends on the hoster supporting HTTP range requests and responding with only the specific part of the file requested.

The site is currently hosted on GitHub Pages which works well. I might move to Cloudflare Pages if they implement range requests (they are supposed to be working on it).

There is a Python script that downloads the files from the FCC, parses the needed tables into a SQLite in-memory DB, and then joins only the needed data into a SQLite file. That file is then indexed, optimized, and split into chunks.

The site is written in Node.js and packaged with webpack. This was my first experience with Node. I'm sure there are plenty of things to improve. PRs are welcome!

Development

  • Prerequisite: node and npm installed and working. I'm using v16. It might work with older versions ๐Ÿคทโ€โ™‚๏ธ
  • Clone the repo.
  • Inside the repo directory: npm install
  • Build and start local http server: npx webpack --mode=development && npx http-server
  • Build the data one of two ways:
    • Run python3 dev_data.py in the site directory. (Easiest and quickest! Pulls DB files from gmrs.app)
    • Create a 'data' directory and run parse_data.py
      • May require tweaking and moving the files around after it runs, but gives more control over the DB build process.
      • Pulls a single file that is more convenient if you want to manually query it with a SQLite client.
      • create_db.sh can be used to break the DB file into chunks and create the JSON config file needed for sql.js-httpvfs to reference the DB.
  • Spectre.css framework used for UI. Docs
    • Original project has gone stale. We've moved to a fork that is under active development but the document hasn't completely caught up yet. Be watchful for links in docs pointing back to original project.

gmrs.app-website's People

Contributors

ae5au avatar

Stargazers

 avatar  avatar David avatar  avatar  avatar Maksym avatar Raymond Moul avatar Geoffrey Phillips avatar

Watchers

 avatar  avatar

gmrs.app-website's Issues

Return "possible" matches

Catch scenarios the same individual has multiple FRNs and also multiple amateurs at same addresses as a single GMRS license.

Records with exact match of street, city, and state:

sqlite> select count(*) from licenses AS gmrs INNER JOIN licenses AS amateur ON gmrs.service = 'ZA' AND amateur.service IN ('HA','HV') AND gmrs.frn != amateur.frn AND gmrs.street = amateur.street AND gmrs.city = amateur.city AND gmrs.state = amateur.state AND gmrs.street != '';
2695

Might have to pre-process these matches to make query more efficient.

Dedicated URL for data

This would allow independent builds so that updates to the website would be faster.

Need to considering caching / cachebusting considerations.

New Callsign not returning info

Looked up callsign WSAC493 which was granted on 1/05/2024 but it doesn't show up on gmrs.app. Older callsigns such as mine (WRKG942) do resolve. Is the database from the FCC not updating? It's been a while since this call has been issued so I figured it would work it's way through a database update.

THANK YOU FOR THE SITE LUKE!

Jon "I wish I could be of more help on the problem" Williams

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.