Introducing Elastic: A simple and modern alternative to Shuffleboard

Wouldn’t it cause issues if the program is terminated without unlocking?

1 Like

This is an issue. I found a solution on the Qt forum long, long ago so I’ll see if I can dig it up.

That’s the main reason why I don’t want to go with a solution like this. I think there’s a way of preventing multiple instances by modifying build configuration files for each OS however I haven’t figured out how it works yet.

I can’t find the original Qt forum post, but an alternate solution is to check the process list to check for running instances.

Elastic isn’t made with Qt, but also being able to get a list of processes won’t help too much since it wouldn’t allow me to bring the main instance to the front. I think there’s a way of doing it with mutexes, but I’m not really looking deeply into it at the moment

1 Like

Version 2024.0.1-beta has just been released!

When you open the app while connected to the internet, you will receive a notification letting you know that there is an update. The notification will have a link to download the latest version. Alternatively, you can click here to go to the download page.

Your most recently saved layout WILL be preserved when you delete & replace the application files.

Here are the new features, changes, and fixes

Added:

  • Number bar
  • Voltage view
  • Robot preferences
  • Grid size customizability

Changes/Fixes:

  • Values no longer get cleared from the screen when you disconnect from your robot
  • When unsubscribing from a NT4 topic, any publishers will be unpublished, allowing topics to be properly unannounced when not in use
  • Arrays can now be modified in a text display
  • Combo box chooser now takes up a limited amount of space, preventing overflow into other widgets
  • Split button chooser is now scrollable
  • The add widget dialog no longer locks up when scrolling
  • All camera streams can now be added, previously only usb camera streams would work
  • The 2nd stream in a camera stream widget is now prioritized to prevent using an unusable stream when connected to a robot
  • All channels, voltages, and currents are rounded to 2 decimal places in the PowerDistribution widget, prevents box sizes from jumping all over the place

UI Changes

  • Add widget dialog is more compact and less spaced out
  • Combo box chooser lets you scroll and search if there are a lot of options
3 Likes

Flutter has been working on a multi-window feature for desktop which should hopefully come somewhat soon. Some community packages do this but essentially just launch new instances as far as I’m aware, but the upcoming feature will handle one app instance with multiple windows. No ETA yet unfortunately.

Also, not sure if you’re aware but I published the nt4 implementation as a dart package. So, if you’d prefer to use that over maintaining your own local version then feel free to open pull requests for any improvements you made.

2 Likes

Multiwindow in flutter is a bit weird (besides the fact that it’s not supported officially). The main concern I have is keeping some parts of the program in sync (the connections to Network Tables and the widgets that are on the screen), but keep some parts unique to each window, like the selected tab. Not sure how it could work, but it would probably require a lot of modification.

I saw the nt4 library. There’s a bunch of modifications I made to it on my program to improve the efficiency of the program and be able to keep values in sync. I plan on making a pull request to add some of the modifications I’ve made in my copied version. I added some features such as subscription sharing (it could cause issues though depending on how it is used on another app) and value caching. Once I get finished with the 2024 features, I’ll start working on the PR.

1 Like

I don’t know exactly how Flutter works but having several instances of your main window class should mean you can store window data independently, while application constants like your NT connection, pub/sub objects, etc. remain in a separate, application-wide class.

I don’t know if I’m being dumb or not but I can’t get it to work with the sim. I set the IP address to 127.0.0.1 but it just won’t connect. Am I missing something obvious?

Does 0.0.0.0 work?

Nope just tried it. The screenshot in the initial post shows 127.0.0.1 as the IP address in the bottom left but idk. The app looks nice so I want to try it out but I don’t have a robot atm.

Could you send me a screenshot of your app’s settings?

I’m guessing that it could be something related to your simulation or operating system security settings (sometimes it doesn’t like when things communicate over a web socket). Which operating system are you using?

I’m running MacOS 13.4.

So I did some more research about connecting to web sockets on macOS, and it turns out there is a security entitlement relating to networking that the app doesn’t have. In about 30-ish minutes I’ll publish a new release that fixes this issue.

Once the release is published I’ll announce it on this thread and it should fix the issue that you’re having, you’ll have to manually download this update since in this version the app is also not allowed to connect to the internet to check for updates.

Sorry for the inconvenience!

1 Like

Version 2024.0.2-beta

When you open the app while connected to the internet, you will receive a notification letting you know that there is an update. The notification will have a link to download the latest version. Alternatively, you can click here to go to the download page.

Your most recently saved layout WILL be preserved when you delete & replace the application files.

This update is a relatively small update, but fixes a major issue that was only present on macOS. Behind the scenes I have been making more progress on integrating list & grid layouts.

Changes/Fixes

  • App now focuses when opened, even from the command line
  • All network and internet related functions now work on MacOS
2 Likes

Just tried it out and your app runs great. I think I’m in love. Shuffleboard always felt like the clunkiest piece of software to use so I’m very appreciative of the work you’ve put into making Elastic run smoothly. There are a few minor features/widgets from Shuffleboard that I’m still fond of but shouldn’t be too difficult to add and you can pm if you want any extra help with that stuff. I’ve played around with flutter before so I think I’m comfortable enough with it to add a widget or two. Thanks again though!

I really appreciate it! I made Elastic mostly as a way of learning Flutter (I needed a big project to work on), and also because Shuffleboard is extremely slow. Which widgets in particular would you want added? Right now I don’t really have a priority list with which widgets to add (I just add more stuff when I feel like it), but if there’s specific ones you are looking for I’d be willing to prioritize making them.

1 Like

You’ve already mentioned you’re working on some of them like the swerve visualizer, NetworkAlerts type thing, and lists. But I think a feature where you could set the dashboard to flash certain colors to mimic the leds on the robot (Orbit kinda showed what this could look like in their behind the bumpers) would be a unique and pretty easy thing to add. They also mention in their 2020 btb that their dashboard lets them use keyboard shortcuts to toggle certain things although implementing that specific of a feature may be a little odd. One final thing is being able to overlay multiple lines onto one graph would be cool. I like being able to see how well something is tracking a setpoint and its kind of hard to do it when they are all in different widgets.

Also even though my experience with your app says this won’t be an issue, one thing that bugged me about shuffleboard is that its impossible to tell whether the app had frozen or was just still trying to connect to the robot. I like how in AdvantageScope there is at least some indication when its trying to connect which I think would give me peace of mind when trying to decided whether to restart the app or not while a CSA hovers three inches from my face.

This looks really good. I haven’t had a chance to test it out yet, but one thing I would like to see tested is that Shuffleboard has an issue for us where the values on the board will all go to 0/false if we upload code too many times without restarting the app. This has been annoying especially when testing. Hopefully, this will solve that issue.