2020-06-18

Reverse NILs in CQ WW: 2007

The basic notion of reverse NILs (rNILs; or, I suppose, RNILs) is described here, along with a description of a simple script for calculating rNILs for CQ WW contests and the result of applying that code to the contests for 2005. See also the comments at the end of that post.

Here are the results for 2007:

2007 SSB:

Callsign Total rQSOs Total rNILs
OT5L 2560 2516
ER5GB 815 814
SN1I 951 625
T99W 1571 578
LZ1ND 482 481
6Y1V 5555 450
EA1ET 853 433
OK1KZ 524 432
YV4A 3003 420
PY2AA 892 418


Callsign Total rQSOs Total rNILs % rNILs
ER5GB 815 814 99.9
LZ1ND 482 481 99.8
PY2TW 139 138 99.3
F4EWU 231 229 99.1
DJ6XV 105 104 99.0
OK1JN 92 91 98.9
AG9D 84 83 98.8
IQ3EZ 82 81 98.8
VU2SWS 315 311 98.7
IT9YVO 312 308 98.7


Callsign Total rQSOs with Ws rNILs against Ws
N7DD 91 81
K7ZSD 79 34
N2IC 92 31
K3LR 352 28
KU1CW 35 17
K1TTT 243 14
W0AIH 77 13
W3PP 52 11
W4WS 43 11
NQ4I 190 11


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
N7DD 91 81 89.0
KU1CW 35 17 48.6
K7ZSD 79 34 43.0
W0YR 25 9 36.0
N2IC 92 31 33.7
K1VU 32 10 31.2
W4WS 43 11 25.6
W3PP 52 11 21.2
W0AIH 77 13 16.9
W7WA 36 5 13.9

2007 CW:

Callsign Total rQSOs Total rNILs
LT1F 4304 4291
SV1ENG 1632 1561
IH9U 879 826
OK1FZM 575 571
OK1KZ 481 365
UA9OW 344 343
DK3GI 1606 300
UX2MF 369 298
S56A 613 291
YO2LEA 289 288


Callsign Total rQSOs Total rNILs % rNILs
UA9OW 344 343 99.7
LT1F 4304 4291 99.7
YO2LEA 289 288 99.7
9G5ZS 198 197 99.5
W9/DM5TI 153 152 99.3
OK1FZM 575 571 99.3
SM0KV 102 101 99.0
DL1EHR 193 191 99.0
DJ2SX 112 109 97.3
SV1ENG 1632 1561 95.6


Callsign Total rQSOs with Ws rNILs against Ws
K0RF 169 63
W9/DM5TI 47 46
N7UA 25 18
K0XTR 25 15
N3RS 111 14
K5GO 193 14
N6RO 432 12
K1TTT 169 12
NQ4I 192 10
K3LR 177 8


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
W9/DM5TI 47 46 97.9
N7UA 25 18 72.0
K0XTR 25 15 60.0
K0RF 169 63 37.3
N4CJ 25 5 20.0
N7TT 30 5 16.7
W3UA 25 4 16.0
K6OY 26 4 15.4
K1LZ 34 5 14.7
K1RX 49 7 14.3

As in 2006, N7DD's SSB log might have been worthy of a closer look. As far as I know it wasn't called out for examination, but the deliberations of the CQ WW Contest Committee are -- probably on purpose -- shrouded in mystery, so it's impossible to know what investigations, if any, they undertook to understand the cause of statistical anomalies in the various calculations that they (I assume) performed against the logs.

2020-06-17

Reverse NILs in CQ WW: 2006

The basic notion of reverse NILs (rNILs; or, I suppose, RNILs) is described here, along with a description of a simple script for calculating rNILs for CQ WW contests and the result of applying that code to the contests for 2005. See also the comments at the end of that post.

Here are the results for 2006:

2006 SSB:

