Thursday, March 18, 2021

Saved Searches and Flight Coloring

Do you ever find yourself doing the same search over and over?  Want to highlight your flight reviews or IPCs to make them easy to spot in a printout?

MyFlightbook allows you to name a search (aka "query") for future use.  It's pretty simple to use.  To give a search a name, use the drop-arrow next to the search box:

Just type in a name, and when you click "Find Matching Flights", you will not only see the results of the search, but the search will have been saved in your account as well.

The image above is from the website, but it's the same basic idea on the mobile apps; you can give it a name on the bottom of the screen where you fill in the search form.

Previously created queries are listed below the edit box where you type the name:

Click on the name of the search to apply it, or click the red "X" to delete it.  

You can update an existing saved query by simply re-using its name with a new search.

This can be super handy for common searches.  Each year at tax time, for example, I want to know about my angel flights from the previous year (that's the query that's shown above).

Flight Coloring

Saved searches are a nice power feature, but where they get really powerful is when you combine them with a relatively new feature: Flight Coloring.

Flight coloring allows you to specify a background color to use in the logbook display for flights that match a saved search that you have created.

Flight Coloring is a two step process: first, save the search with a name.  Then, go to Preferences (under the Profile menu)

You'll see all of your saved searches there; next to it, you'll see a sample area.  Click that and you can choose a background color (pale colors work best), or click "Remove Color" to remove the color.  

Your logbook will then display matching flights using the color you've selected:

You can even choose to have these flights highlighted in the print layout - this can be useful, for example, if you are going for a job interview and want to make it easy to find finds that are significant to demonstrate experience or training.

Wednesday, March 10, 2021

Pending Flights

Can a flight be in your account but not in your logbook?  Yes.  MyFlightbook supports the notion of a "pending flight", which is simply a flight that is awaiting (pending) addition to your logbook.

Pending flights are designed primarily to address two scenarios:

  • You fly professionally and have a schedule of upcoming flights.  You might want to get those into the system before you fly them, but obviously you can't claim the time or experience before actually doing so.
  • You perform a bulk import and some of the flights have errors.  The flights with errors can be moved into the list of pending flights, allowing the error-free flights to be added to your logbook.  You can then fix the errors at your leisure.

There are other scenarios as well, of course, but those are the big ones.

There are two main features of a pending flight that distinguish it from a regular flight.  The first is that it is NOT included as a flight in your logbook: it is ignored for purposes of computing totals, currency, visited airports, and so forth.  Think of it as a scratch pad for flights.  The second is that error checking is basically suppressed.  You can have a pending flight in the future, you can have one that does not have an aircraft assigned, or that violates other integrity checks.  Obviously, a pending flight with such errors in it cannot be added to your logbook until the errors are addressed.

Creating Pending Flights

The most common way for pending flights to be added to your account is via Import.  If you import a file and some flights have errors, you'll have the option to import anyhow, with flights containing errors shunted over to the pending flights list.  If so, you'll see something like this at the end of the process:

In the example above, 5 flights were imported but 2 of them had errors; they ended up in pending flights, and the other 3 were added to the logbook.

MyFlightbook can import from a variety of sources, including some scheduling programs, which often lack required information such as the aircraft used for the flight.  These sources can only import to pending flights.  If you import debriefed flights from CloudAhoy, the same holds true - you will need to review these flights before adding them to your logbook.

The other way to create a pending flight is to do so explicitly when creating a flight.  Use the drop-menu next to the "Add Flight" button and you'll see the option to save as a pending flight instead of as a regular flight in your logbook:

Note that pending flights can have telemetry associated with them, but they cannot have images; you'll need to add any images after you add the flight to your logbook.

Reviewing Pending Flights

Go to "Pending Flights" under the Logbook tab to view any flights that are pending addition to your logbook.  You'll see a list of your pending flights (if any).  At the bottom is an option to bulk-delete them if you decide they were added in error or are an artifact from an import attempt prior to a successful import.

Otherwise, you can selectively delete pending flights that you don't need, or click on a flight in the list to edit it.  When you're done editing, click "Add Flight".  If you've addressed any errors in the flight, then the flight will be added to your logbook and removed from the pending flights list.  You can also use the menu next to the "Add Flight" button to update the pending flight.  Updating the flight preserves whatever changes you made, but keeps the flight in your pending flight list.

