Search

Notices
Career Questions Career advice, interview prep and gouges, job fairs, etc.

Digital Logbooks

Thread Tools
 
Search this Thread
 
Old 01-31-2022 | 03:46 AM
  #11  
Gets Weekends Off
 
Joined: Feb 2019
Posts: 307
Likes: 0
Default

I’ve been using foreflight’s logbook. Has anyone made the switch from foreflight to logten pro? Was it easy to transfer everything over?
Reply
Old 01-31-2022 | 04:12 AM
  #12  
Line Holder
 
Joined: Jul 2014
Posts: 676
Likes: 6
From: B747 FO
Default

I’ve been using CrewLounge PilotLog since 2009 (called mccPilotLog back then) works on any platform and super easy interface integration
Reply
Old 01-31-2022 | 05:21 AM
  #13  
Line Holder
 
Joined: Jun 2017
Posts: 53
Likes: 0
Default

Originally Posted by DontLookDown
I’ve been using foreflight’s logbook. Has anyone made the switch from foreflight to logten pro? Was it easy to transfer everything over?
I just had to send the csv file to Logbook Pro and they made it a seamless transition. I did this back in 2018 and at that time Foreflight’s logbook was not that great. For logbook pro (desktop only unless you pay subscription for data entry app) I just log the flights on a notes app after each leg. You get a rhythm down and when you go home it’s spreadsheet style entry so it goes quick.
Reply
Old 01-31-2022 | 01:16 PM
  #14  
Gets Weekends Off
 
Joined: Mar 2015
Posts: 963
Likes: 0
Default

Originally Posted by UnbeatenPath
I personally wrote up an excel file a while ago. I can tailor it to what I need, so if I'm filling out an app, I can filter things out for some of the weirder times that would be hard to figure otherwise. It's all on Google drive so I just enter times on my phone after shutting down at the gate.
The best way IMHO. Though spreadsheets are a hot cup of ****. Use postresql and with sufficient constraints and indices to satisfy your perfectionism and write a web frontend. The trick is not going crazy on the frontend. Make it stupid and ugly, just the bare minimum, if you value your time. Like rails scaffold ugly if not worse. So ugly that you could delete the whole thing and rebuild it in half a day. Realize the value is in the database and the one single pretty print of it. This is for YOU, not some mouth breathing dip****. It should be hard to use but have one single beautiful output. I'm not kidding VERY HARD TO USE is best. No matter what it will be easier than a spreadsheet. You literally have to work to make something suck more than a spreadsheet. But DIY for sure. It's best.
Reply
Old 01-31-2022 | 01:21 PM
  #15  
ZapBrannigan's Avatar
Furloughed Again?!
15 Years
 
Joined: Aug 2007
Posts: 4,948
Likes: 109
From: Boeing 737
Default

Originally Posted by HalinTexas
OK, getting back in the cockpit after airline training for 5 ½ years. Always used paper. It was required in Japan.

Looking for digital logbook recs. with a best reason why.

Standing by for ridicule, humiliation and the harsh.
Congrats Hal! You’ll be missed!
Reply
Old 01-31-2022 | 02:08 PM
  #16  
rickair7777's Avatar
Prime Minister/Moderator
Veteran: Navy
 
Joined: Jan 2006
Posts: 44,908
Likes: 694
From: Engines Turn or People Swim
Default

Originally Posted by fadec
The best way IMHO. Though spreadsheets are a hot cup of ****. Use postresql and with sufficient constraints and indices to satisfy your perfectionism and write a web frontend. The trick is not going crazy on the frontend. Make it stupid and ugly, just the bare minimum, if you value your time. Like rails scaffold ugly if not worse. So ugly that you could delete the whole thing and rebuild it in half a day. Realize the value is in the database and the one single pretty print of it. This is for YOU, not some mouth breathing dip****. It should be hard to use but have one single beautiful output. I'm not kidding VERY HARD TO USE is best. No matter what it will be easier than a spreadsheet. You literally have to work to make something suck more than a spreadsheet. But DIY for sure. It's best.
That's what I did for my checkbook, using MS access. It's ugly, but ergonomic... the forms tab in a logical (to me) order and auto-populate when it makes sense.
Reply
Old 01-31-2022 | 04:09 PM
  #17  