Callsign Total rQSOs Total rNILs
IZ8EPX 1348 1345
F5BBD 1025 925
RW3WWW 1798 813
PY5DC 777 765
9Y4NZ 1520 734
EI9E 1881 730
PI4ZI 724 721
OA4WW 2841 668
VP2MDY 1866 656
YU1HFG 658 650


Callsign Total rQSOs Total rNILs % rNILs
IZ8EPX 1348 1345 99.8
N3BNA 347 346 99.7
I8TWB 272 271 99.6
PI4ZI 724 721 99.6
LA2OKA 220 219 99.5
EX7ML 162 161 99.4
IT9YVO 304 302 99.3
IW2MWZ 132 131 99.2
PY3DX 230 228 99.1
PY6KY 107 106 99.1


Callsign Total rQSOs with Ws rNILs against Ws
N7DD 84 77
N2IC 82 30
W3LPL 187 30
KV0Q 57 25
K3LR 274 21
NQ4I 309 20
W7WA 52 19
K6OP 32 16
KC1XX 165 13
NK7U 170 12


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
N7DD 84 77 91.7
K6OP 32 16 50.0
KV0Q 57 25 43.9
N2IC 82 30 36.6
W7WA 52 19 36.5
NE3F 48 11 22.9
K1IR 30 6 20.0
W3BGN 30 6 20.0
N2MM 41 8 19.5
W2CG 28 5 17.9

2006 CW:

Callsign Total rQSOs Total rNILs
RU9UZM 1384 1245
HK1AR 1192 1101
RN4AT 806 794
YO7BGA 762 746
EA8NN 888 686
WX4G 1085 640
S51Z 1303 620
PA3ADJ 611 594
EU4CQ 462 461
HS0ZFI 625 436


Callsign Total rQSOs Total rNILs % rNILs
EU4CQ 462 461 99.8
M0RTI 284 283 99.6
DK7KR 424 422 99.5
UT1PO 294 292 99.3
RK3WWA 194 192 99.0
RN4AT 806 794 98.5
F5NCU 444 435 98.0
YO7BGA 762 746 97.9
VE2DWA 132 129 97.7
PA3ADJ 611 594 97.2


Callsign Total rQSOs with Ws rNILs against Ws
N4PN 38 18
K5GO 224 17
K1TTT 147 14
N6RO 286 13
W3LPL 237 12
W0AIH 135 11
K3LR 184 10
NQ4I 185 10
AA6DY 62 9
NR4M 51 9


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
N4PN 38 18 47.4
KG4FSN 26 7 26.9
N2KPB 39 9 23.1
K2BA 33 7 21.2
N2MM 29 6 20.7
KB9YGD 30 6 20.0
K2AX 47 9 19.1
W4MYA 32 6 18.8
NR4M 51 9 17.6
AA6DY 62 9 14.5

On the basis of these tables, a closer look at N7DD's entry in the SSB contest would probably have been in order, as his rNIL rate against Ws was nearly twice that of the next station in the table. Possibly N4PN's entry in the CW contest was worthy of a closer look as well.

2020-06-16

Reverse NILs in CQ WW: 2005

Using the augmented public logs of the CQ WW contests, one of the many analyses that can easily be performed is to see which entrants cause the largest number of NIL (Not-In-Log) strikes against stations who have logged them.

I should make it clear from the outset that NILs can and do occur naturally in contests. A typical instance would be when station A is CQing and is called by stations B and C simultaneously. Station A goes back to station B, but station C, for whatever reason, thinks that station A has come back to him. The common end result is that station A logs station B, but both stations B and C log station A. This will cause a NIL strike against station C -- this is a legitimate NIL strike, because station C never heard his call transmitted by station A, there was no QSO between those two stations, and station C should never have logged the non-existent QSO.

NILs, though, have occasionally been used as a weapon when a station deliberately does not log a perfectly valid QSO: this has no cost to the station that omits the QSO, but can cause a penalty (and perhaps loss of a multiplier or QSO points) against the station that he did not log.