Mobile App Support

Both the iOS and the Android apps support pending flights.  The basic model is exactly the same, except that the pending flights are integrated into the recent flights list.  You can explicitly save a new flight as pending as well.  On Android, you can do this from the menu.  On iOS, tap the "action" icon (the box with an up-arrow) along the bottom toolbar.

Note that because the mobile apps can work while offline, they have another sense of the word "pending" that does not have meaning on the website: namely, the notion of having a flight that has not yet been uploaded to the server.  I am using the terminology "Awaiting Upload" to describe these flights.  So a flight that is "awaiting upload" is still local to your device, and may be waiting to go into your logbook or into pending flights, whereas a flight that is in your pending flights list is in fact up on the server and therefore available to any of your devices.

Tuesday, January 26, 2021

Can my logbook change without me doing anything?

The short answer is "yes."  Should you be concerned?  Well, obviously the only person who can answer that is you, but I think the answer is "no" and this post will go into excruciating detail about the ways in which your logbook can change without your action, and you will at least understand my perspective for why you shouldn't be concerned.

There are three ways your logbook can change without you doing anything.  A MyFlightbook admin can make a change; this is actually the only way that you logbook can be directly affected without any interaction on your part.  The second way is that an instructor can sign flights, revoke a signature, issue an endorsement, or add flights.  The other is that your logbook can be indirectly changed through a change to crowd-sourced data upon which it relies.

Allow me to address each of these scenarios. 

Site Admin Changes

Site admins can do anything to your logbook because they can emulate your account.  (There are other admins with lesser privileges too, who do not have this ability).  Why such great power?  Customer support, primarily: I can't track down an issue if I can't see what you see.  

This is, of course completely standard industry practice: when you call Amazon or Expedia or your bank, they can get into your account to some degree or another for precisely these reasons; they wouldn't be able to fix the quantity on your purchase, fix your reservation, or explain a credit card charge if they didn't have these tools.  These are trusted employees, and (particularly where money is involved!) the tools have audit trails so they can't do anything nefarious without getting caught.  And the system works.

I am one of two site admins, and I do pretty much all of the admin work.  I would estimate that more than 95% of the time that I emulate an account, I make no changes at all - I'm trying to track down a bug report, or explain why something is happening, or I need to see some data "in context" to inform a development decision and so forth.

But there are a (very) few scenarios where I will make a change to your logbook.

The most common reason - by far - is fixing aircraft.  I have a very specific way to do anonymous aircraft and sims/training devices to avoid conflicts with registered aircraft, but people will often create aircraft with tail numbers like "BE23" for an anonymous Beech 23 (which could conflict with a Chinese aircraft, which begin with "B") or "FTD" for a sim ("F" is the prefix for French aircraft).  No big deal, it's just a naming thing, and with the press of a button I can map your flights in the misnamed aircraft to the correctly named one and thus keep the set of aircraft clean.

Another area is images.  Data admins (data admins are a distinct set of admins, with more limited capabilities than site admins; all site admins are data admins, but not all data admins are site admins - think of them as Wikipedia editors) have the ability to review images for flights and/or aircraft, and remove any deemed inappropriate.  E.g., if it's porn, if there's a copyright complaint, etc.  Been months (maybe years?) since I last deleted such an image, but I will do it periodically.

There is only one other - rare - scenario where I will modify a flight of yours, that I can think of: signed Flights can sometimes be marked as having a valid signature when they are no longer in sync with what was signed, or vice-versa.  I periodically review these flights and set the state correctly.

That's really it for what ever might happen directly to your logbook without your participation.

Instructor changes

You can have an instructor sign a flight ad-hoc, but this requires that you be face-to-face with the instructor, so I don't think that counts as "without you doing anything".
 
But if you set up a student/instructor relationship with an instructor, you may grant them certain permission to make changes that they can exercise unless/until you revoke those permissions.

