Command Line Interface

The command line interface works as a filter program, i.e. input comes from STDIN, output goes to STDOUT and error messages are sent to STDERR.

There are two categories of tools: those that output a modified version of the input and those that output a file in a different format. For example the first category includes the ability to insert calculated night flying into the eFJ, whereas the latter includes the ability to output an HTML logbook.

In the examples below, replace efj_file with the path to your eFJ. It is assumed that the toolkit has been installed with pip or pipx and as such the entry point efj has been made available in a location that is included in your PATH environmental variable.

Modification

Expand

The eFJ scheme aims to make it as easy as possible to manually enter flight data where no better alternative is available. To support this, a couple of short forms are allowed that infer data from previous data. This tool expands out these short forms, which makes them more human legible:

$ efj expand < efj_file

The input:

2024-01-01
G-ABCD:A320
BRS/BFS 1000/1100
/ 1200/1300

+
/ 0900/1000
/ 1100/1200

gives the output:

2024-01-01
G-ABCD:A320
BRS/BFS 1000/1100
BFS/BRS 1200/1300

2024-01-02
BRS/BFS 0900/1000
BFS/BRS 1100/1200

Night

Updates the eFJ with calculated night duration and, where necessary, night landing:

$ efj night < efj_file

The input:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700
BFS/BRS 1800/1900

gives the output:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700 n:20 ln
BFS/BRS 1800/1900 n

If night duration is already recorded for any sector, that sector is not updated.

VFR

Adds a flag to every sector to indicate that it was flown under visual flight rules:

$ efj vfr < efj_file

The input:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700
BFS/BRS 1800/1900

gives the output:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700 v
BFS/BRS 1800/1900 v

FO

When no role flag is included, it is assumed that the role was p1. This means that First Officers must mark each sector as p1s, p2 or put. Captains, on the other hand, just have to mark sectors where they were PM for the landing with m. This tool allows First Officers to use m and then auto-fill the roles as p1s or p2.

$ efj fo < efj_file

The input:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700 m
BFS/BRS 1800/1900

gives the output:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700 p2 m
BFS/BRS 1800/1900 p1s

Instructor

Adds the ins flag to any sector that does not already have it.

$ efj ins < efj_file

The input:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700
BFS/BRS 1800/1900

gives the output:

2024-01-01
G-ABCD:A320
BRS/BFS 1600/1700 ins
BFS/BRS 1800/1900 ins

Conversion

FCL.050 Logbook

The Acceptable Means of Compliance (AMC) concerning recording of flight time can be found on EASA’s website. This tool converts the eFJ into a standalone HTML file with the suggested layout, minus the simulator columns. The created file can then be viewed in any web browser and, since it has no external dependencies, can be moved around at will. It is also simple enough that it can be successfully imported into spreadsheets, word processors et cetera. If you would like a PDF it can be created with your browser’s print function, but I would recommend Prince XML for this purpose; it produces very high quality output and is free for personal use.

The AMC for FCL.050 requires that each sector is classified as single pilot, single engine; single pilot, multi engine; or multi crew. The eFJ scheme allows this information to be recorded on a sector by sector basis but does not specify a default value to use when no classification flag is added. The expectation is that these flags will nearly always be omitted, requiring that the classification is inferred from the aircraft type by the external tool that is processing the eFJ.

The command line interface uses an INI file to supply the required extra information. This INI file can either be referenced with a command line switch (see below) or placed in one of the default locations: these are ~/.efjtkrc or ~/.config/efjtkrc. A template for the INI file can be created by running the eFJ you are intending to turn into a logbook through the command:

$ efj config < efj_file

This produces a file that looks something like this:

[aircraft.classes]
c152 = spse
c404 = spse
c406 = spse
737 = spse
a320 = spse

The possible classifications are spse for single pilot, single engine; spme for single pilot, multi engine or mc for multi crew. The example template would therefore need to be modified to:

[aircraft.classes]
c152 = spse
c404 = spme
c406 = spme
737 = mc
a320 = mc

If the INI file is saved to one of the default locations, the HTML logbook can be produced with:

$ efj logbook < efj_file

If you want to keep the INI file in a non-default location, use:

$ efj logbook --config my_ini_path < efj_file

Summary

The summary tool provides various statistics for the eFJ as a standalone HTML file, which can be viewed in any web browser. Since this has no external dependencies it may be moved at will. It is also simple enough that it can be imported by spreadsheets, word processors, et cetera.

The results are in the form of three tables: Roles; Conditions; and Landings:

  • The Roles table gives a breakdown of flying hours by role (i.e. p1, p1s, p2, put) and aircraft type.

  • The Conditions table gives a breakdown of flying hours by flight conditions (i.e. VFR vs IFR and day vs night) and aircraft type.

  • The Landings table gives a breakdown of the number of day and night landings by aircraft type.

$ efj summary < efj_file