Because of the way that scoring works in CQ WW, this behaviour is particularly pernicious in the case of intra-W QSOs (i.e., QSOs between two US stations). Intra-W QSOs are worth no points, but they do provide multipliers. As QSOs aren't worth any points, it is frowned on for an American station to make more than a handful of QSOs with other Ws, to obtain the necessary multipliers, as the calling station is generally wasting the time of the called station while he obtains the needed mult. The result of this is that if a W station does not log all W QSOs, he is likely depriving the other stations of necessary mults, as they will often not take out insurance QSOs to be sure of the mult, not wanting to waste the time of another station. Failure to log the QSO gives the station that does so a competitive advantage, as it therefore deprives other stations of a legitimately-worked mult, and causes penalties to be applied to the innocent parties -- at no cost to himself.

So I thought that it might be instructive to look at the public CQ WW logs to see which stations cause the largest numbers of NILs to be applied against stations who have claimed a QSO with them. (I call a NIL that is applied to the other station's log a reverse NIL, or rNIL.)

I made a couple of small adjustments to the basic idea outlined above:
  1. I required a minimum of 50 appearances in other stations' logs for a station to be included in the analysis (25 appearances in the case of purely intra-W QSOs);
  2. I removed all stations for which the analysis showed a 100% rNIL rate: this rate almost certainly occurred because of some basic error in the station's log, such as submitting a log that used a different callsign from the one actually used in the contest.
The code to perform the analysis is available here (feel free to let me know of bugs :-)). Below are the results of running this code against the logs for 2005.

2005 SSB:

Callsign Total rQSOs Total rNILs
HK3JJH 1820 1790
M7Z 1242 1166
EA1BVP 1957 972
IR8P 934 927
UU7J 4518 837
SP8IMG 1103 834
OR5N 678 668
JA6GCE 770 660
IZ8DPL 678 643
RU6MM 613 609


Callsign Total rQSOs Total rNILs % rNILs
IT9RBW 383 382 99.7
RU6MM 613 609 99.3
IR8P 934 927 99.3
DL5MK 132 131 99.2
W7QDM 114 113 99.1
TA0U 393 389 99.0
YB0AI 563 555 98.6
OR5N 678 668 98.5
FR1HZ 581 572 98.5
9A4RV 190 187 98.4


Callsign Total rQSOs with Ws rNILs against Ws
KC1XX 139 22
N2IC 91 17
N3RS 67 15
NQ4I 247 14
W4MYA 84 12
W0AIH 136 11
W3LPL 183 11
WB9Z 38 11
K3LR 226 10
W7WA 30 10


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
W7WA 30 10 33.3
K5NZ 25 8 32.0
WB9Z 38 11 28.9
NE3F 25 6 24.0
N3RS 67 15 22.4
N2IC 91 17 18.7
KC1XX 139 22 15.8
W9RE 32 5 15.6
W6YI 26 4 15.4
W4MYA 84 12 14.3

2005 CW:

Callsign Total rQSOs Total rNILs
J88DR 1734 1706
SM7YEA 1496 1488
OJ0B 2126 824
ZY7C 2316 715
UN6T 674 672
RK9CR 666 631
W3BGN 1648 611
Z37M 3983 605
KT1V 2557 550
S54A 973 545


Callsign Total rQSOs Total rNILs % rNILs
UN6T 674 672 99.7
W4ZW 329 328 99.7
SM7YEA 1496 1488 99.5
PV8AZ 82 81 98.8
S52P 389 384 98.7
PY8MGB 457 451 98.7
SP9UOP 204 201 98.5
J88DR 1734 1706 98.4
W1WFZ 176 172 97.7
K1OZ 66 64 97.0


Callsign Total rQSOs with Ws rNILs against Ws
W5UN 34 27
K9NS 181 25
NQ4I 229 12
K3LR 170 11
K1TTT 131 7
K1RX 125 7
KT1V 37 7
K5GO 171 6
K1AR 55 6
W5KFT 66 6