Specifically, an instructor can:
  • Issue new endorsements.  No specific permission is required - if they're your instructor, they can do this.  They cannot delete or edit endorsements.
  • Sign flights that you have requested that they sign.
  • If you've granted the instructor permission to view your logbook, they can also sign any unsigned flight they encounter (or re-sign any flight that they had originally signed but which has been modified), even if you did not request that signature.
  • If you've granted the instructor permission to add flights to your logbook, then they can, umm, add flights to your logbook.  They can also revoke signatures from flights that they have signed (e.g., if they mistakenly signed the wrong flight).

Crowd-sourcing Changes

Perhaps of more interest is the indirect stuff.  When you log a flight in N12345, your flight entry doesn't know anything about N12345 - it's just a reference to an aircraft somewhere else in the database.  And that aircraft, in turn, references a model definition that is in yet another location in the database.  So attributes like "it's a Boeing 737" or "it has a glass cockpit" are not stored in your flight.  See here for considerably more detail about how this all works, but the important thing is that the data about aircraft and models comes from the MyFlightbook user community - and can be edited by the MyFlightbook community as well.

The key point is that if the model of an aircraft that you fly changes, or if the definition of a model used by one of your aircraft changes, then your totals and/or your currency could potentially change.  Yikes!

Or is "yikes" an overreaction?

If you (or someone else) changes an aircraft or a model and you (or they) are the only person with any logbook references to that aircraft/model, then by definition there is no problem: the change made affects the person making the change and nobody else, thus all is good.

On the other hand, if the change is to an aircraft or model that is used by pilots other than the one making the change, then obviously that could be an issue.

In this scenario, an email goes out both to any data admins on the site as well as to any pilot potentially affected by the change.  The purpose of this is twofold: (a) the data admins will review the change.  That's non-negotiable.  But - often more importantly - (b) the affected pilots can see if there's any problem with the change, and they will contact the data admins if there is.  The affected pilots, kinda by definition, actually fly these aircraft and as a result know them better than any admin could.

The vast, vast, vast majority of these changes fall into one of two categories.  The details are described here, but the gist is that most edits are either:

  • A "minor" change that actually improves the accuracy of the data.  E.g., specifying that a "C-172" is actually a "C-172 P".  Either way, it's still a C-172, and your totals/currency/etc. don't change.
  • A more significant change, which ends up resulting in the aircraft being cloned.  Two common examples here are a tail number re-assignment (N12345 was a C-172 but is now a B-737) or an aircraft that is on wheels part of the year and floats on part of the year being edited to indicate the opposite undercarriage.  In this case, your logbook still doesn't change: the clone is detected automatically, and your logbook preserves a reference to the original, not the clone.  (You still get an email, in case the clone is either more accurate for you, or in case you want both versions.)

There are the occasional edits that are in error, or otherwise require reverting.  These are very rare (a few a month, perhaps) and typically corrected within hours of occurring. That's really the primary risk here.  But it is always (a) reviewed by a data admin, so it is (b) fixed promptly.

And the benefits of the two non-erroneous edit examples above vastly outweigh the downside of the rare and short-lived erroneous data.  (And, of course, rare-and-short-lived-erroneous-data happens all the time with curated data, not just crowd-sourced).

As I write this, MyFlightbook has 6-figures of users (wow!) and 8-figures of flights in the database, and has been around for 15 years.  And the examples of this leading to problems of inaccurate computations for things like totals/currency has been...basically nil.

There's one other set of data in MyFlightbook that allows for crowd-sourcing: airports.

Airports in MyFlightbook are a bit of an odd-duck: they're in the database, but they're not "connected" to your logbook in any meaningful way.  You can add airports to your flight that aren't in the airport database and it is no problem.  I keep old airport codes around as long as I can - after all, if you flew to KOLD years ago and it's now KNEW, then KOLD should continue to work.

At a high level, I use airports for 3 purposes:

  • Mapping your flight
  • Showing where you've been
  • In ratings progress, determining if you've met cross-country distance requirements

So if you have a flight that references XYZ and XYZ isn't in the database or refers to something other than what you thought it referred to ("LCL" being a great example - people use that for local flights, but it's an airport in Cuba), then the worst downsides are that your map looks wrong, there's in error computing where you've been, or MyFlightbook thinks you have or haven't met a rating requirement. But none of those are "material" - your logbook still accurately has the record of the flights you've taken and where you visited, as you recorded it.

