10 minute tutorial

Add a date

In the text area, type 2016-11-16

This is 16th November 2016 in ISO format.

Add an aircraft

On the next line down, type G-EZUS:A320

This is the A320 with registration G-EZUS.

Add a sector

On the next line down, type BRS/GLA 1730/1830

This is a sector from Bristol to Glasgow, off blocks at 17:30z and on blocks at 18:30z.

Run the parser

You should now have:

2016-11-16
G-EZUS:A320
BRS/GLA 1730/1830

Click Run Parser

You should see a Sectors box open with an entry for the sector:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Self", "p1"

This is the sector in Comma Separated Values (CSV) format, where fields are separated with commas and strings enclosed in straight double quotes. CSV format is recognised by spreadsheets, so this line can be copied in the browser and pasted into a spreadsheet and the spreadsheet will be able to divide it into columns. With Google Sheets, after pasting, a clipboard icon opens next to the pasted text with the option Split text into columns. This functionality is also available via Data > Split text into columns. LibreOffice Calc and other spreadsheets offer similar functionality.

The fields are:

  1. Off Blocks in ISO Datetime format
  2. Flight duration in minutes
  3. Night flying duration in minutes
  4. Departure airport
  5. Arrival airport
  6. Aircraft registration
  7. Aircraft type
  8. Captain's name
  9. Role

Add the return sector

On the next line down, type / 1900/2000, then re-run the parser. The sectors box should now show:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Self", "p1"
2016-11-16 19:00:00, 60, 0, "GLA", "BRS", "G-EZUS", "A320", "Self", "p1"

If the departure and/or arrival airports are omitted, the departure airport is assumed to be the arrival airport of the previous sector, and vice versa. Also note that the date and aircraft are carried forward, and that the order of these lines is not important as long as once a sector is encountered, a date and an aircraft have been specified.

Add an aircraft swap, then an Edinburgh and back

On the next lines down, add G-EZOK:A320, /EDI 2030/2130 and / 2200/2300. You should now have:

2016-11-16
G-EZUS:A320
BRS/GLA 1730/1830
/ 1900/2000
G-EZOK:A320
/EDI 2030/2130
/ 2200/2300

Running the parser now gives:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Self", "p1"
2016-11-16 19:00:00, 60, 0, "GLA", "BRS", "G-EZUS", "A320", "Self", "p1"
2016-11-16 20:30:00, 60, 0, "BRS", "EDI", "G-EZOK", "A320", "Self", "p1"
2016-11-16 22:00:00, 60, 0, "EDI", "BRS", "G-EZOK", "A320", "Self", "p1"

Add the duty times

On the next line down add 1630/2330 so that the text area looks like:

2016-11-16
G-EZUS:A320
BRS/GLA 1730/1830
/ 1900/2000
G-EZOK:A320
/EDI 2030/2130
/ 2200/2300
1630/2330

Running the parser will now open a Duties section, with the following contents:

2016-11-16 16:30:00, 420

This is the duty start time in ISO Datetime format and the length of the duty in minutes in CSV format. Again, this can be copied from the browser and pasted into a spreadsheet and the spreadsheet will be able to divide the columns properly.

Night flying

Let us assume that sectors 2 to 4 inclusive are night flights. Modify the text area by adding the night flag, n to sectors 2 to 4 so that it looks like this:

2016-11-16
G-EZUS:A320
BRS/GLA 1730/1830
/ 1900/2000 n
G-EZOK:A320
/EDI 2030/2130 n
/ 2200/2300 n
1630/2230

Running the parser now gives:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Self", "p1"
2016-11-16 19:00:00, 60, 60, "GLA", "BRS", "G-EZUS", "A320", "Self", "p1"
2016-11-16 20:30:00, 60, 60, "BRS", "EDI", "G-EZOK", "A320", "Self", "p1"
2016-11-16 22:00:00, 60, 60, "EDI", "BRS", "G-EZOK", "A320", "Self", "p1"

Note that the third column now matches the second column for sectors 2 to 4.

Not the Captain?

Above the first sector add {CP:Bloggs Jo} so that the text area looks like:

2016-11-16
G-EZUS:A320
{CP:Bloggs Jo}
BRS/GLA 1730/1830
/ 1900/2000 n
G-EZOK:A320
/EDI 2030/2130 n
/ 2200/2300 n
1630/2230

Running the parser now changes the sectors box to:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Bloggs", "p1s"
2016-11-16 19:00:00, 60, 60, "GLA", "BRS", "G-EZUS", "A320", "Bloggs", "p1s"
2016-11-16 20:30:00, 60, 60, "BRS", "EDI", "G-EZOK", "A320", "Bloggs", "p1s"
2016-11-16 22:00:00, 60, 60, "EDI", "BRS", "G-EZOK", "A320", "Bloggs", "p1s"

The parser assumes maximum responsibility, so it puts you down as p1s for all the sectors. Assume that you “did the middle two”, and add p2 flags to sectors 1 and 4, such that the text area looks like this:

2016-11-16
G-EZUS:A320
{CP:Bloggs Jo}
BRS/GLA 1730/1830 p2
/ 1900/2000 n
G-EZOK:A320
/EDI 2030/2130 n
/ 2200/2300 n p2
1630/2230

Running the parser now gives you:

2016-11-16 17:30:00, 60, 0, "BRS", "GLA", "G-EZUS", "A320", "Bloggs", "p2"
2016-11-16 19:00:00, 60, 60, "GLA", "BRS", "G-EZUS", "A320", "Bloggs", "p1s"
2016-11-16 20:30:00, 60, 60, "BRS", "EDI", "G-EZOK", "A320", "Bloggs", "p1s"
2016-11-16 22:00:00, 60, 60, "EDI", "BRS", "G-EZOK", "A320", "Bloggs", "p2"