Callsign Total rQSOs with Ws Total rNILs against Ws % rNILs against Ws
W5UN 34 27 79.4
K2QMF 25 5 20.0
KT1V 37 7 18.9
W3BGN 25 4 16.0
K9NS 181 25 13.8
K0EU 26 3 11.5
W2RE 27 3 11.1
K1AR 55 6 10.9
K2LE 47 5 10.6
K4XS 40 4 10.0


A word about these old logs: they contain many formatting and other errors compared to modern logs (for example, the "zones" field might contain serial numbers, even though the correct zone was actually transmitted), so many of the results should not be taken at face value. For example, the second and sixth tables above indicate an unrealistic percentage of rNILs from all the stations in the table. On the other hand, the large difference between W5UN and all the other lines in the final table suggests that one might want to investigate the cause, if one were interested. Generally speaking, and especially in these old, low-quality logs, it's a good idea to focus on what appear to be anomalous stations, rather than attaching too much credence to the raw numbers in the tables.

(If one suspected a particular station of purposefully failing to log QSOs, several statistical approaches suggest themselves. One presumes that nowadays the contest committee would quickly resolve the issue by requesting the required audio recording of the contest from the suspected station.)

2020-05-28

Creating a Local Database From FCC Public Files

The FCC don't make it particularly easy to query their database(s) to find useful information related to a licensee. Yes, there is the web-based "License Search" page, but that's not useful for broader questions (to create a random example: how many Advanced class licensees are there in Texas?).

Fortunately, it's fairly easy to generate a local version of the FCC database, thereby allowing one to use classical tools (such as, for example,  awk) to obtain rapid answers to queries that one deems interesting.

The FCC generates a series of data files weekly (on Sunday), and makes those available over the Internet. (They also generate daily files of changes, as described here.) This allows interested parties to download the data, merge and simplify them, and generate a local file that contains the interesting/useful information.

In total there are eight data files, typically identified by a two-character tag: AM, CO, EN, HD, HS, LA, SC or SF. Each file contains a number of records, and the contents of each record is documented (lightly) in this document. Unfortunately, although that document gives the name of each field, it's not always obvious from the name what the field actually contains. Many (but far from all) fields are documented here; other fields are a matter for guesswork, or even a shrug of the shoulders.

Anyway, for the most part it's easy to combine all the useful fields from the eight data files into a single file in which each record is identified by a (unique) callsign. In practice, it turns out that, at least to my eyes, only the first four of the named data files contain information of general interest.

Consequently, I have created a file, updated weekly (on a Monday) that combines the more interesting data from the eight published data files. The records in this file are delimited by linefeeds, and fields within each record, as in the original data files, are separated by the standard UNIX pipe character, "|". Each output record contains 48 fields.

The contents of the eight original files are described in this document as follows:

Amateur
Position Data Element Definition
[AM]
1   Record Type [AM]            char(2)
2   Unique System Identifier    numeric(9,0)
3   ULS File Number             char(14)
4   EBF Number                  varchar(30)
5   Call Sign                   char(10)
6   Operator Class              char(1)
7   Group Code                  char(1)
8   Region Code                 tinyint
9   Trustee Call Sign           char(10)
10  Trustee Indicator           char(1)
11  Physician Certification     char(1)
12  VE Signature                char(1)
13  Systematic Call Sign Change char(1)
14  Vanity Call Sign Change     char(1)
15  Vanity Relationship         char(12)
16  Previous Call Sign          char(10)
17  Previous Operator Class     char(1)
18  Trustee Name                varchar(50)

Comments
Position Data Element Definition
[CO]
1   Record Type [CO]            char(2)
2   Unique System Identifier    numeric(9,0)
3   ULS File Number             char(14)
4   Call Sign                   char(10)
5   Comment Date                mm/dd/yyyy
6   Description                 varchar(255)
7   Status Code                 char(1)
8   Status Date                 mm/dd/yyyy

