florisboard / florisboard

An open-source keyboard for Android which respects your privacy. Currently in early-beta.
https://florisboard.org
Apache License 2.0
6.01k stars 400 forks source link

[Feedback] Traps to Avoid #147

Closed Glitchy-Tozier closed 3 years ago

Glitchy-Tozier commented 3 years ago

Hey, you probably know and have thought about many of those issues, I just wanted to give feedback. And list a few things, that probably should be avoided.

Here's a few traps some other keyboards seem to have run into:

I really love FlorisBoard so far, thank you for also releasing it on FDroid, and keep up the good work! :)

patrickgold commented 3 years ago

@Glitchy-Tozier Sorry that I am just now answering to your feedback, I completely oversaw it it seems. I have read through your feedback and answered every bullet point below:

ASK: AnySoftKeyboard (ASK) hast tons of features and precise settings, but they are poorly ordered and very hard to find. Even if you know exactly what you're looking for. Currently, FlorisBoard seems really well designed, i just wanted to mention that it is important to keep it this way.

That's great to hear that you like the Settings structure thus far. Although I also have to say that in v0.6.0 or even in v0.5.0 I will have to get rid of the bottom navigation and introduce a list like Gboard does it, as I will just have to many different options available and a bottom navigation bar does not allow for this really. But I will try to make the UI as clear and simple as possible while providing a lot of options to configure FlorisBoard to your liking.

ASK: Keyboards are very weirdly spaced. The positions of some keys don't resemble real keyboards at all. (for example, A-L are streched out, resulting in A being below Q (which is fine) and L being below P (which is not fine).) FlorisBoard stays pretty close to how real keyboards are spaced, and i think it is good this way. If in any way possible, please try to keep it this way, even if you implement keyboards that for some reason use mor keys.

The default spacing of keys for layouts like QWERTY, QWERTZ, etc. is designed to feel like the one of Gboard and OpenBoard, so this should be mostly fine. There are though some languages which require a few more keys and the keys just can't be aligned perfectly, but even then I will stick close to the already established standard.

OpenBoard: Very few releases, long periods of inactivity. This is especially annoying, when there are major issues (they messed up German a bit), which will now stay for at least a few months.

I try to release a new version every 1-2 weeks to keep the added features balanced. I have to admit though that the v0.3.2 and v0.3.3 span was 3 weeks (due to the theme rework). The next release v0.3.4 will contain a lot of bug fixes and will be released next Sunday according to my plans. My release cycle is not static (because I hate deadlines), but still I try to have a general rhythm in weekly or semi-weekly so you always get the latest and greatest!

All open-source keyboards: Next-word-prediction doesn't exist or is really bad.

I cannot guarantee that FlorisBoard's next-word prediction works fine and is accurate from the beginning, but of course I will try to create a better experience than some other keyboards provide, possibly with simple local AI modules too (big maybe though). This part is one of the single most difficult though I have to say, so I have some understanding that an open-source keyboard may not have sufficient resources to create a truly well-working next-word prediction service.

Most other keyboards: require tons of permissions, not privacy friendly.

Like I often said I do not want to have privacy invasive permissions in the core APK. Some features though require for instance the NETWORK permission (GIF, Stickers, etc.) which will be implemented as a standalone extension pack, which can dynamically be installed and then used. This way I can containerize the code which has even access to the network and users who do not want this simply do not install the extension pack.

I really love FlorisBoard so far, thank you for also releasing it on FDroid, and keep up the good work! :)

Glad you like FlorisBoard thus far! And sorry again for answering to this detailed feedback just now, it seems that it went underground while so many new issues where incoming :)

Glitchy-Tozier commented 3 years ago

Thank you for the thourough reply! :) I read everything, but let me only reply to the answers where I can add something:

I cannot guarantee that FlorisBoard's next-word prediction works fine and is accurate from the beginning, but of course I will try to create a better experience than some other keyboards provide, possibly with simple local AI modules too (big maybe though). This part is one of the single most difficult though I have to say, so I have some understanding that an open-source keyboard may not have sufficient resources to create a truly well-working next-word prediction service.

I understand that this won't be easy. One big thing is that the app should be able to learn from what the user typed. For example, if you often write something like "Best regards, Glitchy Tozier" , the keyboard should suggest "Glitchy" after "regards" and "Tozier" after "Glitchy". Problem: That would probably require some way of logging what the user writes. Apart from that being difficult to implement, it might scare some people (including me) Solution:

  1. Maybe also allocate this to an optional module
  2. Don't save the plain text the user wrote but something like After the word "Glitchy", the user wrote "Tozier" 10 times, wrote "See" five times, and wrote "hshshvsb" one time

