-
Notifications
You must be signed in to change notification settings - Fork 83
[DXWaterfall] DX Waterfall for QSO page #2429
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
WOW! i just read your description and pulled it on my dev. stunning. i need to dig in a bit and have already a few questions (just testing it out for about 5mins, not more):
i grabbed my 1st cup of coffee a few minutes ago and i am flashed about your PR. This is one of the best things i've seen during the last few months. Respect! Let's try to make it production-ready together. however: really great work. |
|
Minor Issues i found so far:
This feature is really amazing. It even works together with the actual Bandlist at tools. i am flashed. |
|
@szporwolik looking at the pictures, I gotta say WOW myself. This looks really nice, and once we iron out the bugs, I guess it can be merged. I stumbled onto an error here, that seems to kill most functionality: |
| // Add a small delay (500ms) before first poll to allow radio interface to initialize | ||
| setTimeout(function() { | ||
| updateFromCAT(); | ||
| // Then poll every 500ms |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is far too much. We know of instances running a thousand users and more. 3seconds was set for a reason.
i know: websockets would make it much more easier here. but we're on PHP and websockets are not really possible without a daemon (which can't be started/run on "el-cheapo-hosters")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion, as a compromise:
set it back to 3000 (as default), and make it configurable at config.php (for small instances).
please no configuration in UI. Reason: some admin without deeper knowledge could set it accidently to 500ms (or even lower) and crash the whole instance
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, the thing is that the lower you go, the more responsive it get's when you are dialing radio.
What about new global setting for that - single, small instances hosted locally would probably go as low as 100ms, while admin's of the big ones could set it to 3 or event 5 secs. ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
100ms? that even more than the 500ms atm.
i'd vote for a default of 3000ms.
and instance-owner can adjust the value within config.php. put a warning to config.php that this may cause a DoS when set too aggressive.
i think with that compromise even "hold my beer while instance is burning"-owners could set it (on their own risk) to 100ms or less.
But default should be rock-solid and stable. 3000ms was and is tested even with huge instances in the wild.
[edit - thinking loud]
One could implement a Websocket-Server to WavelogGate and use that, instead of doing the roundtrip via old'n'busted PHP. but that's another huge refactor.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will go with the config.php for now that is a good proposal and in fact it's easier than anything else. 😉
There is a locking mechanism, so timer ticks every value given (like 500ms), but actual request is being send only if the previous was has completed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i just released WLGate V1.1.10 which supports websockets.
in combination with #2434 it reduces the load in a massive way. There are little delays when doing QSY, but that's because the Gate "debounces" every QSY/ModeChange to make sure frequency is settled.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perfect! The websocket is the way to go, question about the back combability - having the current DX Waterfall to work with CAT and handling all async cases requires a lot of code. Implementing WebSocket in parallel will make everything even more complicated.
Proposal: I would drop support of the legacy code (CAT with MySQL in between) and make to code working only with the websockets.
What do you @int2001 think about ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i built a ready 2 use codesnippet into footer.php and contesting.js. it supports both. see here:
on WebSocket: Realtime with pushes.
on Fallback/Roundtrip mySQL: 3000ms
once this is merged i could help you to refactor this beauty in a way it works with both.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Backwards-Compat is important. not everyone uses WLGate. Lots of people use own python/bash/$whatever scripts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got you, will check in the evening. Everything is possible, it's only just about additional lines of code. 😄
Will check, you are clearly using other PHP version than myself. Any chance to provide PHP version which you are on ? |
|
sure. i noticed the bug as well. but only once. my dev runs on 8.4.12. production on 8.3.24. Hint: @AndreasK79 found already out a possible root-cause: see here: https://github.com/wavelog/wavelog/pull/2429/files#diff-75a656aa0d26b2f4cb87a9a884fac77b4f8913708ad7abf984bdefe1d2b05324R227 the clubstation thing has to be the last parameter |
|
@szporwolik PHP 8.2.4 here. |
I was thinking about it as well, so enabling the feature would give you an option to then later turn of/off the feature.
Yes, this is not the most intuitive thing in the world, but the spot labels have meaning: red (not worked), orange (worked not confirmed), green (confirmed). The border goes for continent, label's background for DXCC and the small dot next to the callsign - the callsign. I was space limited and did not wanted to clutter the view to much. When spot is active, the gold, silver and bronze are displayed as well.
This is correct behavior, you can click/scroll through the band and the nearest spot information will be displayed at the top bar. Then you can use those two small icons at the top to copy info to QSO Form or tune to exact frequency.
This is one of the features which we miss, the Edges does some of the job - but I wanted to really mark the available band depending on the IARU region you are work for. So, now there is json in the future I would probably go with the full region support in the Wavelog backend with bandplans stored in the MySQL. |
Great. could make it much more useful
once understood (you even thought about tooltips - wow!) it is a nice approach.
Yes, sure. but it isn't intuitive. i had to search by myself how to copy the spot into the QSO-Form. i'd still vote for "copy it automatically to qso-form" when clicked. if you feel uncomfortable with it, what about a compromise: some switch at the waterfall, where one could say: "Take the clicked spot automatically to the form" when enabled (default). And when disabled he has to click on the icon or use the keyboard-shortcut? One main mantra of Wavelog is: keep it simple, reduce support for end-users.
tbh: we're trying to get rid of redundant Bandplan-Data during the last months. i strongly recommend to use the data which is in database. even if Regions are missing there. Way forward could be: add regions later to the existing DB it and use them. but for now i'd rather see it without the Region-Edges than implementing an extra source for the data |
I'm not the Mac person, what would be the default key at Mac to modify role of the button ?
This will be displayed when there is no spot nearby, I wanted to limit the place the feature takes, so this is kind of workaround.
Good idea! 😄 |
|
Added TODO list to the PR description to better track the suggestion/bugs. |
i can only tell what's working: all those Hotkeys which are based on "ALT" as modifier key. but: sometimes Firefox overrides keybindings with its own hotkeys. E.g.: Have a look at ALT+L binding.
Understand. but without the "click and log"-Feature i already mentioned, there's no copying of spot/call possible. i noticed the message as well, when there's a spot. not intutive, as told. it could all be solved with that "click and log"-feature.
|
Thanks, will think what to do with it.
Added to todo, I think I have an idea how to handle this. |
|
Implemented initial changes after your feedback (thanks!): Items changed:
More to come... Any feedback is more then welcome! |
The error is gone now, so great work! As for the other issue you raised, I'll look into it at a later point (probably this weekend). One thing I noticed though. The labels are very small, and I need to increase the zoom level in the browser to read them.
Keep it up! |
|
From my point of view it works very good now. |
|
Tested, verified, and refactored — this will still require extensive testing while in the I understand this review won’t be easy — it’s a massive one (sorry 🫨 ). My suggestion: focus mainly on the common file changes. Note: Tuning and band changes are asynchronous, with no instant confirmation from the radio that tuning succeeded. Considering all the great discussions above — and keeping backward compatibility and WLGate simplicity in mind — I decided to release it as it is. In my humble opinion, it’s more than “good enough”, though not “perfect”. As we often say in Poland: Lepsze jest wrogiem gorszego / Le mieux est l’ennemi du bien / Das Bessere ist der Feind des Guten / Perfect is the enemy of good - so, let’s review, fix and go with it. 🙂 |
|
@szporwolik sorry for the merge conflict. Please fix :) It will be good to have this merged into dev, to avoid too many of these conflicts. I will try to test this tonight. |
int2001
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor things i noticed b4 approving it. nothing wild
|
@AndreasK79 no problem an easy one! |
int2001
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. Finally. Very Very good.
Since this is a really huge PR, we should at least wait for some other Core-Team-Members to approve b4 merging.
phl0
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just tested this PR in my dev environment (which does not have CAT control). Waterfall display works and all the logic with clicking callsigns, changing bands / modes works. Thumbs up from my side.
|
Tested this a bit, and it worked here. I say it's ready to merge into dev for further use and testing. |
|
🎉 Thanks for support and - again - please excuse it's size. |
|
On my screen the background is constantly kind of flickering, like noise in a real waterfall. |