Entity
Position Data Element Definition
[EN]
1   Record Type [EN]                char(2)
2   Unique System Identifier        numeric(9,0)
3   ULS File Number                 char(14)
4   EBF Number                      varchar(30)
5   Call Sign                       char(10)
6   Entity Type                     char(2)
7   Licensee ID                     char(9)
8   Entity Name                     varchar(200)
9   First Name                      varchar(20)
10  MI                              char(1)
11  Last Name                       varchar(20)
12  Suffix                          char(3)
13  Phone                           char(10)
14  Fax                             char(10)
15  Email                           varchar(50)
16  Street Address                  varchar(60)
17  City                            varchar(20)
18  State                           char(2)
19  Zip Code                        char(9)
20  PO Box                          varchar(20)
21  Attention Line                  varchar(35)
22  SGIN                            char(3)
23  FCC Registration Number (FRN)   char(10)
24  Applicant Type Code             char(1)
25  Applicant Type Code Other       char(40)
26  Status Code                     char(1)
27  Status Date                     mm/dd/yyyy

1   Record Type [HD]                            char(2)
2   Unique System Identifier                    numeric(9,0)
3   ULS File Number                             char(14)
4   EBF Number                                  varchar(30)
5   Call Sign                                   char(10)
6   License Status                              char(1)
7   Radio Service Code                          char(2)
8   Grant Date                                  mm/dd/yyyy
9   Expired Date                                mm/dd/yyyy
10  Cancellation Date                           mm/dd/yyyy
11  Eligibility Rule Num                        char(10)
12  Reserved                                    char(1)
13  Alien                                       char(1)
14  Alien Government                            char(1)
15  Alien Corporation                           char(1)
16  Alien Officer                               char(1)
17  Alien Control                               char(1)
18  Revoked                                     char(1)
19  Convicted                                   char(1)
20  Adjudged                                    char(1)
21  Reserved                                    char(1)
22  Common Carrier                              char(1)
23  Non Common Carrier                          char(1)
24  Private Comm                                char(1)
25  Fixed                                       char(1)
26  Mobile                                      char(1)
27  Radiolocation                               char(1)
28  Satellite                                   char(1)
29  Developmental or STA or Demonstration       char(1)
30  InterconnectedService                       char(1)
31  Certifier First Name                        varchar(20)
32  Certifier MI                                char(1)
33  Certifier Last Name                         varchar(20)
34  Certifier Suffix                            char(3)
35  Certifier Title                             char(40)
36  Female                                      char(1)
37  Black or African-American                   char(1)
38  Native American                             char(1)
39  Hawaiian                                    char(1)
40  Asian                                       char(1)
41  White                                       char(1)
42  Hispanic                                    char(1)
43  Effective Date                              mm/dd/yyyy
44  Last Action Date                            mm/dd/yyyy
45  Auction ID                                  integer
46  Broadcast Services - Regulatory Status      char(1)
47  Band Manager - Regulatory Status            char(1)
48  Broadcast Services - Type of Radio Service  char(1)
49  Alien Ruling                                char(1)
50  Licensee Name Change                        char(1)
51  Whitespace Indicator                        char(1)

History
Position Data Element Definition
[HS]
1   Record Type [HS]            char(2)
2   Unique System Identifier    numeric(9,0)
3   ULS File Number             char(14)
4   Call Sign                   char(10)
5   Log Date                    mm/dd/yyyy
6   Code                        char(6)

License Attachment
Position Data Element Definition
[LA]
1   Record Type [LA]            char(2)
2   Unique System Identifier    numeric(9,0)
3   Call Sign                   char(10)
4   Attachment Code             char(1)
5   Attachment Description      varchar(60)
6   Attachment Date             mm/dd/yyyy
7   Attachment File Name        varchar(60)
8   Action Performed            char(1)

