ppetru / morse-camp Goto Github PK
View Code? Open in Web Editor NEWMorse Camp trains you to have fluent conversations in Morse code.
Home Page: https://morse.camp
License: GNU Affero General Public License v3.0
Morse Camp trains you to have fluent conversations in Morse code.
Home Page: https://morse.camp
License: GNU Affero General Public License v3.0
https://developers.google.com/web/fundamentals/app-install-banners/
Also link to something like https://www.howtogeek.com/196087/how-to-add-websites-to-the-home-screen-on-any-smartphone-or-tablet/ instead of the current brief instructions -- some users are getting confused.
Implement an automatic continuous mode, where no interaction by the user is needed.
The present Settings, allow to set the number of repetitions of a word...
Additionally
1.) A toggle switch to enable/disable "Continuous Mode"
2.) A setting slider for the pause before the next (different) word is sent
would be needed.
In that manner no user interaction is needed and one may listen to a continuous stream of different words. During a walk, a smart phone could just play this stream.
It might give the user small motivation boosts if the app kept track of and notified upon various "achievements", for example:
Allow users to supply a word list that would replace the built in dictionary.
Since the app is completely client side right now, this would likely take the form of a textarea that the user can paste the list into (one word per line or similar), then save the contents to local storage and use it when selected by the user through a config toggle.
These would be useful on desktop systems.
Perhaps with a toggle that switches between characters and words for the existing min/max controls. When in words mode, the auto-progress logic would add words instead of characters.
These would be useful for saving settings and stats on the server and not have them lost when switching between devices.
The Firebase auth and database modules should be useful for this.
Somewhat controversial since extra spacing is not very useful for head copy skills. That said, multiple folks asked for it and it might help avoid scaring beginners away.
Farnsworth spacing is also better than lowering the speed too much, so once this is implemented we could raise the minimum speed to 18 WPM or so.
Right now the randomness in picking the words is biased towards those words that were not correctly understood. Some users just want true randomness, so there should be a way to configure that.
The app currently requires the user to stare at their device, which is not always possible or pleasant.
Especially on mobile devices, there are several other ways of interaction that could be used: accelerometer, vibration, speech synthesis, speech recognition. It would be interesting to try them out and make it possible to practice without looking at the screen.
For example, the user could control the app by knocking on their phone once or twice, and the app could respond via speech synthesis or by vibrating.
Make it easy for users to spread the word. Important: the buttons & associated code should only load when opening the About tab (and preferably should be lightweight).
Allow the user to configure simulating poor receive conditions to be applied to the generated sound, such as:
It would be nice if the user-supplied dictionary was extended to count the frequency of words. This would be helpful for those who define the dictionary by cut-and-pasting a book or article into the application.
Number of times trained, progression stats, etc. There are a lot of interesting things that could be tracked and showed to the user in graph format to help them visualize their progress and encourage them.
A friend has requested that we support QSO phrases. The idea would be to create shorter more common phrases, such as "RST 599" and ramp up to longer less common phrases, such as "UR RST IS 358".
It seems like this would be best supported as a separate trainer.
There's a few places where we wrap the output of a component in a div tag just to be able to return multiple elements. React now has native support for this which we should use instead: https://reactjs.org/docs/fragments.html
Configurable / default to unlimited.
Right now all words must be in the dictionary, including all numbers. Some users want to practice random numbers, which would take up too much space to pre-generate but could be easily generated at runtime.
Practice is most effective when done regularly. The app should allow users to subscribe to reminders to practice.
This can be implemented using web push notifications.
A user has requested that the application support voice announcement in a hands-free mode.
IMO, this doesn't fit within the Read Trainer. It might work as an Association Trainer. Perhaps there could be a loop that automatically selects a word, plays it in Morse code, pauses for a specified amount of time, announces the word in an audible voice, and then repeats. Perhaps it could start with relatively short common words and move to longer, less common, and multiple words.
It would be helpful for those just getting started in their Morse code journey if they could practice with single characters. Each character is played one or more times, then the application prompts them for the answer.
It would be ideal if the application kept track of performance, started with just two characters, and incrementally added characters as the user progressed.
For those on a computer, it would be nice if the application also allowed them to press the corresponding key for the character playing. If it is correct, the next letter is played. If the user is wrong, they are notified, and they can try again.
Right now it's just a random selection of words.
What many other Morse trainers use is canned QSO-style templates with placeholders for name / rig / etc. This works but quickly gets repetitive.
We'd ideally have something like a Markov chain (or one of the newfangled char-rnn type text generators) trained on a bunch of both natural text and QSOs. Such a model would be relatively compact yet generate endless amounts of novel text to practice with. The main issue would be getting enough real QSO text for training.
This could reuse a lot of the Read Trainer text generation, but focus on "head sending" skills instead.
This means helping the user send what's in their mind, instead of having them send something that's visible on the screen. Thus, the text to send would have to disappear after (or just before) the user has started sending.
For interfacing, this should use mouse and/or keyboard events configurable by the user. This would allow using any of the existing methods of hooking up a Morse key or paddle to the computer or mobile device.
i.e. more than just the current English one.
This would just play long form text without a correct/incorrect feedback loop, aiming to further develop head copy skills.
The text could either be supplied by the user, downloaded from an URL, or generated by a model such as the one described in #6.
Suggested by N0MII: Give the user the ARRL section abbreviations, and some common, random class. Maybe also combination of both for each element sent to the user:
3A SCV
1B STX
4A MO
etc.
For each piece of text played, randomly pick a frequency from a range configured by the user.
Steps for reproduce
Automatically Repeat
Actual result:
Disabled Automatically Repeat
is not persisted in local storage.
Expected result:
Disabled Automatically Repeat
is persisted to local storage between restarts.
In the Read Trainer Settings, the user should be able to toggle between Manual and Automatic repeats. If they select Manual repeats, the Delay Before Repeat and Max Repeat Sliders should be disabled or dynamically disappear.
It is important to preserve the user experience and limit UI/UX clutter in the Reader Trainer. I recommend that the button be placed next to the SHOW button.
(I have had a couple of users request an option for a manual repeat.)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.