Background
This one falls into the "love it or hate it" category... 😉
As an amateur-amateur ham radio operator with a simple wire antenna setup and a single TRX at QTH, I decided to switch from desktop logging software to Wavelog. It works well for most of my needs, but I really miss having a convenient DXCluster view directly on the logging page to quickly check what's happening on the bands.
That’s where the proposed DX Waterfall feature comes in. 🎉
Overview
The DX Waterfall is a JavaScript object built on a
canvaselement.It appears above the QSO logging section on the QSO page when operating in Live Logging mode.
Main Features
A minor change was proposed to the DXClusterAPI to improve SOTA integration (a fallback is included if the change is not accepted).
When CAT control is active, the radio frequency has priority — moving the dial updates the center marker (red line), and changing bands on the radio triggers a DXCluster update.
It can also work in reverse, allowing the waterfall to control the radio.
Users can control the waterfall using keyboard shortcuts to:
This allows for fast and efficient operation without relying on the mouse.
The spot age and continent defaults are taken from existing Wavelog global options.
General Notes
While this feature introduces over 7500 lines of code, most of it resides in a single monolithic JS file managing the
DXWaterfallobject. Only minor changes were made to the QSO page andqso.jsfor integration.I had to touch user settings, so per comment in the code I'm tagging @int2001 @phl0 .
The feature can be enabled per user in their settings and is disabled by default.
This is draft pull request, there is still lots to improve and especially to test - I will let you guys now when ready for the testing. If in the meantime anybody will be willing to check/test I'm open to the feedback.
TODO
Prior merge