Special Condition
Position Data Element Definition
[SC]
1   Record Type [SC]            char(2)
2   Unique System Identifier    numeric(9,0)
3   ULS File Number             char(14)
4   EBF Number                  varchar(30)
5   Call Sign                   char(10)
6   Special Condition Type      char(1)
7   Special Condition Code      int
8   Status Code                 char(1)
9   Status Date                 mm/dd/yyyy

License Free Form Special Condition
Position Data Element Definition
[SF]
1   Record Type [SF]                    char(2)
2   Unique System Identifier            numeric(9,0)
3   ULS File Number                     char(14)
4   EBF Number                          varchar(30)
5   Call Sign                           char(10)
6   License Free Form Type              char(1)
7   Unique License Free Form Identifier numeric(9,0)
8   Sequence Number                     integer
9   License Free Form Condition         varchar(255)
10  Status Code                         char(1)
11  Status Date                         mm/dd/yyyy
The following extract from the code that creates the output database maps these on a one-to-one basis to internal identifiers:

[AM]
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
OPERATOR_CLASS,
GROUP_CODE,
REGION_CODE,
TRUSTEE_CALLSIGN,
TRUSTEE_INDICATOR,
PHYSICIAN_CERTIFICATION,
VE_SIGNATURE,
SYSTEMATIC_CALLSIGN_CHANGE,
VANITY_CALLSIGN_CHANGE,
VANITY_RELATIONSHIP,
PREVIOUS_CALLSIGN,
PREVIOUS_OPERATOR_CLASS,
TRUSTEE_NAME
 [CO]
RECORD_TYPE,
ID,
ULS_NUMBER,
CALLSIGN,
COMMENT_DATE,
DESCRIPTION,
STATUS_CODE,
STATUS_DATE
 [EN]
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
ENTITY_TYPE,
LICENSE_ID,
ENTITY_NAME,
FIRST_NAME,
MIDDLE_INITIAL,
LAST_NAME,
SUFFIX,
PHONE,
FAX,
EMAIL,
STREET_ADDRESS,
CITY,
STATE,
ZIP_CODE,
PO_BOX,
ATTENTION_LINE,
SGIN,
FRN,
APPLICANT_TYPE_CODE,
APPLICANT_TYPE_CODE_OTHER,
STATUS_CODE,
STATUS_DATE
 [HD]
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
LICENSE_STATUS,
RADIO_SERVICE_CODE,
GRANT_DATE,
EXPIRED_DATE,
CANCELLATION_DATE,
ELIGIBILITY_RULE_NUM,
RESERVED_1,
ALIEN,
ALIEN_GOVERNMENT,
ALIEN_CORPORATION,
ALIEN_OFFICER,
ALIEN_CONTROL,
REVOKED,
CONVICTED,
ADJUDGED,
RESERVED_2,
COMMON_CARRIER,
NON_COMMON_CARRIER,
PRIVATE_COMM,
FIXED,
MOBILE,
RADIOLOCATION,
SATELLITE,
DEVELOPMENTAL_STA_DEMONSTRATION,
INTERCONNECTED_SERVICE,
CERTIFIER_FIRST_NAME,
CERTIFIER_MIDDLE_INITIAL,
CERTIFIER_LAST_NAME,
CERTIFIER_SUFFIX,
CERTIFIER_TITLE,
FEMALE,
BLACK_AFRICAN_AMERICAN,
NATIVE_AMERICAN,
HAWAIIAN,
ASIAN,
WHITE,
HISPANIC,
EFFECTIVE_DATE,
LAST_ACTION_DATE,
AUCTION_ID,
BROADCAST_SERVICES_REGULATORY_STATUS,
BAND_MANAGER_REGULATORY_STATUS,
BROADCAST_SERVICES_SERVICE_TYPE,
ALIEN_RULING,
LICENSEE_NAME_CHANGE,
WHITESPACE_INDICATOR
 [HS]
