Giter VIP home page Giter VIP logo

supercell-wx's Introduction

Supercell Wx

CI Documentation Status Discord GitHub Sponsor

Supercell Wx is a free, open source application to visualize live and archive NEXRAD Level 2 and Level 3 data, and severe weather alerts. It displays continuously updating weather data on top of a responsive map, providing the capability to monitor weather events using reflectivity, velocity, and other products.

Please be sure to check out the documentation before getting started: Supercell Wx Documentation

image

Supported Platforms

Supercell Wx supports the following 64-bit operating systems:

  • Windows 10 (1809 or later)
  • Windows 11
  • Linux
    • Arch Linux (EndeavourOS, SteamOS [Steam Deck], and other Arch derivatives)
    • Fedora Linux 34+
    • openSUSE Tumbleweed
    • Ubuntu 22.04+
    • Most distributions supporting the GCC Standard C++ Library 11+

Linux Dependencies

Supercell Wx requires the following Linux dependencies:

  • Linux/X11 (Wayland works too) with support for GCC 11 and OpenGL 3.3
  • X11/XCB libraries including xcb-cursor

FAQ

Frequently asked questions:

  • Q: Why is the map black when loading for the first time?

    • A. You must obtain a free API key from either (or both) MapTiler which currently does not require a credit/debit card, or Mapbox which does require a credit/debit card, but as of writing, you will receive 200K free requests per month, which should be sufficient for an individual user.
  • Q: Why is it that when I change my color table, API key, grid width/height settings, nothing happens after hitting apply?

    • A. As of right now, you must restart Supercell Wx in order to apply these changes. In future iterations, this will no longer be an issue.
  • Q. Is it possible to get dark mode?

    • A. In Windows, make sure to set the flag -style fusion at the end of the target path of the .exe
      • Example: C:\Users\Administrator\Desktop\Supercell-Wx\bin\supercell-wx.exe -style fusion
    • A. In Linux, if you're using KDE, Supercell Wx should automatically follow your theme settings.
  • Q: How can I contribute?

    • A. Head to Developer Setup and Contributing to configure the Supercell Wx development environment for your IDE. Currently Visual Studio and Visual Studio Code are recommended, with other IDEs remaining untested at this time.

supercell-wx's People

Contributors

adenkoperczak avatar aware70 avatar dpaulat avatar jtleniger avatar renovate[bot] avatar wxfanatics avatar zachdehooge avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

supercell-wx's Issues

Add County Boundaries

County boundaries are needed on the map. This should be a selectable option. Layer ordering of boundaries vs. radar image seems appropriate, but coastlines are not visible underneath a radar image.

Linux Qt Deployment

Qt Plugins are not deployed with the Linux package. As a result, the application fails to run without these already installed and locatable in the current environment.

This should be resolved using the existing deploy mechanism going to Qt 6.5, but needs to be verified.

GL Context Resource Cleanup

Cleanup duplicative resource usage between map instances that use a shared OpenGL context. Consider caching certain resources to avoid having to reload when certain settings change.

Linux Runpath

The Linux build should set the rpath or runpath of the executable in order to eliminate the need to set LD_LIBRARY_PATH when running.

Asynchronous tasks outlive main thread

template<class F>
void async(F&& f)
{
auto future = std::make_shared<std::future<void>>();
*future = std::async(std::launch::async, [future, f]() { f(); });
}

Because futures are not tracked, if the application exits while an asynchronous operation is still running, undefined behavior can occur within those operations.

A mechanism needs to be created to track these futures and wait for asynchronous tasks to complete.

Level 2 Data Rocks

Level 2 products appear to rock back and forth as the frames animate.

Currently, the level 2 rendering takes the start angle, and assumes 0.5 degree or 1 degree radials. However, the angle can vary between radials and scans, so this must be calculated every frame.

The solution will likely be similar to that in 9c44257, but I expect all frames must be recalculated, instead of non-standard ones.

Linux Parallel Algorithms Running in Serial

There is extensive use of the parallel STL using C++17 execution policies. The use of these algorithms behave as expected when compiling for Windows using MSVC.

When compiled for Linux using GCC, the parallel STL defaults to a serial backend, causing poor performance of parallel algorithms.

The Linux build should be updated to use a parallel backend, such as TBB, or another suitable parallel processing mechanism.

Collapsible Groups

As more options become available on the side panel, collapsible groups should be implemented

  • Radar and animation toolboxes should be combined
  • Save which groups are collapsed/expanded to settings

Color Table Legend

The color table displayed on the map should have a legend. Consider flipping from horizontal to vertical with an inset. This is likely to uncover scaling issues with various products.