TangoIndiaMike1's Avatar
Gets Weekends Off
 
Joined: Oct 2015
Posts: 479
Likes: 0
From: Captain for Skyhawks
Default

Originally Posted by KVGT CFI
My flight book

Free, great support, allows specialized categories like part 121, 135, dual given for all levels (private/instrument/Comm) etc

I second my flight book. If there’s issues the developer has always responded to my emails or facebooks message/ comments within a few hours.


Sent from my iPhone using Tapatalk
Reply
Old 01-31-2022 | 04:42 PM
  #18  
Gets Weekends Off
 
Joined: Sep 2021
Posts: 274
Likes: 1
Default

Originally Posted by TangoIndiaMike1
I second my flight book. If there’s issues the developer has always responded to my emails or facebooks message/ comments within a few hours.


Sent from my iPhone using Tapatalk
And it’s open source
Reply
Old 02-08-2022 | 12:01 AM
  #19  
Gets Weekends Off
 
Joined: Sep 2006
Posts: 1,082
Likes: 0
From: ERJ CA
Default

Originally Posted by fadec
Use postresql and with sufficient constraints and indices to satisfy your perfectionism and write a web frontend.
Can I see your schema?
Reply
Old 02-08-2022 | 07:24 AM
  #20  
Gets Weekends Off
 
Joined: Mar 2015
Posts: 963
Likes: 0
Default

Originally Posted by Blackwing
Can I see your schema?
You don't want to do what I did. Trust me. I'm afraid pg_dump -s contains doxing info. It's also 2441 lines since I used to import schedules, actual times, even US registered aircraft. PSA: Don't be a messy data hog. It's sufficiently normalized IMHO, with a role table for PIC/SIC/instructor/etc, an aircraft table for N12345/etc, an aircraft type table for C-152/etc. The general idea was to avoid logging multi-engine time and instead let that be a property of a type of an aircraft of a flight having a time. I also had a table for approaches, glides in a glider, and I took the FAA's requirement to log holding quite literally. I'll share some tables leaving out indices for fkeys and uniques.

Code:
CREATE TABLE public.flights (
   id integer NOT NULL,
   user_id integer NOT NULL,
   origin_airfield_id integer NOT NULL,
   destination_airfield_id integer NOT NULL,
   date date NOT NULL,
   aircraft_id integer,
   role_id integer,
   flight_number character varying(255) NOT NULL,
   actual_out timestamp without time zone,
   actual_in timestamp without time zone,
   actual_block integer,
   night integer,
   instrument integer,
   hood integer,
   cross_country boolean,
   remarks text,
   scheduled_out timestamp without time zone,
   scheduled_in timestamp without time zone,
   scheduled_block integer,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   number_of_passengers integer,
   day_landings integer,
   night_landings integer,
   day_takeoffs integer,
   night_takeoffs integer,
   CONSTRAINT flights_actual_block_matches_in_out CHECK (((actual_block)::double precision = date_part('epoch'::text, (actual_in - actual_out)))),
   CONSTRAINT flights_actual_out_before_in CHECK ((actual_out <= actual_in)),
   CONSTRAINT flights_positive_values CHECK (((scheduled_block >= 0) AND (actual_block >= 0) AND (night >= 0) AND (instrument >= 0) AND (hood >= 0) AND (day_landings >= 0) A
ND (night_landings >= 0) AND (day_takeoffs >= 0) AND (night_takeoffs >= 0) AND (number_of_passengers >= 0))),
   CONSTRAINT flights_scheduled_block_matches_in_out CHECK (((scheduled_block)::double precision = date_part('epoch'::text, (scheduled_in - scheduled_out)))),
   CONSTRAINT flights_scheduled_out_before_in CHECK ((scheduled_out <= scheduled_in)),
   CONSTRAINT flights_times_within_actual_block CHECK (((night <= actual_block) AND (instrument <= actual_block) AND (hood <= actual_block)))
);

CREATE TABLE public.enroute_stops ( 
   id integer NOT NULL,
   flight_id integer NOT NULL,
   airfield_id integer NOT NULL,
   sequence integer NOT NULL,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   user_id integer NOT NULL
);

