Start flying section
25
.gitignore
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
# build output
|
||||
public/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# Direnv junk
|
||||
.direnv/*
|
||||
*/.direnv/*
|
||||
|
||||
# Quartz cache
|
||||
.quartz-cache/
|
||||
88
captions.patch
Normal file
@ -0,0 +1,88 @@
|
||||
commit e7d320accd3ee12c92902bcbc37bc925b074a2c4
|
||||
Author: Yash-Garg <me@yashgarg.dev>
|
||||
Date: Tue Aug 27 23:25:01 2024 +0530
|
||||
|
||||
feat: add image captions
|
||||
|
||||
diff --git a/package.json b/package.json
|
||||
index 5823535..d181904 100644
|
||||
--- a/package.json
|
||||
+++ b/package.json
|
||||
@@ -67,6 +67,7 @@
|
||||
"reading-time": "^1.5.0",
|
||||
"rehype-autolink-headings": "^7.1.0",
|
||||
"rehype-citation": "^2.1.1",
|
||||
+ "rehype-image-caption": "^2.0.6",
|
||||
"rehype-katex": "^7.0.1",
|
||||
"rehype-mathjax": "^6.0.0",
|
||||
"rehype-pretty-code": "^0.13.2",
|
||||
@@ -109,4 +110,4 @@
|
||||
"tsx": "^4.17.0",
|
||||
"typescript": "^5.5.4"
|
||||
}
|
||||
-}
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/quartz.config.ts b/quartz.config.ts
|
||||
index b6abbb2..391574c 100644
|
||||
--- a/quartz.config.ts
|
||||
+++ b/quartz.config.ts
|
||||
@@ -71,6 +71,7 @@ const config: QuartzConfig = {
|
||||
Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }),
|
||||
Plugin.Description(),
|
||||
Plugin.Latex({ renderEngine: "katex" }),
|
||||
+ Plugin.FigureCaptions(),
|
||||
],
|
||||
filters: [Plugin.RemoveDrafts()],
|
||||
emitters: [
|
||||
diff --git a/quartz/plugins/transformers/captions.ts b/quartz/plugins/transformers/captions.ts
|
||||
new file mode 100644
|
||||
index 0000000..6d10e8e
|
||||
--- /dev/null
|
||||
+++ b/quartz/plugins/transformers/captions.ts
|
||||
@@ -0,0 +1,11 @@
|
||||
+import rehypeImageCaption from "rehype-image-caption";
|
||||
+import { QuartzTransformerPlugin } from "../types";
|
||||
+
|
||||
+export const FigureCaptions: QuartzTransformerPlugin = () => {
|
||||
+ return {
|
||||
+ name: "FigureCaptions",
|
||||
+ htmlPlugins() {
|
||||
+ return [[rehypeImageCaption]]
|
||||
+ },
|
||||
+ }
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/quartz/plugins/transformers/index.ts b/quartz/plugins/transformers/index.ts
|
||||
index 7908c86..7eb7431 100644
|
||||
--- a/quartz/plugins/transformers/index.ts
|
||||
+++ b/quartz/plugins/transformers/index.ts
|
||||
@@ -10,3 +10,4 @@ export { OxHugoFlavouredMarkdown } from "./oxhugofm"
|
||||
export { SyntaxHighlighting } from "./syntax"
|
||||
export { TableOfContents } from "./toc"
|
||||
export { HardLineBreaks } from "./linebreaks"
|
||||
+export { FigureCaptions } from "./captions"
|
||||
diff --git a/quartz/styles/custom.scss b/quartz/styles/custom.scss
|
||||
index b0c09dc..279e531 100644
|
||||
--- a/quartz/styles/custom.scss
|
||||
+++ b/quartz/styles/custom.scss
|
||||
@@ -1,3 +1,18 @@
|
||||
@use "./base.scss";
|
||||
|
||||
// put your custom CSS here!
|
||||
+// Styling for Figures
|
||||
+figure {
|
||||
+ margin: 0;
|
||||
+}
|
||||
+
|
||||
+figcaption {
|
||||
+ text-align: center;
|
||||
+ margin-top: .35em;
|
||||
+ font-size: 0.9em;
|
||||
+ opacity: 0.8;
|
||||
+}
|
||||
+
|
||||
+figure>img {
|
||||
+ margin: 0;
|
||||
+}
|
||||
\ No newline at end of file
|
||||
1
content/.obsidian/app.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{}
|
||||
1
content/.obsidian/appearance.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{}
|
||||
33
content/.obsidian/core-plugins.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"footnotes": false,
|
||||
"properties": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
207
content/.obsidian/workspace.json
vendored
Normal file
@ -0,0 +1,207 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "2a9401c933dd0179",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "d9aba81dc61f0428",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "f08a70b3ec190538",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "flying/index.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "index"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "41974d6a73be47d1",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "b873fe2f0d714a8f",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "a1d71b9d9126a9a6",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "267be54717e26ffd",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "638b8a63264cbee4",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "4cfdc612b12c2936",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "f51a0fa4d36915f9",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "457f01ae1c48b567",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "flying/index.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks for index"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5e4bc56e2fc22806",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "flying/index.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from index"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "27fcadc90c168d68",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f7dc08a6bba1735f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bfdebe98e45b695f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "flying/index.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of index"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"bases:Create new base": false
|
||||
}
|
||||
},
|
||||
"active": "f08a70b3ec190538",
|
||||
"lastOpenFiles": [
|
||||
"flying/N297LA.md",
|
||||
"flying/pictures/ca-wildfires.jpg",
|
||||
"flying/pictures/storm-lemur.jpg",
|
||||
"flying/pictures/milford-from-air.jpg",
|
||||
"flying/pictures/final-teb.jpg",
|
||||
"flying/pictures/hilarysdad.jpg",
|
||||
"flying/pictures/luggage-in-lemur.jpg",
|
||||
"flying/pictures/jen-in-lemur.jpg",
|
||||
"flying/index.md",
|
||||
"flying/pictures/parents-and-lemur.jpg",
|
||||
"flying/pictures/southbay-tour.jpg",
|
||||
"flying/pictures/mono-lake.jpeg",
|
||||
"flying/IFR checkride.md",
|
||||
"Lemur.md",
|
||||
"flying/N383WA.md",
|
||||
"flying/pictures",
|
||||
"index.md",
|
||||
"flying"
|
||||
]
|
||||
}
|
||||
112
content/flying/IFR checkride.md
Normal file
@ -0,0 +1,112 @@
|
||||
---
|
||||
date: 2020-08-08
|
||||
---
|
||||
## Checkride with Jon Thornton
|
||||
|
||||
A week before the test, Jon had me change the time to 9am Saturday in Watsonville, so I flew myself and [[N297LA|my plane]] down two days earlier and got an Airbnb. I'm really glad I did this to get in the mind space early and really focus on the task at hand.
|
||||
|
||||
Thursday, I left Hayward at about 3, did a practice approach into Half Moon Bay, got a late lunch, and took off around 4:30. I gave myself a random unpublished hold over Half Moon Bay, then flew to Salinas and did the ILS 31, went missed and did a few holds, clumsily circled around to get established on the DME arc for Watsonville VOR A, and finally arrived KWVI just after 6.
|
||||
|
||||
I got to my Airbnb, posted up in my room and started reading whatever I could find, whatever I could think of as follow up questions that I didn't know the answer to.
|
||||
|
||||
Friday, while eating breakfast I got an outlook briefing for the planned flight KWVI to KFAT, which predicted what you'd expect: Marine layer in the morning, burning off around noon, a stationary thermal trough in the Central Valley, and some convective activity in the Sierras. Then I did all the performance calculations by hand to figure out the required time, fuel, distance, minimum runways, etc.
|
||||
|
||||
By the time I got out of the house and picked up the rental car, it was nearly 4. I planned to do some practice approaches and then land in Monterrey, get dinner, and fly back to Watsonville, but after a few approaches the Marine layer was blowing in and I started to get worried if I'd get back VFR. Rather than risk it, I flew back to Watsonville - scud running a bit just under the clouds, not ideal... - and landed at KWVI around 5:40. I felt safer knowing (and seeing visually) there were several other planes including a banner tow aircraft at the same altitude as me. Unlike the Moss Landing area, KWVI was clear skies luckily.
|
||||
|
||||
I drove to Target to grab an oil funnel and gloves in case Jon expected me to test the fuel on the morning of the test. Then grabbed dinner and returned to the Airbnb to get early rest. Before bed I figured out how to get performance data out of Foreflight for the takeoff roll, time/fuel/distance, landing roll etc for the flight I had planned from KWVI to KFAT.
|
||||
## Morning of the test
|
||||
I left the house early and got a standard briefing in the car, which was identical to what I had heard the previous day. I got to the airport at 8:30, taxied over to Specialized Helicopters, parked in the back as instructed and left the pitot cover, control lock etc removed for ease later on. At 9 I showed up to the room where Jon was set up with an iPad and whatever else he needed.
|
||||
|
||||
He started with a warning/disclaimer/legal sounding statement that he was an agent of the federal government, this (the test and the fact that I was taking it) was legally considered an investigation into me, and anything I said could be used against me in the future. I recognized this as the Pilot's Bill of Rights (at least, one half of it...) And agreed to sign, which I did on my phone via IACRA.
|
||||
|
||||
After this, he scanned my ID and medical, and went over my logbook, etc etc. Even though my logbook was messy with several corrections in the math, he didn't ask for detail on anything or try to trip me up on a technicality. From the beginning he seemed to be interested in getting my cert - at this stage in the checkride, before he'd asked me a single oral exam question, he said something like "I'm sure you'll go home with your temporary certificate today." This optimism helped put me at ease.. he wasn't going to be the kind of examiner that tries to make you fail.
|
||||
|
||||
We looked over the aircraft logs which was extremely simple as it's a brand new plane. This panned out exactly as I hoped - there was nothing to ask about, no room for follow up questions.
|
||||
|
||||
With all the paperwork out of the way, the oral exam began. He let me know that I could use any thing I wanted - Google, text someone, take all the time I needed to answer each question. Bathroom and coffee breaks whenever. "This is your test." I appreciated this. I had a ton of material ready to go: FAR/AIM app on my iPad, PilotsCafe cheat sheet printed out, phone for quick Googles or texts to my instructor.
|
||||
|
||||
We started with the basics - when do you need IFR, how do you stay current, he asked several scenarios to test when you can log IFR (I said I wouldn't log an approach where you are in actual until after the FAF but before the MAP, he said are you sure? And I looked it up and corrected myself.) This kind of little minor re-steering happened quite a few times and definitely saved my ass - a stricter DPE could likely have failed me on these things.
|
||||
|
||||
A little bit on weather, what's the standard lapse rate, how do you know a front has passed (I had to look this one up and had a clumsy answer, but all he was looking for was the winds change and temperature changes). Similarly, he asked what's the difference between a precision and non precision approach, I started saying a bunch of stuff, he was just looking for "one has a decision height, one has a missed approach point in space" which he even said, "I know you know it but need to get you to say the right thing."
|
||||
|
||||
The other one that tripped me up was his question about using GPS as a substitute for VOR approaches - you can do it, (and in fact later in the day we did exactly this) but you can't use GPS to intercept a localizer course (in hindsight, I think he asked these things to ensure I thought about it before we got in the air, because otherwise there was a risk that I might either bust the checkride on the localizer intercept for KSNS ILS 31, or get confused when flying the VOR approach into Watsonville with PFD dimmed.)
|
||||
|
||||
By far the trickiest part of the oral and where I came closest to failing, was the discussion on lost comms procedures. For this scenario, he gave me a clearance to KFAT which I copied down and read back, the clearance was to fly the Watsonville 4 departure to Salinas, V230, AMEER, then direct.. 3000, expect 7000 after 10. The question was, simply: at 500 feet on the WVI4, you stop receiving NorCal on the radios. What do you do, how do you fly?
|
||||
|
||||
First I said I would confirm whether I'm actually NORDO - check the plugs, do I hear others, ask NorCal if they can hear me, try 133.0, etc. He confirmed we were really lost comms. So, onto my answer:
|
||||
|
||||
For some reason I organized my answer around the route first and altitudes second. AVEF, we had an Assigned route which was identical to our Filed route, and we weren't on Vectors or given anything to Expect. So that was simple enough. Now onto altitudes -- I said highest of MEA (9000), expected (7000), and assigned (3000), so 9000. Done.
|
||||
|
||||
He said.. Hold on, so at 500 feet you're NORDO and you immediately climb to 9000 feet? Why do you think they might have put you at 3000 feet for 10 minutes? I thought about it and said ok, 3000 until 10 minutes have passed, then 7k, then whatever the route requires. He really helped me out here. He was like.. slow down. Take it one step at a time. When do you climb, when do you leave each point. You can look up the procedures again if you need to.
|
||||
|
||||
I looked it up and thought harder. At this point I finally figured it out, with an embarrassing amount of nudging from him:
|
||||
|
||||
Climb 3000, enter the hold over Salinas, climb in hold to 6000 (the MCA for SNS on V230). I was going to wait in the hold till the 10 minute mark and only leave when I could climb to 7000, he pointed out there's no need for that and I should leave the hold as soon as I'm at the MCA. After 10 minutes, up to 7000. Then 8k for the PXN crossing altitude, then 9k for the MEA, then I said I stay at 9k until I start an approach.
|
||||
|
||||
He said what do you do when you get to the clearance limit (KFAT)? Reading the regulation, I said if the clearance limit is not the origin of an instrument approach, you navigate to the nearest one and begin an approach (at the ETA). So, I choose the RNAV because I just need to get on the ground, fly the approach and land.
|
||||
|
||||
Finally, he said I missed one critical thing. He nudged me to reread the first part of 14 CFR 91.185. Oh yeah... If in VFR conditions, just land visually as soon as possible and don't bother with all the other stuff!
|
||||
|
||||
He said good... See how this is more complex than you thought? I really appreciated the walk through.
|
||||
|
||||
We went over the charts ("what's this little t bar at the end of the airway line? What's this number mean?" Etc, easy stuff) and then he said great, oral is done, you can put most of this stuff away and plan the following approaches, we'll meet in an hour to fly.
|
||||
|
||||
He let me plan the approaches ahead of time and preflight the plane, etc. This was a relief because I thought he would grill me on every last detail of the plane, micromanage my preflight, etc -- none of it. He assumed (correctly, I'll add) that I knew my way around the plane and how to operate it.
|
||||
|
||||
The flight plan:
|
||||
|
||||
- Climb 500ft on the WVI4
|
||||
- View limiting goggles on
|
||||
- There would be no emergencies on the flight other than "no gyro" - dimming the PFD and he even said, when we do this you'll fly off the MFD and standby instruments.
|
||||
- When established, fly VOR 13 into KSNS, go missed, hold over MARNA, then
|
||||
- ILS 31 w/ 22 DME arc, go missed again, then
|
||||
- Cancel flight following, fly out over the Bay, unusual attitudes, compass turns, and finally
|
||||
- Dim the PFD, and fly the LOC 2 into KWVI circle to land.
|
||||
|
||||
Here's how it went:
|
||||
|
||||
Taxi, run-up, takeoff were unremarkable. On the takeoff roll he asked me about the engine horsepower and I said sterile cockpit, please and he quieted. He didn't test that again.
|
||||
|
||||
|
||||
|
||||
Right after the goggles went on, he gave me some random headings to fly (ostensibly to stay clear of clouds as this flight was VFR) and then said, great, get back on the WVI4 departure. I tried a few times to use the G1000 to activate the departure, couldn't figure it out, he was interrupting me saying are you on the departure? What are you doing? You're about to bust Monterey airspace, turn right heading blah... Why aren't you on the departure yet... And really stressing me out. Meanwhile I'm hand flying and trying to stay on heading and altitude, while diagnosing a navigation issue.. Not great 5 minutes into the checkride flight.
|
||||
|
||||
|
||||
|
||||
I hit direct SNS and started going inbound. He said you're still not on the departure. At this point I was really worried I had already failed or was about to. I said, no, I know, I need to be intercepting the 293 radial... I finally put it in and we intercepted it.
|
||||
|
||||
|
||||
|
||||
He said, do you see what happened there? I quickly said yes, I understand the mistake and should have immediately intercepted that radial. From this point until the end of the flight, I had no idea if I had already failed and would have to repeat the departure procedure another time, though I was pretty sure DPs weren't on the test standards. (I double checked and, if he wanted to, he could have absolutely failed me on IR.V.B.S5 & S6.)
|
||||
|
||||
|
||||
|
||||
The rest of the flight was extremely, borderline awkwardly quiet. Partially because I flew everything else absolutely perfectly out of heart-pounding anxiety! I kept announcing things like approach briefed, checklist complete, gotta correct that altitude... Etc so that he would know I'm aware of and fixing things even if something instantaneously looked wrong. He didn't respond to any of it but I think it was good that I did it.
|
||||
|
||||
|
||||
|
||||
From SNS, rather than fly the VOR 13 as published with the procedure turn, he gave me vectors to final and we were very quickly descending into the approach. I was extremely clear with my use of checklists to ensure he couldn't bust me on forgetting some checklist item. We went missed and did the hold, easy, no comments. I announced entering the hold (I think I forgot to announce leaving the hold, but he didn't comment).
|
||||
|
||||
|
||||
|
||||
He let me turn on autopilot on the outbound feeder leg to the DME arc, which was the main long quiet awkward part where I just kind of wondered whether I had failed or was doing fine. I throttled up to max forward speed to keep things moving... DME arc, localizer intercept, glideslope intercept were done by hand and perfectly. Then turned on autopilot and rode down to minimums. Halfway down the approach I called Tower and asked if they could confirm I'm cleared to land.. Tower said aren't you going missed? And I said, oh yeah nevermind... No comment from DPE luckily.
|
||||
|
||||
|
||||
|
||||
Went missed, cancelled flight following, unusual attitudes were super simple, then he started giving me vectors to final for LOC 2 into Watsonville. I got confused about why the G1000 wasn't giving an option to activate leg, I tried several times, meanwhile trying not to bust altitude while partial panel... Turns out I had loaded but not activated the approach, and after 30 awkward seconds I realized I could just "activate vectors to final" which immediately led to him saying, "All right! Now fly heading 040..."
|
||||
|
||||
|
||||
|
||||
We intercepted the final approach course, took off my hood at pattern attitude, and I entered the busiest VFR pattern I've ever seen in my life. There must have been 5 or 6 airplanes in the pattern, parachute activity, helicopters.. and barely room to get a word in edgewise. I asked someone on the upwind to extend and give me room to enter, I'd be number 3 for landing,.. he said sure, so I followed the other 2 guys in.. on short final, the plane in front of me was still on the runway.. I started getting worried - should I go around, but what if they're doing a touch and go, did I do this wrong and I'm going to fail literally at the end...
|
||||
|
||||
|
||||
|
||||
What I did do, was slow myself down as much as possible to give them time, and watched them turn off the runway.... Finally when runway was clear I put in LDG flaps and touched down. (I was vocal to the examiner about what I was thinking and doing, which hopefully helped).
|
||||
|
||||
|
||||
|
||||
Taxied back, he silently got out and walked into the office, I had no idea at this point if I failed or not.. got to the office, he walked me through the errors in the departure and the vectors to final moment.. then said remember, this is a license to learn.. Congratulations, you're an instrument rated pilot. I was overjoyed, of course.
|
||||
|
||||
|
||||
|
||||
I planned an IFR flight home, flew back to Hayward feeling like a boss, landed and postflighted the plane... And then realized I still had the rental car keys. Facepalm. So, back in the plane, and I got my ass to Watsonville and dropped the keys in the lockbox at the airport parking lot, and flew right back home. Stupid me.. 😁
|
||||
26
content/flying/N297LA.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
aliases:
|
||||
- lemur
|
||||
- Lemur
|
||||
---
|
||||
![[parents-and-lemur.jpg]]*My mom hated this flight, so I assume this photo is from before. That, or she's really happy I brought us back safely.*
|
||||
|
||||
![[jen-in-lemur.jpg]]*My lovely copilot, Jen. Look how amazing the visibility is in this cockpit!*
|
||||
|
||||
![[luggage-in-lemur.jpg]]*With Jen, her twin brother, and a lot of luggage. You'll have to trust me that this was, in fact, within weight and balance limits.*
|
||||
|
||||
![[final-teb.jpg]]*On final for KTEB, when I finally made it to New York for the first time.*
|
||||
|
||||
![[milford-from-air.jpg]]*Making a triumphant return to Milford, Connecticut. I can (basically) see my house from here!*
|
||||
|
||||
![[hilarysdad.jpg]]*My friend Hilary's father loves airplanes, and needed a ride from Bar Harbor, ME to Wiscassett, ME. We were both thrilled that I could ferry him over!*
|
||||
|
||||
![[storm-lemur.jpg]]*This was as scary as it looks.*
|
||||
|
||||
![[ca-wildfires.jpg]]*The state was on fire.*
|
||||
|
||||
Some favorites:
|
||||
- Flying into LAX, using the whole runway.
|
||||
- Ice storm around Lake Hughes/Gorman
|
||||
- Flying to the Central Valley for a COVID shot
|
||||
-
|
||||
8
content/flying/N383WA.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
aliases:
|
||||
- whiskers
|
||||
- Whiskers
|
||||
---
|
||||
|
||||
|
||||
M350
|
||||
47
content/flying/index.md
Normal file
@ -0,0 +1,47 @@
|
||||
I'm a ~700-hour instrument-rated private pilot. I have previously owned a 2020 Diamond DA40-NG ([[N297LA]], "Lemur"), and a 2021 PA-46 Piper M350 ([[N383WA]], "Whiskers"). One day I'll fly a turboprop... one day...
|
||||
## My story
|
||||
In 2012, while visiting home from college for the holidays, I asked my parents for my gift to be a "discovery flight" at nearby KBDR (Bridgeport Memorial Airport, in Stratford, CT --just across the Housatonic River from us).
|
||||
|
||||
In case you're not familiar, this is where a flight instructor will take you up in the air for an hour or so in a tiny single-engine piston aircraft. They handle takeoff and landing, but once you're in the air, they'll let you take the controls and fly around a bit. And for a certain type of person (me), even more exciting than steering the plane around a bit was *everything else*: figuring out what all the gauges mean, how the engine worked, understanding all the incredible, delicate-yet-overengineered marvels that made flying possible. And, I'll say, the smell of a dusty old 1970s trainer aircraft mixed with almost-but-not-quite-lead-free aviation gas simply can't be beat.
|
||||
|
||||
I was hooked. When we landed, the instructor told me that if I wanted, I could grab a logbook from the front desk, and if I logged this flight, I'd be 1/40 of the way to earning my private pilot's license. (Yeah, you only need 40 hours, though that's more than it might sound like). This, of course, was genius customer acquisition. I snagged the logbook and also signed up for a few more sessions while I was home for break.
|
||||
|
||||
I returned to Tufts a few weeks later and already had almost ten hours logged. Naturally, I set about finding a way to complete my training. Being a second-semester senior, and apparently not interested in availing myself of the many opportunities on campus, I crafted my schedule to be entirely afternoon classes, and would spend most mornings taking flying lessons at East Coast Aero Club, KBED (Hanscom Field).
|
||||
|
||||
I graduated a few months later, and spent the summer (in addition to having a job, but this page is about flying) preparing for my checkride, which I passed in September 2013.
|
||||
|
||||
<div style="display:flex; gap:1em">
|
||||
|
||||
![[new-pilot.jpg]]*An eager young beaver.*
|
||||
|
||||
![[airplane-with-graz.jpg]]*About to take my friend Danny for a city tour. Fun fact: you probably shouldn't physically touch the static ports, you really don't want them clogged.*
|
||||
</div>
|
||||
|
||||
## Shaking off the rust
|
||||
I [[Perfect Day|got kind of busy]] for the next few years, and didn't really get back into flying until 2018. By now, I was in the Bay Area, so I started renting DA40s out of Hayward (KHWD). All I could really do was buzz around the practice areas or take friends and family on Bay tours -- renting for more than an hour or two is really difficult to schedule, so overnight trips were out of the question.
|
||||
|
||||
Don't get me wrong, though. Even just limited to daytime in good weather for an hour or two at a time, flying in California is absolutely glorious. Allow me to undercut my point with these crappy cell phone photos:
|
||||
|
||||
![[mono-lake.jpeg]]*About to fly through the Tioga Pass to Mono Lake. Fun fact: I should have told literally anyone I was doing this solo flight, across mountains, at sunset.*
|
||||
|
||||
<br/>
|
||||
|
||||
![[southbay-tour.jpg]]*The view from South Bay.*
|
||||
|
||||
## Instrument flying
|
||||
Along with limited access to flying opportunities, I had a general understanding that I was still woefully inexperienced and unable to safely fly at night, around mountains, or in clouds (e.g., the ever-present coastal marine layer). This led me to pursue my instrument rating in 2020. It was a lot of fun, I learned a ton and became a more proficient pilot. If you're a pilot, you may enjoy my write-up of my [[IFR checkride]] experience.
|
||||
|
||||
Having unlocked the ability to actually fly around California and across the mountains, I started looking into ways to, well, do it more. I really wanted to be able to take weekend trips up and down the coast, or -- my dream -- fly coast-to-coast, and be able to experience flying around New York and Boston again.
|
||||
|
||||
So, I was thrilled when I learned about Diamondshare: a sort of guided way to set up fractional ownership of an airplane. Essentially, the owner provides "unlimited" access (subject to availability) to members who pay a little over a grand per month. With three members, the cost of the plane breaks even; with four, you're profiting modestly. Nice! Better yet, the Diamondshare team makes everything easy -- they source members, they have boilerplate documents and cost modeling/marketing material, etc.
|
||||
|
||||
And so it was that I became the proud owner of Lemur, a brand-spanking-new DA40-NG. For those that don't know, the DA40 is already a pretty cool plane, but the -NG model is incredible; it uses a diesel engine so it can run on Jet-A (jet fuel) rather than aviation gas (admittedly, this doesn't matter *that much*, but it's cheaper, smells better, and definitely feels cooler), and more importantly, it has FADEC: Full Authority Digital Engine Control, meaning it turns on with a simple turn of a key, and one lever controls the throttle as well as any babysitting of the fuel-air mixture that the engine needs.
|
||||
|
||||
You may be thinking, "So what? That's how every car has worked for decades," and you'd be right, but most of general aviation is very much stuck several decades ago (see also: "low-lead gas" is NOT "unleaded").
|
||||
|
||||
The FADEC design also vastly simplifies the pre-takeoff runup: you also just hold a button down and it runs some engine tests automatically, and you're good to go within a minute. I often was able to tell airport controllers, "negative runup," because I could easily do it quickly before calling tower at the runway hold line.
|
||||
|
||||
Diamondshare was great, and when Lemur was not in the shop, it was an absolute dream to fly. But, well, it often was. Sadly, there always seemed to be something or other wrong with the plane, and because the manufacturer is in Austria, parts and support were slow and costly. As a result, aircraft availability ended up being limited, my members (and I) were frequently disappointed, and the whole thing kind of sucked. We ended it after a year. [[N297LA|More on Lemur.]]
|
||||
|
||||
One of the last things I did with Lemur was to fly across the country. The stars aligned and I had meetings in Salt Lake City, Minneapolis, Chicago, and New York -- basically perfect fuel stops (and business use -- awesome!) My friends were getting together for a weekend trip in the Hudson Valley, and I was able to land and take off from a tiny airstrip nearby (Kingston-Ulster, 20N).
|
||||
## (Flight)-Leveling Up
|
||||
BIN
content/flying/pictures/airplane-with-graz.jpg
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
content/flying/pictures/ca-wildfires.jpg
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
content/flying/pictures/final-teb.jpg
Normal file
|
After Width: | Height: | Size: 5.2 MiB |
BIN
content/flying/pictures/hilarysdad.jpg
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
content/flying/pictures/jen-in-lemur.jpg
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
content/flying/pictures/lemur.jpg
Normal file
|
After Width: | Height: | Size: 3.7 MiB |
BIN
content/flying/pictures/luggage-in-lemur.jpg
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
content/flying/pictures/milford-from-air.jpg
Normal file
|
After Width: | Height: | Size: 3.8 MiB |
BIN
content/flying/pictures/mono-lake.jpeg
Normal file
|
After Width: | Height: | Size: 257 KiB |
BIN
content/flying/pictures/new-pilot.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
content/flying/pictures/parents-and-lemur.jpg
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
content/flying/pictures/southbay-tour.jpg
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
content/flying/pictures/storm-lemur.jpg
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
@ -1,4 +1,22 @@
|
||||
---
|
||||
title: Hi, I'm Ryan
|
||||
---
|
||||
I am a founder, bioengineer, and [[flying/index|private pilot]] based in Berkeley, CA and Brooklyn, NY.
|
||||
|
||||
I spent ten years building [[Perfect Day]], a [[consumer biotechnology]] company that pioneered a way to make Nature-identical milk proteins without animals, using [[fermentation]]. After setting the company up for long-term success, I exited Perfect Day in 2023. The first manufacturing plant is on track to be live in late 2026 or early 2027.
|
||||
|
||||
You can read more about my [[founding story]], some snapshots of [[the journey]], and [[the latest]].
|
||||
|
||||
## What I'm up to now
|
||||
I am an Executive in Residence at Stanford University, where I'm helping projects in the [[Stanford Sustainability Accelerator]] to incorporate, scale, and reach impactful goals in the real world.
|
||||
|
||||
I am a Board Director at [[New Harvest]], a 501(c)3 charity dedicated to the advancement of cellular agriculture.
|
||||
|
||||
I also advise several other companies at different stages of the startup/corporate life cycle. If you would like to work with me, please don't hesitate to [[reach out]]!
|
||||
|
||||
Together with my wife, I'm building a new company inventing the future of retail, called (for now) [[Sejour]]. It's totally different than Perfect Day, and I'm loving the adventure!
|
||||
|
||||
In my free time, I'm [[learning Hindi]], working on my [[commercial pilot's license]], endlessly tinkering with my [[homelab]], and finding fun [[recipes]] to cook. I aspire to get better at [[producing music]], but am still way at the bottom of the learning curve.
|
||||
|
||||
## Get in touch
|
||||
Don't be a stranger! You can reach me at ryan@ryanpandya.com.
|
||||
@ -69,6 +69,7 @@
|
||||
"reading-time": "^1.5.0",
|
||||
"rehype-autolink-headings": "^7.1.0",
|
||||
"rehype-citation": "^2.3.1",
|
||||
"rehype-image-caption": "^2.0.6",
|
||||
"rehype-katex": "^7.0.1",
|
||||
"rehype-mathjax": "^7.1.0",
|
||||
"rehype-pretty-code": "^0.14.1",
|
||||
|
||||
4992
pnpm-lock.yaml
generated
Normal file
@ -72,6 +72,7 @@ const config: QuartzConfig = {
|
||||
Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }),
|
||||
Plugin.Description(),
|
||||
Plugin.Latex({ renderEngine: "katex" }),
|
||||
Plugin.FigureCaptions(),
|
||||
],
|
||||
filters: [Plugin.RemoveDrafts()],
|
||||
emitters: [
|
||||
@ -89,7 +90,7 @@ const config: QuartzConfig = {
|
||||
Plugin.Favicon(),
|
||||
Plugin.NotFoundPage(),
|
||||
// Comment out CustomOgImages to speed up build time
|
||||
Plugin.CustomOgImages(),
|
||||
// Plugin.CustomOgImages(),
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
@ -21,7 +21,10 @@ export const defaultContentPageLayout: PageLayout = {
|
||||
condition: (page) => page.fileData.slug !== "index",
|
||||
}),
|
||||
Component.ArticleTitle(),
|
||||
Component.ContentMeta(),
|
||||
Component.ConditionalRender({
|
||||
component: Component.ContentMeta(),
|
||||
condition: (page) => page.fileData.frontmatter?.enableMeta !== false,
|
||||
}),
|
||||
Component.TagList(),
|
||||
],
|
||||
left: [
|
||||
@ -48,7 +51,10 @@ export const defaultContentPageLayout: PageLayout = {
|
||||
|
||||
// components for pages that display lists of pages (e.g. tags or folders)
|
||||
export const defaultListPageLayout: PageLayout = {
|
||||
beforeBody: [Component.Breadcrumbs(), Component.ArticleTitle(), Component.ContentMeta()],
|
||||
beforeBody: [Component.Breadcrumbs(), Component.ArticleTitle(), Component.ConditionalRender({
|
||||
component: Component.ContentMeta(),
|
||||
condition: (page) => page.fileData.frontmatter?.enableMeta !== "false",
|
||||
}),],
|
||||
left: [
|
||||
Component.PageTitle(),
|
||||
Component.MobileOnly(Component.Spacer()),
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types"
|
||||
import { classNames } from "../util/lang"
|
||||
import { classNames, titlecase } from "../util/lang"
|
||||
import { deslugify } from "../util/path"
|
||||
|
||||
const ArticleTitle: QuartzComponent = ({ fileData, displayClass }: QuartzComponentProps) => {
|
||||
const title = fileData.frontmatter?.title
|
||||
const fileTitle = fileData.frontmatter?.title
|
||||
const title = fileTitle == 'index' ? titlecase(deslugify(fileData.slug!, 2)) : fileTitle
|
||||
if (title) {
|
||||
return <h1 class={classNames(displayClass, "article-title")}>{title == 'index' ? deslugify(fileData.slug!, 2) : title}</h1>
|
||||
return <h1 class={classNames(displayClass, "article-title")}>{title}</h1>
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types"
|
||||
import breadcrumbsStyle from "./styles/breadcrumbs.scss"
|
||||
import { FullSlug, SimpleSlug, resolveRelative, simplifySlug } from "../util/path"
|
||||
import { classNames } from "../util/lang"
|
||||
import { classNames, titlecase } from "../util/lang"
|
||||
import { trieFromAllFiles } from "../util/ctx"
|
||||
|
||||
type CrumbData = {
|
||||
@ -80,7 +80,7 @@ export default ((opts?: Partial<BreadcrumbOptions>) => {
|
||||
<nav class={classNames(displayClass, "breadcrumb-container")} aria-label="breadcrumbs">
|
||||
{crumbs.map((crumb, index) => (
|
||||
<div class="breadcrumb-element">
|
||||
<a href={crumb.path}>{crumb.displayName}</a>
|
||||
<a href={crumb.path}>{titlecase(crumb.displayName)}</a>
|
||||
{index !== crumbs.length - 1 && <p>{` ${options.spacerSymbol} `}</p>}
|
||||
</div>
|
||||
))}
|
||||
|
||||
11
quartz/plugins/transformers/captions.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import rehypeImageCaption from "rehype-image-caption";
|
||||
import { QuartzTransformerPlugin } from "../types";
|
||||
|
||||
export const FigureCaptions: QuartzTransformerPlugin = () => {
|
||||
return {
|
||||
name: "FigureCaptions",
|
||||
htmlPlugins() {
|
||||
return [[rehypeImageCaption]]
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -149,6 +149,7 @@ declare module "vfile" {
|
||||
draft: boolean | string
|
||||
lang: string
|
||||
enableToc: string
|
||||
enableMeta: string
|
||||
cssclasses: string[]
|
||||
socialImage: string
|
||||
comments: boolean | string
|
||||
|
||||
@ -11,3 +11,4 @@ export { SyntaxHighlighting } from "./syntax"
|
||||
export { TableOfContents } from "./toc"
|
||||
export { HardLineBreaks } from "./linebreaks"
|
||||
export { RoamFlavoredMarkdown } from "./roam"
|
||||
export { FigureCaptions } from "./captions"
|
||||
@ -1,3 +1,19 @@
|
||||
@use "./base.scss";
|
||||
|
||||
// put your custom CSS here!
|
||||
|
||||
// Styling for Figures
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
text-align: center;
|
||||
margin-top: .35em;
|
||||
font-size: 0.9em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
figure>img {
|
||||
margin: 0;
|
||||
}
|
||||
@ -11,3 +11,10 @@ export function classNames(
|
||||
}
|
||||
return classes.join(" ")
|
||||
}
|
||||
|
||||
export function titlecase(s: string): string {
|
||||
return s
|
||||
.split(" ")
|
||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||
.join(" ")
|
||||
}
|
||||
|
||||