Some features though require for instance the NETWORK permission (GIF, Stickers, etc.) which will be implemented as a standalone extension pack, which can dynamically be installed and then used. This way I can containerize the code which has even access to the network and users who do not want this simply do not install the extension pack.

That is such a genius idea, I never thought of that!!

Glad you like FlorisBoard thus far! And sorry again for answering to this detailed feedback just now, it seems that it went underground while so many new issues where incoming :)

Yeah, there seems to be a lot of demand for a good open-source keyboard ;)

Also, this just reminded me: One thing you do really well is that you reply to all issues, and fairly quickly so. That is a very nice habit to have and makes it way more motivating to be a part of this project. Again, great work so far! :)

If you want, you can close the issue. Of course, if you want to keep it open for some reason, i'm fine with that too.

patrickgold commented 3 years ago

Thanks for your fast response!

I understand that this won't be easy. One big thing is that the app should be able to learn from what the user typed. For example, if you often write something like "Best regards, Glitchy Tozier" , the keyboard should suggest "Glitchy" after "regards" and "Tozier" after "Glitchy".

This is also my understanding how I want the next word prediction to work and how I want it to work.

Problem: That would probably require some way of logging what the user writes. Apart from that being difficult to implement, it might scare some people (including me)

Logging and saving the user input in plain text is both a huge privacy concern and (I think) the least efficient way this feature could be implemented, as this requires a ton of storage space over time and searching through the saved data is fairly slow. I can fully understand that this would be scary to you or other users, this is why it won't ever be implemented this way.

Solution: Maybe also allocate this to an optional module

I will definitely make this feature toggleable, but it will be included in the core, as I will implement it in a non-privacy invasive way.

Don't save the plain text the user wrote but something like After the word "Glitchy", the user wrote "Tozier" 10 times, wrote "See" five times, and wrote "hshshvsb" one time

If I implement it as an AI module, I will constantly feed the local machine learning process what the user inputs. The process then outputs n possible words what could come next and if the user actually enters one of these, the AI is "happy" and marks this path as right, else it does an reverse error calculation. This way, after some typing the AI can somewhat predict what the next word will be based on the current context and no input text is ever saved on the disk, only the internal values of the "brain" of the AI model. But please don't take every word on how AIs work, this is just how I remember it when I played around with them in Python years ago when I wrote a simple number detection AI module :)

One thing you do really well is that you reply to all issues, and fairly quickly so. That is a very nice habit to have and makes it way more motivating to be a part of this project. Again, great work so far! :)

I try to respond to every comment/issue/email as fast as possible. This is partly possible thanks to the current stay-at-home orders, which give me more free time and enable me to work more on FlorisBoard. But even when things go back to normal, I will still try my best to interact with the community as much as possible. This is also one main motivator for me with FlorisBoard, as I want to learn how to talk and discuss with other people, how FOSS really works and because I want to improve and stabilize my English skills.

If you want, you can close the issue. Of course, if you want to keep it open for some reason, i'm fine with that too.

It would be best if you close this issue (as it just adds to the already big number of open issues), but we can still continue discussing in this thread after it has been closed :)

Glitchy-Tozier commented 3 years ago

I will definitely make this feature toggleable, but it will be included in the core, as I will implement it in a non-privacy invasive way.

Makes sense, if it's properly implemented, it can be implemented directly into the app.

This is also my understanding how I want the next word prediction to work and how I want it to work.

Perfect! One more thing (you probably also thought about): Users should be able to 'chain' next word predictions. Meaning, that this... Type "Best" → click on"Regards" → somehow enter "," → somehow enter [ENTER] → click on "Glitchy" → click on "Tozier" ...should be possible.

If I implement it as an AI module, I will constantly feed the local machine learning process what the user inputs.

Honestly, I don't fully understand how to implement this, but it seems to be a privacy-minded solution. Using AI, you might even use multiple previous words to form predictions. Even "just" one word is would be grear though.

This is also one main motivator for me with FlorisBoard, as I want to learn how to talk and discuss with other people, how FOSS really works and because I want to improve and stabilize my English skills.

I'm also somewhat new to FOSS, and it's pretty fun reporting bugs and breaking apps 😄 Also, I never read anything but perfect english coming from you.

It would be best if you close this issue (as it just adds to the already big number of open issues), but we can still continue discussing in this thread after it has been closed :)

Makes sense, done!