CREATE TABLE public.airfields ( 
   id integer NOT NULL,
   user_id integer NOT NULL,
   name character varying(255),
   city character varying(255),
   state character varying(255),
   country character varying(255),
   latitude double precision,
   longitude double precision,
   elevation integer,
   timezone character varying(255),
   remarks text,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   icao_code character varying(255),
   iata_code character varying(255),
   identifier character varying(255) NOT NULL,
   seconds_std_offset integer,
   seconds_dst_offset integer
);


CREATE TABLE public.approaches (
   id integer NOT NULL,
   flight_id integer NOT NULL,
   airfield_id integer NOT NULL,
   approach_type_id integer NOT NULL,
   runway character varying(255),
   ceiling character varying(255),
   visibility character varying(255),
   coupled boolean,
   missed boolean,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   user_id integer NOT NULL
);

CREATE TABLE public.roles ( 
   id integer NOT NULL,
   user_id integer NOT NULL,
   identifier character varying(255) NOT NULL,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   description character varying(255)
);

CREATE TABLE public.aircraft ( 
   id integer NOT NULL,
   user_id integer NOT NULL,
   remarks text,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   aircraft_type_id integer,
   serial_number character varying(255),
   registration_number character varying(255),
   fleet_number character varying(255),
   identifier character varying(255) NOT NULL
); 

CREATE TABLE public.aircraft_types ( 
   id integer NOT NULL,
   user_id integer NOT NULL,
   identifier character varying(255) NOT NULL,
   description character varying(255),
   created_at timestamp without time zone,
   updated_at timestamp without time zone
); 

CREATE TABLE public.aircraft_properties ( 
   id integer NOT NULL,
   identifier character varying(255),
   description character varying(255)
); 


CREATE TABLE public.glides ( 
   id integer NOT NULL,
   flight_id integer NOT NULL,
   launch_type_id integer NOT NULL,
   duration integer,
   distance double precision,
   release_altitude double precision,
   max_altitude double precision,
   engine_start_altitude double precision,
   created_at timestamp without time zone,
   updated_at timestamp without time zone
);

CREATE TABLE public.holds ( 
   id integer NOT NULL,
   flight_id integer NOT NULL,
   location character varying(255),
   turns integer,
   duration integer,
   created_at timestamp without time zone,
   updated_at timestamp without time zone
);
Since writing this I've moved to a more CREATE ONLY mentality, where UPDATE is reserved for entry errors. Since dabbling in accounting I've come to see, for the better, table rows as journal entries first rather than objects. They are primarily verbs or events, not nouns or things. If a noun is to be represented then the facts must be true in all future cases. Logic should be (borrowing from prolog lingo) monotonic. Defeasible reasoning should be avoided. If I restrict my reasoning to CREATE while avoiding UPDATE/DELETE then I get reasonable normalization, almost no NULLs, and monotonicity. This is pretty straight forward in a logbook since it is essentially a journal. For sure I'd rip out that scheduled_ time crap. I'd also remove the multiuser stuff, which caused me to run mulit-column fkeys to ensure integrity. This is just offensive when using surrogate keys. On that, I might also move to natural keys. One downside of natural keys in web-apps (I use a web front end) is that there is no atomic update+move in REST, which is actually what you need when changing a primary key. In practice you can use a choice of POST/PUT/PATCH and return a redirect but it's not technically restful. CREATE ONLY logic defeats this conceptual problem too, by avoiding UPDATE.

Minimum 4 tables I'd recommend after exiting this rabbit hole: flights, aircraft, aircraft_types, roles. You can do the rest in a remarks field without undue ceremony or harm. Flights logs times that aren't a property of an aircraft or a seat/job and landings. Aircraft types would contain all the booleans you need such as multi-engine, tailwheel. PIC/SIC/instructor would be roles. Do these 4 tables and KISS.
Reply
Related Topics
Thread
Thread Starter
Forum
Replies
Last Post
SunDevilPilot
Flight Schools and Training
10
07-23-2021 09:36 AM
wiezzy
Regional
4
12-27-2019 12:16 PM
jmw116
Hiring News
6
03-21-2019 06:07 PM
mozak
Flight Schools and Training
8
01-14-2015 02:21 PM
zyttocs
Corporate
22
06-05-2013 04:36 AM

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



Your Privacy Choices