Double click alert navigation

When double clicking an alert in the alert table, it should either "Go" or "View" the alert (default "Go", configurable in settings).

Display Scaling Issues

If the Windows display scale is set to anything other than 100%, UI elements do not display at the correct position.

Alert Update Crash to Desktop

I've experienced a rare (usually no more frequent than once per 24 hours of runtime) crash to desktop with handling of alert updates.

std::chrono::system_clock::time_point
AlertModelImpl::GetEndTime(const types::TextEventKey& key)
{
auto messageList = manager::TextEventManager::Instance()->message_list(key);
auto& lastMessage = messageList.back();
size_t segmentCount = lastMessage->segment_count();
auto lastSegment = lastMessage->segment(segmentCount - 1);
return lastSegment->header_->vtecString_[0].pVtec_.event_end();
}

When line 415 above is executed, the application may crash if the message list for a key is empty. There should be two fixes:

  1. Handle the case if the message list is empty, and return a default value. This will prevent the crash, but still may result in erroneous behavior.
  2. Determine why message list is empty. This should never happen for a non-default/valid key.

Radar Product Doesn't Animate on Slow Sweep

When the radar product ComputeSweep() function takes a long time (~0.5 seconds or more), animation at higher speeds fails to render updated scans. This is seen on Linux when animating level 2 products, due to #54.

This is likely due to a race condition involving computing the sweep. It could be due to requesting another product too quickly, or another reason.

If the product renders quickly enough, or the animation is slow enough (loop speed), the issue is not seen.

Refresh fails at start of UTC day

Auto-refresh will intermittently fail at the start of a new UTC day, and disable refresh due to "no products available". The product must be selected again in order to re-enable refresh.

Linux Support

Linux support will come in a future update. Currently certain C++20 chrono features (timezones and formatting) are used, which only MSVC currently supports. GCC 16 is expected to bring additional support, otherwise portions will need rewritten, perhaps using Howard Hinnant's date library and/or fmt. Clang does not currently advertise support of these features.

Level 3 radial count other than 360/720 not supported

When a level 3 file is loaded with a radial count other than 360 or 720, the product will not display.

Debug Log:

[2023-05-24 22:46:06.096] [68496] [debug] [scwx::qt::manager::radar_product_manager] LoadProviderData: KLSX, L3, N0C, 2023-05-25 03:37:09
[2023-05-24 22:46:06.097] [68496] [debug] [scwx::provider::aws_nexrad_data_provider] FindKey: 2023-05-25 03:44:16
[2023-05-24 22:46:06.230] [68496] [debug] [scwx::wsr88d::level3_file] Loading Data
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Data Type: SD
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] ICAO:      KLSX
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Date/Time: 250344
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Category:  N0B
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Site ID:   LSX
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::rpg::level3_message_factory] Found Message 153
[2023-05-24 22:46:06.271] [68496] [debug] [scwx::wsr88d::rpg::graphic_product_message] Loading Blocks
[2023-05-24 22:46:06.272] [68496] [debug] [scwx::wsr88d::rpg::graphic_product_message] Product symbology block valid: true
[2023-05-24 22:46:06.272] [68496] [debug] [scwx::qt::manager::radar_product_manager] Initialize()
[2023-05-24 22:46:06.399] [68496] [debug] [scwx::qt::manager::radar_product_manager] Coordinates (0.5 degree) calculated in 0.126764s
[2023-05-24 22:46:06.458] [68496] [debug] [scwx::qt::manager::radar_product_manager] Coordinates (1 degree) calculated in 0.058265s
[2023-05-24 22:46:06.458] [68496] [debug] [scwx::qt::manager::radar_product_manager] StoreRadarProductRecord()
[2023-05-24 22:46:06.459] [68496] [debug] [scwx::provider::aws_nexrad_data_provider] FindKey: 2023-05-25 03:37:09
[2023-05-24 22:46:06.459] [67428] [debug] [scwx::qt::map::map_widget] SelectRadarProduct: KLSX, L3, N0B, 2023-05-25 03:44:16
[2023-05-24 22:46:06.718] [68496] [debug] [scwx::qt::view::level3_radial_view] ComputeSweep()
[2023-05-24 22:46:06.718] [68496] [warning] [scwx::qt::view::level3_radial_view] Unsupported number of radials: 719

Zone File Update - September 19, 2023

Zone and county files will update effective September 19, 2023. Final versions are expected to be posted by July 18. The new files need integrated.

Support for NWS Local Storm Reports