Most of my airport data (currently over 58,000 airports, heliports, and seaports) comes from various (free) data sources, including the FAA.  Airports entered into the system are considered "native", and cannot be overwritten or deleted by anybody - not even an admin.  Well, OK, I suppose as site developer, I can go directly into the database and delete something...but I just don't do that because direct database access is juggling with very sharp running chainsaws; the point is, there's no tool to do this.

MyFlightbook users can add their own airports (currently over 2,500!).  This is a great addition to the system, with all of the aforementioned benefits of crowdsourcing.  These airports CAN be deleted by either the user who created them, or by a data admin (if they review and decide it's inappropriate for one reason or another), but not by other users.

There are a few changes that can occur in the airport database:

  • By far, the most common is that a new airport is added.  Note that if KOLD becomes KNEW, then I don't change the KOLD entry in the airport database, I add KNEW alongside it so that either code works for the airport.  I'll probably designate KNEW as "preferred", but KOLD will continue to work.
  • If a user enters an airport that looks like its in the same location as an existing airport, and it appears to be an "official" code for the airport (typically ICAO, IATA, or FAA), then I'll "absorb" it into the system, making it native.  Then it can't be deleted.
  • If a code assigned to one airport is assigned by an official organization (ICAO, IATA, FAA) to a new airport, then I'll overwrite the existing name/location for the code with the new name/location.  This is the scenario where KOLD used to be in California but is now an airport in Florida.  
  • I have a tool that looks for user-created airports that are duplicates of existing airports (e.g., with existing FAA or ICAO or IATA codes).  The idea is to try to find where someone made up a code for an airport but that didn't need to do so.  In this tool, I usually simply coalesce the airports and mark the official one as "preferred", but I can also decide to delete the (presumably) made-up airport code, especially if I'm worried about a potential conflict.  If I do this, then the "Route" field of the creating-user's flights containing that code is updated to reflect the remaining airport.  I've only rarely deleted airports in this manner, and because this maps to a more current code, it should map correctly and compute distances correctly. [Update Jan 26: I'm removing the piece of this code that updates the route for user flights].

With the exception of the last scenario, no flights for any users are changed.  The only change that you would notice is in the third scenario: if you have a flight with KOLD in the route, then it will map using the new location rather than the previous location.  Of course, that's what it would do in ForeFlight, Garmin, or any other mapping app, as you'd expect.  

I think it's more accurate to say that changes in the airport database don't change your logbook, but they can change the map or analysis of your logbook.

And that's about it.  Personally, I think the tradeoffs - the benefits of lots of eyes keeping the data accurate and up to date - vastly outweigh the rare and ephemeral errors.

Hopefully this explains what can - and cannot - be affected by MyFlightbook's crowd-sourcing.

Sunday, January 10, 2021

Models - In Depth and Best Practices

Aircraft and models on MyFlightbook are crowd-sourced and shared amongst its users.  This has a huge benefit for the comprehensiveness of the data and - with a bit of curation - with the accuracy of the data as well.  The ability for any registered user on the system to make changes here is a powerful tool.  Any powerful tool, however, carries risk if used incorrectly.  In this post, I'll talk about how the models part of system works, how it is properly used, and how the risk is managed.  (Spoiler alert: in practice, the system works well and so the risk is negligible.)

The difference between an aircraft and a model on MyFlightbook

The important thing to understand on MyFlightbook is that a "model" encapsulates a set of attributes that are common across a set of multiple airframes.  This includes attributes like the category/class of the aircraft, whether it is turbine or piston, high-performance, has retractable gear, and so forth. For more detailed information, please read my previous post.
 
So, for example, there is one "Cessna C-172 R" in the system, but there are (as of this writing) nearly 1,600 distinct aircraft in the system that are tied to the "Cessna C-172 R" model.  It is the "Cessna C-172 R" model that captures the fact that it is an airplane, single-engine/land ("ASEL"), piston, not high-performance, not tailwheel, ICAO code "C172", marketing name "Skyhawk", and so forth.

Data points that vary from airframe-to-airframe are stored on that aircraft's record in the database.  The tail number (registration) is the most obvious such piece of data, but there are private notes (notes only you can see), shared notes (visible to anyone who flies that aircraft), maintenance records, glass/TAA upgrades, and other data.

It's worth briefly pointing out two special cases within this model.  The first is that not all aircraft in the system are flying machines - some are training devices/sims.  While there are some special rules around these, you use them in your account the same way you would use any other aircraft, it's just that instead of being a flying machine it's an ATD or an FTD or an FFS.  In fact, some models of aircraft (such as anything created by Frasca or Redbird) are flagged as "Sim only", so the system knows not to let you create registered aircraft with that model.  See here for more information about simulators/training devices.

The other special case is that of an "anonymous" aircraft.  An anonymous aircraft is just like any other aircraft, except that it has no specific tail number.  Internally, it has a pseudo-tailnumber that is the hash mark (#) followed by a series of digits that represent the model.  For example, the anonymous C-172R is "#000099". That tail number is used for unambiguous identification of an aircraft when importing/exporting, but in general the system will show the underlying model name ("Anonymous C-172R") rather than the #000099 tail number.  Because that's a single number for an anonymous instance of a given model, anonymous aircraft are necessarily shared amongst pilots.

Relationship between Aircraft and Models

A key attribute of how shared aircraft/models work is to understand that these relationships are all computed in real-time.  That is, an aircraft in the database does not have any information about its associated model, it only has a reference to the model.  In turn, the model holds a reference to the manufacturer and even to the category/class.

So when you see "N12345 - Cessna C-172 (ASEL)" in your account, that is all being assembled in real time: I look up "N12345" in the database and find the ID of a model.  I then look up that model and find that it has model name of "C-172", an ID of a manufacturer and an ID of a category/class.  I then look up the manufacturer that has that ID and find that the manufacturer is named "Cessna" and I look up the category/class by its ID and discover that it is "ASEL".  

Because none of this data is stored directly in the aircraft, all changes happen immediately to all related aircraft.  For example, if you were to edit the C-172 model to be a helicopter rather than ASEL, then instantly not only would N12345 become a helicopter, but ALL aircraft in the system that are linked to that model would also become helicopters.  Any subsequent totals computation or currency computation involving any aircraft tied to that model would suddenly now have helicopter time and helicopter currency.

That can be risky, but in practice it works just fine.  First and foremost, there's an honor system involved that people don't make random edits like changing a C-172 to be helicopter.  For 14 years and counting, this has worked extraordinarily well.  But as a backup ANY edit to a model results in an email being sent to the site admins, which details the specific change, and that can be reviewed and modified (or reversed) by the admin.  As it turns out, the vast majority of edits to models are minor things like indicating high-performance, or editing the name to be consistent with other similar models.

Admins also review any newly created models in the system for errors, consistency, and redundancy; if a new model is redundant with another existing model, then the two will typically be coalesced.  No notification is generated when that occurs.

Editing aircraft works in the same way, but obviously the scope of the impact is limited to pilots in that specific aircraft, and there are a few other rules involved (see this post about aircraft edits).  In this case, email about the changes is sent not only to the admins for review, but to other pilots who fly that aircraft as well.  This ensures that all changes are reviewed, and that errors are quickly caught and fixed.

Best Practices and Conventions

Please try to follow these guidelines when editing models:

  • If a specific aircraft is wrong (e.g., is the wrong model), then edit the aircraft, not the model.
  • Only edit a model if the definition of the model itself is wrong and thus if all aircraft associated with that model need to be corrected.  E.g., if you see a Boeing 737 listed as piston, then you should edit it.
  • Please do a search for existing models before creating or editing a model; there's a good chance that the model you want is already in the system.  When you create a model, the system will also check to see if it looks like you're creating a duplicate and will show you existing models that look like matches.  While it's best to re-use an existing model, you can proceed if it truly isn't a match.
  • The FAA (and other authorities) have a particular level of granularity for models; ICAO uses another.  Since MyFlightbook launched in 2006, it's been pretty clear that the community prefers more granularity/precision to less.  So you'll see many model designations on MyFlightbook that might map to the same designation within these registries.  That's OK and a good thing.  There's no problem with having more fine-grained distinctions based on upgrade packages, aircraft vintage (e.g., when one manufacturer gets sold to another), and so forth.  As a simple example, there are enough G1000-equipped C-172S’s out there that it’s got its own model designation in the system, even though it’s simply a C-172S.
  • Glass and TAA are one area where things are often confused, since these can be part of the base design (All Boeing 787's that have ever been made are glass/TAA), a factory option (even if everybody orders glass as a practical matter), or an upgrade to a specific airframe.  In general, the model should indicate glass/TAA only if it is part of the base design.  If it's a factory option, it should either be indicated on the airframe, or alternatively it's OK to create a new model that is explicitly a glass-only variant.  For example, there are so many G-1000 equipped C-172S's that there is both a "C-172S" in the system that is not marked as glass (so you'd indicate glass on the specific airframe if it is glass), but there is also a "C-172S G-1000" model in the system that is all glass.

An admin will review EVERY new model and EVERY edit to a model in order to check for redundancy and consistency.  Generally, this requires some triangulation between multiple sources.  Not only that, but I often have more granularity than any one of the sources. If two variations look identical, I’ll merge them, but otherwise I will allow it.  I do, however, try to enforce some consistency.

Here are some of the conventions I try to follow.  Some are a bit more ambiguous than others.

The “Model” field is probably the least well defined.  I tend to use a combination of:
  • The FAA registry page or comparable non-US websites.  Note that this is not always super precise (sometimes listing a C-150 as a “150” instead of, say, a “C-150M”) and if registrations have been reassigned the old one assignment might not be present.  But it will generally distinguish, say, a C-172S from a C-172P.
  • Wikipedia
  • MyFlightbook user community.  In particular, this helps with 4 specific conventions:
    • Hyphenation conventions.
    • Distinguishing float vs. wheel versions of an aircraft: generally you would name a C-172 on floats “C-172 (Float)” to highlight the distinction from its wheeled counterpart. (See here for more on floats/amphibs).
    • Distinguishing sim-only versions of an aircraft.  E.g., a Flight Safety 737 would typically be “B-737 (SIM)” so that nobody thinks they can create a real flying 737 using that model.
    • Where models can have conversions that make them high-performance or give them a constant-speed prop, we’ll generally add “(FP)” for “Fixed Prop”, “(CSP)” for “Constant Speed Prop” or “(HP)” for “High Performance next to the model name.  E.g., “C-172 M/180HP (CSP)” for the superhawk variant of the 172 M that has a constant speed prop and a 180HP engine.
Note that because of the desire for high-precision, sometimes the model in MyFlightbook will deviate from the "nameplate" model.  An example here is the PA24.  Piper made multiple PA24 models; the plain "PA-24" had a 180hp engine, while subsequent variants with more powerful engines included the horsepower after the model - e.g., "PA-24-250" with a 250hp engine, or the "PA-24-260" with a 260hp engine, and so forth.  But the 180hp engine was simply "PA-24" on the nameplate; there technically was never a "PA-24-180".  On MyFlightbook, though, there is both a "PA-24" and a "PA-24-180".  This is because the former could mean "It was a PA-24 with 180hp", or it could mean "It was a Piper PA-24, but I don't remember which variant it was."  So the latter allows you to very clearly indicate the 180hp meaning.

The ICAO designation field is much more precise, and we treat the ICAO website as an authoritative source. Note that this really only applies for Airplanes and Helicopters on MyFlightbook.  ICAO tends to lump all balloons into "BALL" and gliders into "GLID", but that's a coarser granularity than the community generally want, so please leave the ICAO field blank for anything that is not an airplane or helicopter.  

Also note that the ICAO code is very coarse: multiple different variants of an aircraft often share a single ICAO code; the C-172 is a great example: all C-172’s are “C172”, whether it’s a C-172P, C-172N, C-172RG, etc. 

For the Type Rating field (generally only jets or large aircraft), MyFlightbook treats the FAA Type ratings taxonomy as authoritative.  It isn’t totally comprehensive, but I use it when possible.

Summary - don't sweat it!

There's a lot to digest above, but the key thing to remember is that someone will review any (a) new model, (b) edit to an existing model, or (c) edit to an aircraft that has the potential to impact other pilots.  So do your best, but don't worry about getting everything just right; we've got your back.  

At the end of the day, this results in a super comprehensive and increasingly accurate data set, which benefits us all.