CINXE.COM

Angle of Attack

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>Angle of Attack</title> <meta name="HandheldFriendly" content="True" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://flightaware.engineering/assets/css/style.css?v=0aafd551d9" /> <meta name="description" content="The Engineering Blog from FlightAware"> <link rel="icon" href="https://flightaware.engineering/content/images/size/w256h256/2025/02/fa-icon-1024x1024.png" type="image/png"> <link rel="canonical" href="https://flightaware.engineering/"> <meta name="referrer" content="no-referrer-when-downgrade"> <link rel="next" href="https://flightaware.engineering/page/2/"> <meta property="og:site_name" content="Angle of Attack"> <meta property="og:type" content="website"> <meta property="og:title" content="Angle of Attack"> <meta property="og:description" content="The Engineering Blog from FlightAware"> <meta property="og:url" content="https://flightaware.engineering/"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Angle of Attack"> <meta name="twitter:description" content="a blog by engineers @ FlightAware"> <meta name="twitter:url" content="https://flightaware.engineering/"> <meta name="twitter:image" content="https://flightaware.engineering/content/images/size/w1200/2020/10/FA-engineering-NEW-2.png"> <meta name="twitter:site" content="@FlightAwareEng"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "publisher": { "@type": "Organization", "name": "Angle of Attack", "url": "https://flightaware.engineering/", "logo": { "@type": "ImageObject", "url": "https://flightaware.engineering/content/images/2025/02/flightaware_logo_darkmode_2x-1.png" } }, "url": "https://flightaware.engineering/", "name": "Angle of Attack", "mainEntityOfPage": "https://flightaware.engineering/", "description": "The Engineering Blog from FlightAware" } </script> <meta name="generator" content="Ghost 5.115"> <link rel="alternate" type="application/rss+xml" title="Angle of Attack" href="https://flightaware.engineering/rss/"> <script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.50/umd/portal.min.js" data-i18n="true" data-ghost="https://flightaware.engineering/" data-key="5ee5f6d4780d584371e1eb31b2" data-api="https://flightawareengineering.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content, .gh-post-upgrade-cta { display: flex; flex-direction: column; align-items: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; text-align: center; width: 100%; color: #ffffff; font-size: 16px; } .gh-post-upgrade-cta-content { border-radius: 8px; padding: 40px 4vw; } .gh-post-upgrade-cta h2 { color: #ffffff; font-size: 28px; letter-spacing: -0.2px; margin: 0; padding: 0; } .gh-post-upgrade-cta p { margin: 20px 0 0; padding: 0; } .gh-post-upgrade-cta small { font-size: 16px; letter-spacing: -0.2px; } .gh-post-upgrade-cta a { color: #ffffff; cursor: pointer; font-weight: 500; box-shadow: none; text-decoration: underline; } .gh-post-upgrade-cta a:hover { color: #ffffff; opacity: 0.8; box-shadow: none; text-decoration: underline; } .gh-post-upgrade-cta a.gh-btn { display: block; background: #ffffff; text-decoration: none; margin: 28px 0 0; padding: 8px 18px; border-radius: 4px; font-size: 16px; font-weight: 600; } .gh-post-upgrade-cta a.gh-btn:hover { opacity: 0.92; }</style> <script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.5/umd/sodo-search.min.js" data-key="5ee5f6d4780d584371e1eb31b2" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.5/umd/main.css" data-sodo-search="https://flightawareengineering.ghost.io/" data-locale="en" crossorigin="anonymous"></script> <link href="https://flightaware.engineering/webmentions/receive/" rel="webmention"> <script defer src="/public/cards.min.js?v=0aafd551d9"></script> <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=0aafd551d9"> <script defer src="/public/member-attribution.min.js?v=0aafd551d9"></script><style>:root {--ghost-accent-color: #15171A;}</style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-498336-7"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-498336-7'); </script> </head> <body class="home-template"> <div id="nav" role="banner" class="navbar w-nav"> <div class="wide-container"> <div class="white-text"> <div class="inner-page-nav-container"><a href="/" class="blog-name-link white-text w-inline-block"> <h1>Angle of Attack</h1> </a> <div class="flex-engineers"> <div class="engineers white-text"> <div>a blog by the engineers @</div> </div> <div><img src="/assets/images/flightaware_logo_darkmode_2x.png" width="106" alt="flightaware logo"></div> </div> </div> </div> </div> <div class="w-nav-overlay" data-wf-ignore=""></div> </div> <section class="page-wrapper"> <style> .navbar { display: none; } @media screen and (max-width: 640px) { .navbar { display: block; } } </style> <header class="blog-header"> <div class="box blog-box"> <div class="blog-home-hero"><img src="/assets/images/flightaware-angle_of_attack-hero-image2.svg" width="1725" alt="Angle of Attack a blog by the engineers at FlightAware. Image of an aircraft taking off into developer tools." class="blog-hero-image"> <div class="mobile-hero-image"><img src="/assets/images/angle-of-attack-mobile2.svg" alt="" class="image"></div> </div> </div> </header> <div id="index" class="container"> <main class="content" role="main"> <div class="extra-pagination"> <nav class="pagination" aria-label="Pagination"> <div class="inner"> <div class="box pagination-box"> <span class="pagination-info">Page 1 of 7</span> <a title="Older Posts" class="pagination-prev" href="/page/2/"><span class="pagination-label">Older Posts</span> <i class="icon icon-arrow-right"></i></a> </div> </div> </nav> </div> <article class="post featured"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="03-03-2025">3/3/2025</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/nathan/">Nathan Reed</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/blast-from-the-past-a-new-ios-map-component-for-flightaware/">Blast from the past: A new iOS map component for FlightAware</a></h2> <p class="post-excerpt">This blog post was originally published in November 2024. We鈥檙e publishing it again now because we thought it would be helpful to highlight how and why our iOS map component leverages Apple鈥檚 MapKit framework and Apple鈥檚 base map tiles as part of the overall solution.</p> <a href="/blast-from-the-past-a-new-ios-map-component-for-flightaware/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post featured"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="03-02-2025">2/3/2025</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/will/">Will Koury</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/overhauling-authentication-at-flightaware/">Overhauling Authentication at FlightAware</a></h2> <p class="post-excerpt">As FlightAware moves away from its monolithic Tcl tech stack to a distributed micro service architecture, many core services need to be split out from the monolith to keep the system running.</p> <a href="/overhauling-authentication-at-flightaware/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="08-01-2025">1/8/2025</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/adam/">Adam Purtee</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/flight-page-variations-and-how-they-impact-testing/">Flight Page Variations and How They Impact Testing</a></h2> <p class="post-excerpt">In this blog post, I鈥檓 going to be describing several of the ways that the flight page, on the FlightAware website, displays data, as well as the testing perspective on that specific view of the flight page.</p> <a href="/flight-page-variations-and-how-they-impact-testing/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="02-12-2024">12/2/2024</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/sheena/">Sheena Madan</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/the-playwright-advantage-strategies-for-effective-test-automation/">The Playwright Advantage: Strategies for Effective Test Automation</a></h2> <p class="post-excerpt">At FlightAware, one of our key priorities is to consistently deliver high-quality software. We are committed to maintaining and continuously improving product quality, benefiting both our customers and engineering teams. Test automation is crucial in achieving this goal.</p> <a href="/the-playwright-advantage-strategies-for-effective-test-automation/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="03-11-2024">11/3/2024</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/nathan/">Nathan Reed</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/a-new-ios-map-component-for-flightaware/">A new iOS map component for FlightAware</a></h2> <p class="post-excerpt">Earlier this year, we released a rewritten map component for our iOS app. This blog post will cover some of the design choices we made for the new map and lessons we learned along the way.</p> <a href="/a-new-ios-map-component-for-flightaware/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="07-10-2024">10/7/2024</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/ben/">Ben Burwell</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/building-a-bridge-from-tcl-to-rust/">Building a Bridge from Tcl to Rust</a></h2> <p class="post-excerpt">Much of FlightAware is implemented in a scripting language called Tcl, which has served us well since our inception nearly two decades ago. But looking around at today鈥檚 software ecosystem, it鈥檚 difficult to claim that Tcl will continue to be the best choice for our needs in the future.</p> <a href="/building-a-bridge-from-tcl-to-rust/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="03-09-2024">9/3/2024</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/samantha/">Samantha Turnage</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/2024-intern-summer-projects/">2024 Intern Summer Projects</a></h2> <p class="post-excerpt">This summer, FlightAware welcomed five interns from various parts of the country. These interns worked closely with our engineering team on their projects, achieving remarkable results.</p> <a href="/2024-intern-summer-projects/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <article class="post"> <div class="inner"> <div class="box post-box"> <div class="flex-title-line"> <div class="listing-byline-parent"> <span class="post-meta"> <time datetime="05-08-2024">8/5/2024</time> </span> <div class="icon-margin"><img src="/assets/images/icon-enroute-flight.svg" alt="airplane icon"></div> <span class="post-meta"> <a href="/author/jonathan/">Jonathan Cone</a> </span> </div> <div class="list-divider"></div> </div> <h2 class="post-title"><a href="/blast-from-the-past-2023-intern-projects/">Blast from the past: 2023 Intern Projects</a></h2> <p class="post-excerpt">Our 2024 interns are hard at work on their final projects this month. We will post about them soon, but in the meantime, let&#39;s look back at the amazing 2023 interns in this blast from the past!!</p> <a href="/blast-from-the-past-2023-intern-projects/" class="button w-button">READ&nbsp;NOW</a> </div> </div> </article> <nav class="pagination" aria-label="Pagination"> <div class="inner"> <div class="box pagination-box"> <span class="pagination-info">Page 1 of 7</span> <a title="Older Posts" class="pagination-prev" href="/page/2/"><span class="pagination-label">Older Posts</span> <i class="icon icon-arrow-right"></i></a> </div> </div> </nav> </main> </div> <div id="search" class="container"> <div class="content"> <div class="blog-header"> <div class="inner"> <div class="archive archive-search box archive-box"> <form class="search"> <input type="text" id="search-field" placeholder="Search&#8230;" /> <input type="submit" value="search" /> </form> </div> </div> </div> <div id="results"></div> </div> <div class="search-close"></div> </div> <div class="footer"> <div class="flex-footer"> <div> <a href="http://flightaware.com" target="_blank" class="footer-margin w-inline-block"><img src="/assets/images/flightaware_logo_darkmode_2x.png" width="106" alt="FlightAware logo"></a> </div> <div style="display: inline-flex; flex-direction: row; flex-wrap: wrap; padding: 4px; justify-content: center;"> <a href="http://www.flightaware.com" target="_blank" style="padding-left: 4px; padding-right: 4px" class="link-block w-inline-block"> <div>flightaware.com</div> </a> <a href="https://flightaware.com/about/termsofuse" target="_blank" style="padding-left: 4px; padding-right: 4px" class="footer-margin w-inline-block link-block"> <div>Terms of Use</div> </a> <a href="https://flightaware.com/about/privacy" target="_blank" style="padding-left: 4px; padding-right: 4px" class="footer-margin w-inline-block link-block"> <div>Privacy Policy</div> </a> </div> <div style="table-layout: fixed; display: table;"> <a href="https://www.linkedin.com/company/flightaware/" target="_blank" class="footer-social-icon-div w-inline-block" style="padding: 10px" ><img src="/assets/images/icon-linkedin.png" alt="linkedin logo"></a> <a href="https://github.com/flightaware" target="_blank" class="footer-social-icon-div w-inline-block" style="padding: 10px"><img src="/assets/images/icon-GitHub.png" alt="github icon"></a> <a href="https://flightaware.com/angle-of-attack-feed/rss.xml" target="_blank" class="footer-social-icon-div w-inline-block" style="padding: 10px"><img src="/assets/images/icon-rss-feed.png" alt="github icon" width="16"></a> </div> </div> </div> </section> <script type="text/javascript" src="https://flightaware.engineering/assets/js/script.js?v=0aafd551d9"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10