Add support for NWS Local Storm Reports as described at https://www.spc.noaa.gov/climo/online/

A storm report should display on the map. When hovered over, additional information about the storm report should be displayed.

Storm reports should also be available in table format, similar to warnings. Maybe group them under alerts, using a separate tab?

Map Cursor Info

When moving the mouse cursor over the map, information about the hovered location should be displayed, including latitude/longitude and radar bin data.

Alert Dock Refresh

The alert dock does not always refresh, and warning display has a tendency to become stale.

Support MapTiler

Currently only Mapbox is supported as a tile source. Add support for MapTiler. Consider making this flexible for custom map sources as well, as supported by the MapLibre library.

Open Source Licenses

Display open source licenses and other credits in the About dialog (sub-dialog) acknowledgements markdown

Support Out of Sequence Event Updates

If events are updated out of sequence, the most recently received update will incorrectly be treated as the newest. This is not expected to happen during normal retrieval of text products, but can easily occur when loading products manually.

Save map style in settings

The most recently used map style should be saved in the settings, similar to the last product selected.

Alert Hover Status

When an alert/warning is hovered over on the map, a status window should be displayed giving additional information about the alert. There should be a clickable action to pull up the full alert information, similar to the tabular view.

A short option should be available to display only Impact-Based Warning Tags, as opposed to the entire text message segment.

Add Timeline Animation

Add a timeline to the application. This feature should allow the display of animated radar data in a specific time window, in addition to historical data. All products should be synchronized on the timeline as available.

Completed for Prerelease 1:

  • Archive time selection
  • Step through volume scans
  • Animated radar image
  • Adjust number of stored products based on loop time
  • Add limits to loop speed
  • Adjust time listing pruning from oldest first to oldest used first, omitting pruning yesterday and today
  • Fix warning start time of Unix epoch when missing initial text product
  • Auto refresh shouldn't replace stepped or archive display
  • Fix level 2 display

Completed for Prerelease 3:

  • Make delay between loop cycles configurable
  • Older archive views don't work properly
    • Partially fixed. Tested OK with 2013 Level 2 data. Will require additional changes for ~2008 and prior (support for Level 2 Message Type 1)

Required for completion:

  • Save loop time, speed, and delay in settings
  • Fix step begin/end when not all products have the same volume times
  • When playing a live view, auto update incorrectly states "Disabled"
  • Fix switching radar sites in archive view, currently have to toggle live/archive again
  • Fix crash when switching radar sites while loading data from the old site (easily reproducible when starting animation) (#51)
  • Tweak UI to uncrowd the left panel
  • Reduce product cache limit to only include volume times for that product

Maybe (could be deferred to future update):

  • #59
  • Stepped selection when live or archived should apply when changing radar sites
  • Add configurable limit to loop time to prevent memory exhaustion
  • Update animation logic to display intermediate level 2 volume scans

Launch options

It would be nice to be able to pass a flag on my shortcut to disable the console window for those of us uninterested in seeing it.

Lightning data

Would like to see lightning strike data as option to show.

image

Alert Tones

Add a tone for severe weather alerts.

  • Alert tones should be off by default
  • Alert tones should be configurable by alert type
  • Alert tones should be configurable by location
    • Any location
    • Manually selected latitude/longitude or point on map
    • GPS location (Requires #13)
    • County
  • Alert tones should be customizable
  • Alert tones may use the EAS two tone alert by default:

A new library will be required to play audio, with multiple formats preferred (e.g., ogg, mp3, wav, etc.). Qt Multimedia should be given consideration along with lighter weight options. Note GPL dependencies must be avoided.

To monitor for updated alerts, a connection to TextEventManager::AlertUpdated can be made (see alert_layer.cpp as an example).

Add Radar Product Info

When hovering over the time in the upper right of the map, expand the status window to display detailed radar product information.

Asynchronous Threads Outlive Parent Objects

Asynchronous threads are outliving their parents. Some of this has been mitigated with the use of mutexes, but not completely. Because the thread pools are managed outside the object lifecycle, work posted to boost::asio does not ensure the completion prior to parent objects being destroyed - this must be managed by the objects. This is becoming more apparent now that animation is implemented, and the chance of a crash upon object destruction is increasing.

Thread pools should instead be managed by the objects that spawn threads. An example and partial fix is in 1c159a3.

Animate warnings

Warnings should be animated along with the radar scans. The timeline manager emits a SelectedTimeUpdated() signal, which can be used to render warnings active at the selected time.

Is the discord available to the public?

I joined the discord server listed in the readme twice, and both times it had disappeared from my list. Is it an issue on my end or had I been kicked?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.