/Skewt

Primary LanguageSwiftMIT LicenseMIT

Skew-T logo  Skew-T²

An open-source, iOS app for viewing sounding data and forecasts from NOAA

What's a Skew-T Log-P?

If weather is the Matrix, reading a Skew-T Log-P chart is reading the green text. Meteorologists and glider pilots understand. All pilots should!

📈 The lines

The two plotted lines are temperature (red) and moisture/dew point (blue). Height is height. (Pressure altitude is plotted logarithmically, hence Log-P). Left is cold; right is hot. Temperature is skewed so that a constant temperature atmosphere would slope up and to the right, hence Skew-T.

Temperature line example

☁️ Lines touch = clouds

The temperature falling to the dew point makes clouds/dew/precipitation. This would be shown as the temperature plot touching or nearly touching the dew point plot.

Here is a low marine layer of clouds:

Marine layer example

And a thick layer of rain:

Rain example

📐 The other lines

All sorts of other weather characteristics are easily identifiable on a Skew-T Log-P plot. The plot often includes guidelines that show how temperature tends to fall with altitude for dry and moist air. These can be used to predict icing, convective activity/thunderstorms, and wind shear, to start.

Guidelines

What is this data?

🎈 Soundings

Weather balloons are released twice a day from dozens of locations around the US and hundreds around the world.

🧮 Forecasts

NOAA forecasts provide predicted sounding data on a grid. The default model (Op40) is hourly on a 40km grid for up to 18 hours in the future.

🇺🇸 US only?

The sole data source is the US's NOAA. Forecast data is only available for the US, but 12 hour soundings are available from US military bases all over the world.

Further Skew-T Log-P references

How was this app built?

SwiftUI

  • Fully declarative UI
  • Immutable state managed via...

Redux

  • A dirt simple implementation of Redux, following this article: Redux architecture and mind-blowing features
  • Every view uses a @EnvironmentObject var store: Store<SkewtState> with @Published private(set) var state: State
  • Each UI action dispatches an Action to the store's dispatch
  • Every state struct has a Reducer pure function to turn a State and an Action into a new State
  • Middlewares handle remote data, saving state, logging, and handling location data

Combine

  • Network requests are all performed via URLSession.shared.dataTaskPublisher, mapping responses and failures to Redux actions
  • Debounced UI is handled via bindings and Combine

What's in the works?

Privacy

  • No user data is collected, period. This may be revisted later for anonymous analytics.
  • User location, if granted, is anonymized before being sent to any external API.

Free?

Skew-T Log-P plots will stay free as long as a free API exists. Future interactive lessons, quizzes, integrations with external tools, and more advanced visualizations may appear with a cost.

Hire me to build your app

Itsa me