diff --git a/project-words.txt b/project-words.txt index 0893b85..f08e445 100644 --- a/project-words.txt +++ b/project-words.txt @@ -4,6 +4,7 @@ ASSEM astrojs Atmel barebones +Bitwarden Candian caperren CEOAS @@ -13,6 +14,9 @@ CONSERV Corwin dangerousthings Dechorionator +dockerization +dockerizing +drumheller ebox fhhs flowbite @@ -25,6 +29,7 @@ iceops ITAR Jetson KFSK +Labjack leconte Loctite luxon @@ -36,9 +41,11 @@ offroad Onshape OSSM OSURC +Passthroughs Perren Perren's Pixhawk +Protocase pubpath RFID RSSI @@ -46,15 +53,19 @@ SARL Shuttlebox sinnhuber sitemapindex +Smartsheet ssds Starlink steller Steller +Teamcenter timelapse +triaging trivago Unstow uuidv vaapi vitest +Waterjet Zebrafish zscan diff --git a/src/assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-battery-box.jpg b/src/assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-battery-box.jpg new file mode 100644 index 0000000..ba8f99f Binary files /dev/null and b/src/assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-battery-box.jpg differ diff --git a/src/assets/about/circ-champions.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/circ-champions.jpg similarity index 100% rename from src/assets/about/circ-champions.jpg rename to src/assets/experience/osu-robotics-club/mars-rover-software-lead/circ-champions.jpg diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/corwin-at-competition.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/corwin-at-competition.jpg new file mode 100644 index 0000000..ef10ecd Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/corwin-at-competition.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/drumheller-team-photo.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/drumheller-team-photo.jpg new file mode 100644 index 0000000..44f8c7a Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/drumheller-team-photo.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/final-ground-station-gui.png b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/final-ground-station-gui.png new file mode 100644 index 0000000..1608d80 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/final-ground-station-gui.png differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/ground-station-at-competition.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/ground-station-at-competition.jpg new file mode 100644 index 0000000..a393dc1 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/ground-station-at-competition.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-assembly-timelapse-converted.mp4 b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-assembly-timelapse-converted.mp4 new file mode 100644 index 0000000..9bd085d Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-assembly-timelapse-converted.mp4 differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-working.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-working.jpg new file mode 100644 index 0000000..04bb696 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-working.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-from-above.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-from-above.jpg new file mode 100644 index 0000000..5f363c2 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-from-above.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-pickup-test.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-pickup-test.jpg new file mode 100644 index 0000000..dd8bf85 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-pickup-test.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-gimbal-test-converted.mp4 b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-gimbal-test-converted.mp4 new file mode 100644 index 0000000..2d1605e Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-gimbal-test-converted.mp4 differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-pose-with-dinosaur.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-pose-with-dinosaur.jpg new file mode 100644 index 0000000..a8697a3 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-pose-with-dinosaur.jpg differ diff --git a/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-with-arm-pose-in-desert.jpg b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-with-arm-pose-in-desert.jpg new file mode 100644 index 0000000..bf38eb7 Binary files /dev/null and b/src/assets/experience/osu-robotics-club/mars-rover-software-lead/rover-with-arm-pose-in-desert.jpg differ diff --git a/src/assets/experience/spacex/hardware-test-engineer-i-ii/five-year-patch.jpg b/src/assets/experience/spacex/hardware-test-engineer-i-ii/five-year-patch.jpg new file mode 100644 index 0000000..decbd3c Binary files /dev/null and b/src/assets/experience/spacex/hardware-test-engineer-i-ii/five-year-patch.jpg differ diff --git a/src/assets/experience/spacex/hardware-test-engineer-i-ii/starlink-patch.jpg b/src/assets/experience/spacex/hardware-test-engineer-i-ii/starlink-patch.jpg new file mode 100644 index 0000000..ce0f648 Binary files /dev/null and b/src/assets/experience/spacex/hardware-test-engineer-i-ii/starlink-patch.jpg differ diff --git a/src/assets/hobby/homelab/offsite-backup-rack/installed.jpg b/src/assets/hobby/homelab/offsite-backup-rack/installed.jpg new file mode 100644 index 0000000..d45ddef Binary files /dev/null and b/src/assets/hobby/homelab/offsite-backup-rack/installed.jpg differ diff --git a/src/components/Media/YtVideo.astro b/src/components/Media/YtVideo.astro index 1bf962f..c304538 100644 --- a/src/components/Media/YtVideo.astro +++ b/src/components/Media/YtVideo.astro @@ -1,13 +1,26 @@ --- -import type { videoConfig } from "@interfaces/video.ts"; +import type { videoConfig } from "@interfaces/yt-video.ts"; -const config: videoConfig = Astro.props.videoConfig; +interface Props extends videoConfig {} + +const { + videoPath, + videoTitle, + width = "1920", + height = "1080", + autoPlay = false, +} = Astro.props; + +const aspect = `${width} / ${height}`; --- - +
+ +
diff --git a/src/data/site-layout.ts b/src/data/site-layout.ts index d0dd984..7c3e1be 100644 --- a/src/data/site-layout.ts +++ b/src/data/site-layout.ts @@ -13,7 +13,6 @@ export const siteLayout: navLink[] = [ path: "spacex", children: [ { - enabled: false, navText: "Hardware Test Engineer I/II", path: "hardware-test-engineer-i-ii", }, diff --git a/src/interfaces/video.ts b/src/interfaces/video.ts deleted file mode 100644 index 05dde3c..0000000 --- a/src/interfaces/video.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface videoConfig { - videoTitle?: string; - videoPath: string; - videoType?: string; -} diff --git a/src/interfaces/yt-video.ts b/src/interfaces/yt-video.ts new file mode 100644 index 0000000..a5ac04e --- /dev/null +++ b/src/interfaces/yt-video.ts @@ -0,0 +1,9 @@ +export interface videoConfig { + videoPath: string; + videoTitle?: string; + + width?: number; // “design” width + height?: number; // “design” height + + autoPlay?: boolean; +} diff --git a/src/pages/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler.astro b/src/pages/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler.astro index 872d6e0..157575c 100644 --- a/src/pages/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler.astro +++ b/src/pages/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler.astro @@ -22,6 +22,7 @@ import type { timelineEntry } from "@interfaces/timeline.ts"; import electronics_box from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/electronics-box.jpg"; import jet_drive from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/jet-drive.jpg"; +import ross_battery_box from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-battery-box.jpg"; import ross_ebox_4p0 from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-ebox-4p0.jpg"; import ross_on_vessel_at_night from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-on-vessel-at-night.jpg"; import ross_on_vessel from "@assets/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler/ross-on-vessel.jpg"; @@ -42,6 +43,7 @@ const headerCarouselGroup: carouselGroup = { ross_on_vessel_at_night, ross_ebox_4p0, electronics_box, + ross_battery_box, jet_drive, ui, ], @@ -104,7 +106,7 @@ const categorizedSkills: categorySkills[] = [ skills: [ { item: "Git" }, { - item: "Programming Languages", + item: "Programming", subItems: [ { item: "Python 2/3" }, { item: "Bash Shell Scripting" }, diff --git a/src/pages/experience/osu-robotics-club/mars-rover-software-team-lead.astro b/src/pages/experience/osu-robotics-club/mars-rover-software-team-lead.astro index f8c0230..c784130 100644 --- a/src/pages/experience/osu-robotics-club/mars-rover-software-team-lead.astro +++ b/src/pages/experience/osu-robotics-club/mars-rover-software-team-lead.astro @@ -1,279 +1,71 @@ --- +import H2 from "@components/H2.astro"; import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; import YtVideo from "@components/Media/YtVideo.astro"; +import PageGroup from "@components/PageGroup.astro"; import type { carouselGroup } from "@interfaces/image-carousel.ts"; -import type { videoConfig } from "@interfaces/video.ts"; +import type { videoConfig } from "@interfaces/yt-video.ts"; import ExperienceLayout from "@layouts/ExperienceLayout.astro"; +import circ_champions from "@assets/experience/osu-robotics-club/mars-rover-software-lead/circ-champions.jpg"; +import corwin_at_competition from "@assets/experience/osu-robotics-club/mars-rover-software-lead/corwin-at-competition.jpg"; +import drumheller_team_photo from "@assets/experience/osu-robotics-club/mars-rover-software-lead/drumheller-team-photo.jpg"; +import final_ground_station_gui from "@assets/experience/osu-robotics-club/mars-rover-software-lead/final-ground-station-gui.png"; +import ground_station_at_competition from "@assets/experience/osu-robotics-club/mars-rover-software-lead/ground-station-at-competition.jpg"; +import iris_pcb_assembly_timelapse_converted from "@assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-assembly-timelapse-converted.mp4"; +import iris_pcb_working from "@assets/experience/osu-robotics-club/mars-rover-software-lead/iris-pcb-working.jpg"; +import rover_at_competition_from_above from "@assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-from-above.jpg"; +import rover_at_competition_pickup_test from "@assets/experience/osu-robotics-club/mars-rover-software-lead/rover-at-competition-pickup-test.jpg"; +import rover_gimbal_test_converted from "@assets/experience/osu-robotics-club/mars-rover-software-lead/rover-gimbal-test-converted.mp4"; +import rover_pose_with_dinosaur from "@assets/experience/osu-robotics-club/mars-rover-software-lead/rover-pose-with-dinosaur.jpg"; +import rover_with_arm_pose_in_desert from "@assets/experience/osu-robotics-club/mars-rover-software-lead/rover-with-arm-pose-in-desert.jpg"; +import silly_poke from "@assets/experience/osu-robotics-club/mars-rover-software-lead/silly-poke.gif"; +import Video from "@components/Media/Video.astro"; + const headerCarouselGroup: carouselGroup = { animation: "slide", - images: [], + images: [ + circ_champions, + drumheller_team_photo, + rover_with_arm_pose_in_desert, + rover_pose_with_dinosaur, + corwin_at_competition, + rover_at_competition_from_above, + rover_at_competition_pickup_test, + final_ground_station_gui, + ground_station_at_competition, + iris_pcb_working, + silly_poke, + ], }; -const videoList: videoConfig[] = [ - { - videoTitle: "Ground Station Software Quick Overview", - videoPath: "https://www.youtube-nocookie.com/embed/ZjGW-HWapVA", - }, - { - videoTitle: "Rover Software Environment And Full Code Overview", - videoPath: "https://www.youtube-nocookie.com/embed/sceA2ZbEV8Y", - }, +const videos: videoConfig[] = [ + { videoPath: iris_pcb_assembly_timelapse_converted }, + { videoPath: rover_gimbal_test_converted }, + { videoPath: "https://www.youtube-nocookie.com/embed/ZjGW-HWapVA" }, + { videoPath: "https://www.youtube-nocookie.com/embed/sceA2ZbEV8Y0" }, ]; --- -

- Ground Station Readouts & Features -

- -

- Rover Demos and Software Overviews -

- { - videoList.map((video) => ( -
-

{video.videoTitle}

- -
- )) - } + +

Videos

+
+ { + videos.map((video) => + video.videoPath.startsWith("https://www.youtube") ? ( + + ) : ( +
+
diff --git a/src/pages/experience/spacex/avionics-test-engineering-internship.astro b/src/pages/experience/spacex/avionics-test-engineering-internship.astro index 03f3f0f..4290856 100644 --- a/src/pages/experience/spacex/avionics-test-engineering-internship.astro +++ b/src/pages/experience/spacex/avionics-test-engineering-internship.astro @@ -1,6 +1,7 @@ --- import H2 from "@components/H2.astro"; import H3 from "@components/H3.astro"; +import InlineLink from "@components/InlineLink.astro"; import Li from "@components/Li.astro"; import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; import PageGroup from "@components/PageGroup.astro"; @@ -15,7 +16,6 @@ import ExperienceLayout from "@layouts/ExperienceLayout.astro"; import spring_2019_interns from "@assets/experience/spacex/avionics-test-engineering-internship/spring-2019-interns.jpg"; import swag from "@assets/experience/spacex/avionics-test-engineering-internship/swag.jpg"; -import InlineLink from "@components/InlineLink.astro"; import type { carouselGroup } from "@interfaces/image-carousel.ts"; import type { categorySkills } from "@interfaces/skill-matrix.ts"; import type { timelineEntry } from "@interfaces/timeline.ts"; @@ -42,13 +42,18 @@ const categorizedSkills: categorySkills[] = [ skills: [ { item: "Git" }, { - item: "Programming Languages", + item: "Programming", subItems: [ { item: "Python 2/3" }, { item: "Bash Shell Scripting" }, { item: "Microsoft SQL" }, ], }, + { + item: "Methodologies", + subItems: [{ item: "Test Driven Development" }, { item: "Agile" }], + }, + { item: "Atlassian Suite", subItems: [ diff --git a/src/pages/experience/spacex/hardware-test-engineer-i-ii.astro b/src/pages/experience/spacex/hardware-test-engineer-i-ii.astro index 0bd5606..af0d4a6 100644 --- a/src/pages/experience/spacex/hardware-test-engineer-i-ii.astro +++ b/src/pages/experience/spacex/hardware-test-engineer-i-ii.astro @@ -1,16 +1,29 @@ --- -import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; -import Timeline from "@components/Timeline/Timeline.astro"; import ExperienceLayout from "@layouts/ExperienceLayout.astro"; -import starlink_headquarters_selfie from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-headquarters-selfie.jpg"; +import H2 from "@components/H2.astro"; +import H3 from "@components/H3.astro"; +import InlineLink from "@components/InlineLink.astro"; +import Li from "@components/Li.astro"; +import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; +import PageGroup from "@components/PageGroup.astro"; +import Paragraph from "@components/Paragraph.astro"; +import Paragraphs from "@components/Paragraphs.astro"; +import SkillMatrix from "@components/SkillMatrix/SkillMatrix.astro"; +import Timeline from "@components/Timeline/Timeline.astro"; +import Ul from "@components/Ul.astro"; import type { carouselGroup } from "@interfaces/image-carousel.ts"; +import type { categorySkills } from "@interfaces/skill-matrix.ts"; import type { timelineEntry } from "@interfaces/timeline.ts"; +import five_year_patch from "@assets/experience/spacex/hardware-test-engineer-i-ii/five-year-patch.jpg"; +import starlink_headquarters_selfie from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-headquarters-selfie.jpg"; +import starlink_patch from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-patch.jpg"; + const headerCarouselGroup: carouselGroup = { animation: "slide", - images: [starlink_headquarters_selfie], + images: [starlink_headquarters_selfie, five_year_patch, starlink_patch], }; const timeline: timelineEntry[] = [ @@ -43,56 +56,399 @@ const timeline: timelineEntry[] = [ "Celebrated five and a half years of helping put thousands of satellites, and dozens of rockets, into orbit", }, ]; + +const categorizedSkills: categorySkills[] = [ + { + category: "Software & Environments", + skills: [ + { + item: "Version Control", + subItems: [{ item: "Git" }, { item: "Subversion" }], + }, + { + item: "Programming", + subItems: [ + { + item: "Languages", + subItems: [ + { item: "Python 2/3" }, + { item: "Bash Shell Scripting" }, + { item: "High-Level Embedded C/C++ (Arduino/Teensy)" }, + { item: "HTML" }, + { item: "CSS" }, + { item: "Typescript/Javascript" }, + ], + }, + { + item: "Databases", + subItems: [ + { item: "Postgres" }, + { item: "Microsoft SQL" }, + { item: "MySQL" }, + ], + }, + { + item: "DevOps", + subItems: [ + { item: "Docker" }, + { item: "Ansible" }, + { item: "Kubernetes" }, + ], + }, + ], + }, + { + item: "Methodologies", + subItems: [{ item: "Test Driven Development" }, { item: "Agile" }], + }, + { + item: "Operating Systems", + subItems: [ + { + item: "Linux", + subItems: [{ item: "Centos" }, { item: "Ubuntu" }], + }, + { item: "Microsoft Windows" }, + ], + }, + { + item: "Applications", + subItems: [ + { + item: "Atlassian", + subItems: [ + { item: "Jira" }, + { item: "Bitbucket" }, + { item: "Confluence" }, + ], + }, + { + item: "Monitoring/Metrics", + subItems: [ + { item: "Grafana" }, + { item: "Sentry" }, + { item: "OpsGenie" }, + ], + }, + { + item: "Secrets", + subItems: [{ item: "Bitwarden" }, { item: "Hashicorp Vault" }], + }, + { + item: "Other", + subItems: [ + { item: "Microsoft Office Suite" }, + { item: "Smartsheet" }, + ], + }, + ], + }, + ], + }, + { + category: "Electrical", + skills: [ + { + item: "Schematic & PCB Design", + subItems: [ + { + item: "Software", + subItems: [ + { item: "Altium Designer" }, + { item: "Mentor Graphics PADS" }, + ], + }, + { + item: "PCB Features", + subItems: [ + { item: "Multi-layer (up to 16)" }, + { item: "Impedance Controlled Designs" }, + { item: "High Power Designs" }, + { item: "Power Simulation" }, + ], + }, + { + item: "Manufacturing", + subItems: [ + { item: "Gerber Export" }, + { item: "BOM Management" }, + { item: "Board-House Assembly" }, + { item: "In-House Assembly" }, + ], + }, + ], + }, + { + item: "Electrical Diagnostics", + subItems: [ + { item: "Multimeters" }, + { item: "Electronic Loads" }, + { item: "Oscilloscopes" }, + { item: "Logic Analyzers" }, + { item: "LCR Meters" }, + ], + }, + { + item: "Harnessing Fabrication", + subItems: [ + { item: "DC Low-Power & Signal" }, + { item: "DC High-Power" }, + { item: "Sub-Microwave RF" }, + { item: "Vacuum Rated Harnesses" }, + { item: "Vacuum Chamber Harness Passthroughs" }, + ], + }, + { + item: "Test Rack Equipment", + subItems: [ + { item: "Custom Fixture Design/Fabrication" }, + { item: "Single/Bi-Directional Power Supplies" }, + { item: "Electronic Loads" }, + { item: "NI Test Hardware" }, + { item: "Labjack" }, + ], + }, + ], + }, + { + category: "Mechanical", + skills: [ + { item: "Siemens Teamcenter PLM" }, + { + item: "3D Modeling", + subItems: [ + { item: "Siemens NX" }, + + { item: "Protocase Designer" }, + { item: "FreeCAD" }, + ], + }, + { + item: "Fabrication", + subItems: [ + { item: "Laser Cutting" }, + { item: "3D Printing" }, + { item: "CNC" }, + { item: "Waterjet" }, + { item: "Hand Tools" }, + ], + }, + ], + }, + { + category: "Other", + skills: [ + { + item: "Specialty Tests", + subItems: [ + { item: "Highly Accelerated Life Testing" }, + { item: "Thermal Vacuum Chamber Testing" }, + { item: "Vibration Testing" }, + ], + }, + ], + }, +]; --- - + -

Summary

-

Timeline

- -

Key Takeaways

-
    -
  • - Created test systems which validated ~4500 Starlink satellite flight - computers, and ~4000 power boards -
  • -
  • - Developed program-critical infrastructure that enabled efficient triage, - management, and tracking of hardware failures -
  • -
  • - Designed and deployed automated, unified, and containerized infrastructure - to greatly increase application reliability and development speed -
  • -
-

Skills Used

-
-
-
Software
-
-
    -
  • Python
  • -
  • Test Driven Development
  • -
-
-
-
Electrical
-
-
-
-
Mechanical
-
-
-
-
Other
-
-
-
- -

Details By Team

-

Starlink Hardware Test

-

Build Reliability Engineering

-

Components Test Infrastructure

+ +

Summary

+ +

Timeline

+ +
+ +

Key Takeaways

+
    +
  • Created test systems which validated ~4500 Starlink satellite flight + computers, and ~4000 power boards
  • +
  • Developed program-critical infrastructure that enabled efficient + triage, management, tracking, and metrics of hardware failures
  • +
  • Designed and deployed automated, unified, and containerized + infrastructure to greatly increase application reliability and + development speed
  • +
  • Provided on-call support for on-orbit hardware, + satellite-test/components-test systems, and + satellite-test/components-test infrastructure
  • +
+
+ +
+ +

Details

+ +

Starlink Test Engineering

+ + + Starting at SpaceX, I'd joined the hardware test engineering team for + the Starlink program in Redmond, WA. With my first day being in early + September of 2019, the V0.9 revision satellites had only just been + shot into space a few months prior. This meant my start coincided with + earnest preparations to launch V1.0, as well as ramping production to + rates previously thought impossible for space industries. My initial + task at the company was simple; offload the current hardware test + engineer for flight computer in any way possible, as he was + significantly overloaded. + + + I put my all into this task, immediately taking over quite a few + production code debug and improvement tasks, as well as running EMI + compliance testing, while absorbing as much as I could about the + product, its test systems, and test procedures. During this time, I + was extremely happy to have already done a test engineering internship with the company, as it made ramping up much faster and easier than it + would have been otherwise. Around three months after joining the team, ownership + of these test systems were transferred to me in their entirety. What followed + was nearly three years of the kind of intensity you'd expect out of a company + like SpaceX, but with the unique addition of higher production rates than + anywhere else in the company, or space industry. + + + When I say I took ownership of flight computer test systems, I mean + this very literally, and specifically a multi-disciplinary sense. I + handled high-level test rack designs, purchasing, test fixture + enclosure design, test fixture PCB design, test fixture firmware + development, test rack networking configuration, test rack server + configuration and tuning, DUT harness design, prototype DUT harness + fabrication, along with test software development to cover not only + production tests, but also more strenuous qualification tests which + often required their own custom rack design compared to their + production counterparts. This barely scratches the surface in reality, + and doesn't include the countless nights on the production floor, + personally running hundreds of boards through functional and + environmental testing, slowly and consistently improving the quality, + rate, and coverage of the tests. It also doesn't include the whole + year where I was on-call 24/7 for a full week, every other week, + triaging on-orbit alerts for flight computer, reviewing data, and + sending commands to recover where needed. + + + As time progressed, I began to burn out and requested transfer to a + different product. Flight computer was a particularly intense due to + having little-to-no overlap with the rest of the satellite + sub-systems, and being doubly critical functionality-wise to satellite + operation. I was given a new test system for power boards, but due to + unfortunate timing, the new owner for flight computer changed + companies and I ended up having to temporarily take over test rack + hardware design, alongside permanently handling the software for + flight computer through the end of this overall phase at SpaceX. This + turned out to be the most intense period of time at the company for + me, with some of the longest hours and latest nights that I'd rather + not share the durations of. However, as with all the time previously, + I successfully delivered multiple test system derivations for power + board, alongside all the software for multiple of the next generation + of flight computer. + + + +

Build Reliability Engineering

+ + + In early 2022, I decided I was going to move in with my + long-distance partner down in Oregon. SpaceX is not normally known + for allowing remote work, but I floated the idea a few months before + my August deadline for leaving, just in case. My good friend, and + head of the build reliability engineering team at the time, also + proposed a project for me to work on that would enable fast triage + and disposition of hardware failures coming out of test. I'd + previously taught him some basic web development to get a prototype + version of the app up and running, but it was fast approaching its + usability limits and needed professional support. They approved me + to work on this for three months, with the stipulation that I came + in person for one week a month. Since it was going to be short term, + I agreed and began working on this website! + + + This level of web development was rather new to me, at the time, as + I'd always said I'd never become a full time web developer since + before even starting college. Still, that wasn't going to stop me, + and I quickly began making improvements. One thing SpaceX had + already taught me was that development velocity was paramount, and + that there should be as little friction as possible between changes + getting made, becoming validated, and then deployed. So, I started + by creating a fully automated development/staging/production devops + environment, and moved the application to docker with a RESTful + flask backend and Bootstrap frontend. After three months were up, + they decided to let me keep working remote so long as I still came + in a week a month. For the next year and a half, this tool grew and + improved, gaining hundreds of users a day both in and out of the + reliability team. It turned out that many features of my website + ended up providing a better experience than the ones developed by + SpaceX's core applications engineering team, at least for Starlink's + use-case. This did not go unnoticed, and that team ended up reaching + out to create an equivalent, and officially supported, first-party + tool in the SpaceX application ecosystem. They even created a small + team dedicated to its creation and maintenance. This also came at a + perfect time, as I was losing my ability to keep up with my custom + website as a solo developer. Oh, and did I mentioned I'd been + supporting satellite hardware test remotely for the latter nine + months at this time, as well? + + +
+ +

Components Test Engineering

+ + + In March of 2024, the team lead for components test software (the + components team being the parent group of satellite hardware test by + that point) reached out and asked me if I wanted to join a small two + person infrastructure team. Considering my remote nature, this made + a lot more sense than trying to continue supporting satellite + hardware tests, and I was going to be able to provide a lot of + experience with devops infrastructure and docker that could greatly + benefit the team. I agreed, and began working on dockerization and + unification of the team's tools into a monorepo. I also began + supporting a relatively new tool for running test software that the + team was developing, along with a small slew of miscellaneous tools + such as those to image and provision servers over PXE. + + + After dockerizing all the infrastructure and moving them into the + monorepo, my next push was to improve velocity and reliability by + adding automated build, test, and deploy tasks for new development, + staging, and production environments across them all. I did this by + combining a unified set of Makefile interfaces, with automated runs + via ansible from pull requests and main branch merges. Application + and server monitoring was also added via tools such as Sentry and + Grafana, which were piped into OpsGenie so the infra team could be + pinged during outages. Backups were also made of production + databases during deployments, with restore tooling that could be + used for emulating production data during staging, development, and + local deploys. Overall, these changes greatly improved the speed at + which the team could develop, and helped ensure that what we were + deploying was validated as thoroughly as possible in advance. + + + At the end of January 2025, I was notified by the company that my + remote work exception would no longer be valid as of April 4th. I + was now living in northern Washington state and close to a two hour + drive, each way, from the closest SpaceX facility. I therefore opted + to quit after roughly six years with them in total. Considering the + average is two to three years, I'd say I did quite well, and am very + proud of what I managed to achieve with the company in that time! If + you'd like to know more, feel free to contact me, and I'm happy to + share what I'm allowed! This summary was ultimately just the tip of + the iceberg for an experience that made six years feel like twelve. + + +
+
+
diff --git a/src/pages/hobby/homelab/offsite-backup-rack.astro b/src/pages/hobby/homelab/offsite-backup-rack.astro index 9b52d38..114e66c 100644 --- a/src/pages/hobby/homelab/offsite-backup-rack.astro +++ b/src/pages/hobby/homelab/offsite-backup-rack.astro @@ -1,7 +1,8 @@ --- -import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; import HobbyLayout from "@layouts/HobbyLayout.astro"; +import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro"; + import type { carouselGroup } from "@interfaces/image-carousel.ts"; import enclosure_front_pc_panel_open from "@assets/hobby/homelab/offsite-backup-rack/enclosure-front-pc-panel-open.jpg"; @@ -10,6 +11,7 @@ import enclosure_left from "@assets/hobby/homelab/offsite-backup-rack/enclosure- import enclosure_rear from "@assets/hobby/homelab/offsite-backup-rack/enclosure-rear.jpg"; import enclosure_right from "@assets/hobby/homelab/offsite-backup-rack/enclosure-right.jpg"; import enclosure_with_ups from "@assets/hobby/homelab/offsite-backup-rack/enclosure-with-ups.jpg"; +import installed from "@assets/hobby/homelab/offsite-backup-rack/installed.jpg"; import power_adapter_tray_and_dc_dc from "@assets/hobby/homelab/offsite-backup-rack/power-adapter-tray-and-dc-dc.jpg"; import power_supply_closeup from "@assets/hobby/homelab/offsite-backup-rack/power-supply-closeup.jpg"; import power_supply_mounting_location from "@assets/hobby/homelab/offsite-backup-rack/power-supply-mounting-location.jpg"; @@ -20,6 +22,7 @@ import up_and_running from "@assets/hobby/homelab/offsite-backup-rack/up-and-run const headerCarouselGroup: carouselGroup = { animation: "slide", images: [ + installed, enclosure_front, enclosure_front_pc_panel_open, enclosure_left, @@ -38,6 +41,4 @@ const headerCarouselGroup: carouselGroup = { - - diff --git a/src/pages/hobby/this-website.astro b/src/pages/hobby/this-website.astro index 4a37d61..e7b8cea 100644 --- a/src/pages/hobby/this-website.astro +++ b/src/pages/hobby/this-website.astro @@ -32,7 +32,7 @@ const categorizedSkills: categorySkills[] = [ ], }, { - item: "Programming Languages", + item: "Programming", subItems: [ { item: "HTML" }, { item: "CSS" }, diff --git a/src/pages/index.astro b/src/pages/index.astro index a2e3550..b950f26 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -11,8 +11,8 @@ import Paragraphs from "@components/Paragraphs.astro"; import type { carouselGroup } from "@interfaces/image-carousel.ts"; import alaska_bike_mountain_ocean from "@assets/about/alaska-bike-mountain-ocean.jpg"; -import circ_champions from "@assets/about/circ-champions.jpg"; import headshot from "@assets/about/headshot.jpg"; +import circ_champions from "@assets/experience/osu-robotics-club/mars-rover-software-lead/circ-champions.jpg"; const headerCarouselGroup: carouselGroup = { animation: "slide",