The flag put may be used instead of p2 if appropriate.

{CP:Self} may be used to switch back to yourself as Captain. If you are flying with a Captain who has the surname “Self”, you can use a p1s flag to limit the confusion.

Other crew members

When you declared the Captain in the previous section, a Crew section will have opened up. This allows you to record the rest of the crew on your flight, should you desire to do so. Change {CP:Bloggs} to {CP:Bloggs Jo, PU:Smith Jane, FA:Brown Mike, FA:Taylor Liz}, so that the text area looks like:

2016-11-16
G-EZUS:A320
{CP:Bloggs Jo, PU:Smith Jane, FA:Brown Mike, FA:Taylor Liz}
BRS/GLA 1730/1830 p2
/ 1900/2000 n
G-EZOK:A320
/EDI 2030/2130 n
/ 2200/2300 n p2
1630/2230

Running the parser now changes the Crew section to:

2016-11-16 17:30:00, "CP:Bloggs Jo", "PU:Smith Jane", "FA:Brown Mike", "FA:Taylor Liz"
2016-11-16 19:00:00, "CP:Bloggs Jo", "PU:Smith Jane", "FA:Brown Mike", "FA:Taylor Liz"
2016-11-16 20:30:00, "CP:Bloggs Jo", "PU:Smith Jane", "FA:Brown Mike", "FA:Taylor Liz"
2016-11-16 22:00:00, "CP:Bloggs Jo", "PU:Smith Jane", "FA:Brown Mike", "FA:Taylor Liz"

Still too much effort

I agree.

Right click this link and choose to download the file. This is my AIMS detailed roster for 5 days at the start of June 2016. You can now click the button below the text area on the left marked Choose file, Browse or similar (browser dependent) and select this file for upload.

If all goes well, the text area will look like this:

2016-06-05
1155/2255
{ FO:Alton Thomas, PU:Vaughan Lana, FA:Evans Emma, FA:Hardy Michelle, FA:Mesterhazi Beata }
BRS/BSL 1253/1431
BSL/BRS 1505/1646
BRS/BCN 1728/1928
BCN/BRS 2015/2225 n

2016-06-06
1745/0022
{ FO:Carter Yannick, PU:Smith Emma, FA:Avent Joy, FA:Lewis Anna, FA:Norman Lauren }
BRS/PMI 1850/2100
PMI/BRS 2139/2352 n

2016-06-07
1620/2250
{ FO:Fisher Stuart, PU:Harkin Gemma Lr, FA:Collard Joseph, FA:Eyles Hannah, FA:Rivilla Rodriguez R }
BRS/PSA 1725/1926
PSA/BRS 2001/2220

2016-06-08
1205/2222
{ FO:Alton Thomas, PU:Jones Laura, FA:Adams Charlotte, FA:Eyles Hannah, FA:Sleman Andrew }
BRS/LIS 1303/1524
LIS/BRS 1603/1827
BRS/BFS 1916/2026
BFS/BRS 2051/2152 n

2016-06-09
1410/1854
{ FO:Fisher Stuart, PU:Fido Julie, FA:Balas Lucile, FA:Greenham Abigail Ja, FA:White Samantha }
BRS/CDG 1510/1613
CDG/BRS 1704/1824

This means that you can get most of your logbook data entered simply by downloading a detailed roster from AIMS and feeding it to this function. The AIMS roster does not have everything; you will still need to add aircraft registration and type and, if you were p2 or put.

The AIMS detailed roster format is subject to change without notice and to scrape this data requires a large number of assumptions. This function is thus likely to be fairly brittle, particularly as the format has very recently changed. If it doesn't work, you can try downloading shorter sections of the roster, avoiding anything that looks unusual. If you isolate a problem, please send me a copy at hursts.org+badroster@gmail.com and I will attempt to change the code to make it work.

The spreadsheet

This service will most likely be useful to people who already use a spreadsheet of their own design for their logbook. If you haven't already created one, I did create a logbook spreadsheet to test the methodology, which may be a useful starting point. In particular, the “Scratch” tab demonstrates how you can easily mould the data to your own designs: paste sectors on the left side to get an alternate format on the right.

Future-proofing

The absolutely critical question with respect to logbook data is how to avoid losing it. Firstly, it needs to be in a file format that is very widely used in order to minimise the danger of loss through software obsolescence. Secondly, it needs to be created with software that is very well tested, i.e. it has a very large installed user base. This minimises the chance of an undiscovered software bug insidiously corrupting your data. Lastly, it needs to be easily transportable, such that you can regularly place copies of the file in diverse locations so that no feasible combination of hardware failures can destroy your data.

My solution is to use a widely used open source database server (MariaDB) in combination with an overall backup strategy based on Borg. This solution is a little complex to set up, however.

Spreadsheets would seem to be a reasonable compromise. They are fairly easy to work with, many people already have experience with them, and their installed user base is huge. If you use an online spreadsheet such as Google Sheets, you automatically have an off-site backup, so an occasional download to your local machine will give you pretty good protection against hardware failures.

The major problem with spreadsheets is that data entry is soul crushingly tedious. The purpose of this service is to reduce some of that tedium. It is intentionally not critical that the service continues to exist; there will always be the fallback of manual data entry straight into the spreadsheet.

What are the chances of the service suddenly ceasing to exist? The code that does the heavy lifting is actually part of my own logbook process, and I will therefore continue to maintain it while I am at easyJet. The service is hosted on Amazon Lambda, meaning it costs me less than a penny a month to run. I have also released the code under the open source GPLv3 licence; anyone can use it or improve it as they see fit. Essentially, there is no incentive for me to stop providing this service, and if I do, it is fairly trivial for someone else to provide a replacement.