RECORD_TYPE,
ID,
ULS_NUMBER,
CALLSIGN,
LOG_DATE,
CODE
 [LA]
RECORD_TYPE,
ID,
CALLSIGN,
ATTACHMENT_CODE,
ATTACHMENT_DESCRIPTION,
ATTACHMENT_DATE,
ATTACHMENT_FILENAME,
ACTION_PERFORMED
 [SC]
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
SPECIAL_CONDITION_TYPE,
SPECIAL_CONDITION_CODE,
STATUS_CODE,
STATUS_DATE
 [SF]
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
LICENSE_FREEFORM_TYPE,
UNIQUE_LICENSE_FREEFORM_ID,
SEQUENCE_NUMBER,
LICENSE_FREEFORM_CONDITION,
STATUS_CODE,
STATUS_DATE

The 48 output fields selected from the above lists are (arranged in groups of ten for easy counting):

ID,
CALLSIGN,
OPERATOR_CLASS,
GROUP_CODE,
REGION_CODE,
TRUSTEE_CALLSIGN,
TRUSTEE_INDICATOR,
SYSTEMATIC_CALLSIGN_CHANGE,
VANITY_CALLSIGN_CHANGE,
VANITY_RELATIONSHIP,

PREVIOUS_CALLSIGN,
PREVIOUS_OPERATOR_CLASS,
TRUSTEE_NAME,
COMMENT_DATE,
DESCRIPTION,
CO_STATUS_CODE, (i.e., STATUS_CODE from [CO])
CO_STATUS_DATE, (i.e., STATUS_DATE from [CO])
ENTITY_NAME,
FIRST_NAME,
MIDDLE_INITIAL,

LAST_NAME,
SUFFIX,
PHONE,
FAX,
EMAIL,
STREET_ADDRESS,
CITY,
STATE,
ZIP_CODE,
PO_BOX,

ATTENTION_LINE,
FRN,
APPLICANT_TYPE_CODE,
APPLICANT_TYPE_CODE_OTHER,
EN_STATUS_CODE, (i.e., STATUS_CODE from [EN])
EN_STATUS_DATE, (i.e., STATUS_DATE from [EN])
LICENSE_STATUS,
RADIO_SERVICE_CODE,
GRANT_DATE,
EXPIRED_DATE,

CANCELLATION_DATE,
ELIGIBILITY_RULE_NUM,
REVOKED,
CONVICTED,
ADJUDGED,
EFFECTIVE_DATE,
LAST_ACTION_DATE,
LICENSEE_NAME_CHANGE
The contents of these fields are based on the original equivalent entries in the original data files. The entries for the fields are subject to the following transformations before being written to the output file:
  • The entry is converted to upper case;
  • Any line feeds (yes, the FCC allows line feeds within a field) are converted to the four-character sequence: <LF>;
  • Leading and trailing spaces are removed;
  • If the field is a date, it is converted from FCC format (mm/dd/yyyy) to ISO 8601 extended format: YYYY-MM-DD.
The latest output file created in this manner (and its MD5 checksum) may be downloaded from this directory.

The full source code to generate the output file may be downloaded here.

To create the binary from the source code, go to the directory that contains the makefile and type:
make fcc-db
This should generate the executable program as: bin/fcc-db. The program may be executed from within the bin directory as:
fcc-db [directory]
where [directory] is the name of the directory that contains the input FCC AM.dat, CO.dat, EN.dat and HD.dat files. Those files should be processed and the output written to stdout.

For what it's worth, it takes somewhat less than 15 seconds for the program to execute to completion on my desktop computer if stdout is redirected to an output file.

2020-05-26

RBN Posts From Current Year Added

The RBN data directory on adrive now contains a file of the RBN posts from the current year. This file is updated once per week, on Monday. As before, files containing all the posts from prior years are available in the same directory.