forum

Key presses per second program

posted
Total Posts
186
Topic Starter
Roan

Keys per second

Update note: You can now also track mouse buttons

So I wanted to know how many keys / second I pressed in osu! And I had already seen programs like this on streams.
I could however not find a program that worked on my computer so I decided to write one myself.

The program when active looks like this (the rightmost graph shows cursor movement):


Menu

Accessible by right clicking on the program.

For each configured key it shows how many times it is pressed. By default it also shows the maximum, average and current number of keys pressed per second.
When enabled it can also show a graph of the number of keys pressed per second over time. The horizontal line in the graph represents the average number of keys pressed per second.

Everything shown in the picture above can be toggled on or off and all the panels can be arranged in a lot of different ways.

You can also move the program using the arrow keys this makes pixel perfect positioning possible :D .
Well I hope some of you find this program useful and/or will use it for your streams (I would love to see that happen :) ).
And if you find any bugs feel free to report them.

Notes

Show Notes
- The horizontal line in the graph represents the average number of keys pressed per second.
- You can add any key, and any number of keys to the program.
- You can also track mouse buttons with this program.
- The overlay option is far from perfect, it just asks the OS to place the program on top. It'll not overlay most full screen games.
- To change a GUI colour in the colours menu, click on the current colour
- An opacity of 100% means completely opaque and an opacity of 0% means completely transparent.
- The snap to screen edge function works on multi-monitor setups.
- You can move the window with the arrow keys at 3 different speeds 1, 2 & 3 pixels at a time (2=Ctrl, 3=Shift).
- You can pass the path to the config file to load via the command line or a shortcut so you can skip the configuration step. Setting the program as the default program to open the configuration file with may work as well as long as you don't move the executable afterwards.
- When resetting something it will also be printed to the console if this program is running using cmd/shell.
- For some people running the program in Windows 98 / ME compatibility mode makes it so it can overlay full screen osu! so if you're lucky this might work.
- If you have an old configuration file (kpsconf1 or kpsconf2) then you need to convert it with version 8.4 to load it in more recent versions.

Updates

See the changelog on GitHub.

Downloads

(Java 8 required, supported operating systems: Mac (tested 10.11.6 & M1), Linux (tested Ubuntu 16.04 LTS) & Windows (tested 7, 8, 10 & 11))
Windows executable
Runnable Java Archive

All releases: link
GitHub repository: KeysPerSecond
awsumturtle
.
KevinWalker
Whoa, nice job man. but, can this program used at mania?
Topic Starter
Roan

swem8 wrote:

Thanks man looking these from everywhere now you made a one thank you you are awesome but how do i apply it to see it on osu?
Idealy you would have a second screen to put it on or check it ocassionally. However I might be able to make it so that it is rendered on top of osu! so I'll experiment with that. It might not work though if osu! forces itself to be the top window. In that case you'd have to disable full screen mode. I'll get back to you once I've figured something out.


SDVX KevinKun wrote:

Whoa, nice job man. but, can this program used at mania?
You can add any key, and any number of keys to the program. So yes it can be used for mania ^^

Edit
I've updated the program and added the option to overlay the osu! window. This will however only work if osu! isn't being run in fullscreen mode (filling the entire screen is fine but the fullscreen option has to be off). Therefore this isn't an ideal solution, there is however no real solution because when I force my program to be the top window when osu! is running in fullscreen mode, osu! minimizes. If someone has a beter idea I'd love to hear it though.
Mustaucheman
Amazing job here, is there any way to make the graph/cur update faster?
Topic Starter
Roan

Mustaucheman wrote:

Amazing job here, is there any way to make the graph/cur update faster?
Yes that would be possible. I'll try to implement a variable update rate as soon as possible. :)

Edit
Implemented, CPU usage still seems to be reasonable even with relatively high settings I wouldn't go to crazy though xD. I do agree however that the program looks a lot smoother and active like this. There is now a button on the config screen that can be used to change the update rate to a value between 1000ms and 10ms. I also changed the 'terminate program' key to Ctrl + U since I forgot that Ctrl + O opens the options menu in osu! so I'd ocasionally terminate the program by accident.

Love these ideas :) please don't hesitate to suggest more features ;)
AGRX
is there way to rearrange key order ?

edit: it seems to launch on mac, will test if it works with wine version of osu, overlay doesnt work for mac.
Topic Starter
Roan

Agrrox wrote:

is there way to rearrange key order ?

edit: it seems to launch on mac, will test if it works with wine version of osu, overlay doesnt work for mac.
There is currently no way to change the key order. I'll implement it as soon as I have some time. Also thank you for testing the program on a mac :)

Edit
Implemented! :) You can now change the position of the keys in the 'add key' window. The keys are then ordered from lowest value to highest value (negative values & skipping indices is allowed).
This information is ofcourse also saved if you save your settings. The only disadvantage of this is that configuration files generated with older versions of the program can no longer be read >.< I'm sorry :( .
AGRX
Also to the interface... i think it will be better to invert the color of background and key, so its always visible when pressed. nice program :D
Topic Starter
Roan

Agrrox wrote:

Also to the interface... i think it will be better to invert the color of background and key, so its always visible when pressed. nice program :D
Thank you :) , do you mean that when a key is pressed I should change the text color to black? If so I'll implement that as soon as I have some time, since that seems like a useful feature ;) .

Edit
Implemented! The color of the text now turns black when the key is pressed, this way the text on a key is always clearly readable :) . And thanks again for your feedback ;) .
NightNarumi
Woah, this seems really interesting, gonna try this out tomorrow :p
Topic Starter
Roan

NightNarumi wrote:

Woah, this seems really interesting, gonna try this out tomorrow :p
Thanks :)
AGRX
looks much better to me :)

can you implement ability to change colour? that would be cool to be able to change this.
Topic Starter
Roan

Agrrox wrote:

looks much better to me :)

can you implement ability to change colour? that would be cool to be able to change this.
:)
Sure I'll implement an option to change the colour as soons as possible (probably later today within ~6 hours).

Edit
Implemented! You can now change the GUI colours in the new colours menu. Both the foreground and the background colours can be changed, don't go too crazy because some colours are just not meant to be used together xD. Also this update shouldn't break previously saved configurations :) .

Edit 2
I thought of some extra features myself so I updated and added those in. You can now track all the keys on you keysboard without having to add all of them (they are not added to the graphical display though since it probably wouldn't fit on your screen, you can still add the keys you want to have displayed, but all of them will be tracked). And I added the option to hide the tracked keys so now it's possible to show just the avg, max, or cur or any combination of them. And it's now also possible to show only the graph. And there are also some optimization & fixes, but you're probably not interested in that anyway. :)

Edit 3
Whilst watching a stream I saw that the total number of hits wasn't being displayed correctly when it reached over 10k. So I fixed that. And while at it I also added support for hiding individual tracked keys. So now you can have keys counting towards your stats whilst they are not being displayed. :)

Edit 4
On request I added the option to remove added keys. Useful if you added a wrong key :) .
Mizyx
I think it would be great if you added opacity :D, cause some users could play better with it on :)

Edit:
Also resizable will be great too :oops:
iloveyou4ever
This is a very nice program :D
But can you add the function to show the 1 demical digits for the key per seconds?
I think it would be better :D
Thanks
Worst Mouse Aim
You can get that by external programs... I guess the reason is streaming?
Topic Starter
Roan

Mizyx wrote:

I think it would be great if you added opacity :D, cause some users could play better with it on :)
Sounds like a very nice feature :D . However it's not all that easy to implement :o . I put it on my todo list but I have no idea how long it will take me :/

iloveyou4ever wrote:

This is a very nice program :D
But can you add the function to show the 1 demical digits for the key per seconds?
I think it would be better :D
Thanks
Thanks and I'll implement that asap :)

Worst Mouse Aim wrote:

You can get that by external programs... I guess the reason is streaming?
Not exactly sure what you mean. But the reason I made this is because it's 'live'.

Edit
Added the option to display decimal avg & cur values. Also added a command key to show / hide the GUI (Ctrl + Y). :)
Still working on the other features. ;)

Edit 2

Mizyx wrote:

Edit:
Also resizable will be great too :oops:
:) yeah I think that would be great too. It's not really an easy thing to implement though xD. But I've put it on todo. I'll have most likely have both of your features finished by the end of the weekend :D.

Edit 3

Mizyx wrote:

I think it would be great if you added opacity :D, cause some users could play better with it on :)
Implemented! :) . In the colours menu you can now change the opacity of the foreground colour and the background colour ;) .

Edit 4
Implemented a little feature that allows the program to check for the latest version. So you no longer have to check this thread for updates :) (was there even someone who was doing that xD).

Edit 5

Mizyx wrote:

Edit:
Also resizable will be great too :oops:
Implemented :) , although I have to say that the program doesn't look as good in some sizes as it does in the default size. Especially upscaling makes some pixels more noticable :o . Might try to improve upon that in the future. :D
Zard0Z
This looks good. :3
Topic Starter
Roan

Zard0Z wrote:

This looks good. :3
Thanks :3
spukystar
nice
Topic Starter
Roan

spukystar wrote:

nice
Thanks ^^
AGRX
I'm getting input conflicts when using KeysPerSecond with beatoraja BMS player(Be-Music Script). Input is delayed or not registering my presses when using both programs at same time.

https://github.com/exch-bms2/beatoraja
Topic Starter
Roan

Agrrox wrote:

I'm getting input conflicts when using KeysPerSecond with beatoraja BMS player(Be-Music Script). Input is delayed or not registering my presses when using both programs at same time.

https://github.com/exch-bms2/beatoraja
That's indeed a little weird. I tried to reproduce the conflict however I can't read about 95% of beatoraja's interface xD. So I managed to run the program, but I am completely lost when it comes to importing songs.When using the search field in beatoraja my key presses are registering though.

The only guess I can make that might be the issue is that beatoraja or the native library used by KeysPerSecond is consuming the key presses instead of only registering them. But that could also be wrong :/

So I am looking into the issue although I might have to learn Japanese first XD.
Micha ohne el
Huh, I actually like this little program a lot, but it has some bugs and other weird stuff I want to point out!

Oh man, I hope I wasn't to nitpicky with you here :/
Again, I really like this program, at least the idea is fantastic, but these are the things I came across the first hour or so of testing.
I'm not expecting you to fix all of them, but at least read through these and consider it :^)


  • 1. (ironically) It doesn't launch when the path of the executable (or the jar) contains a "!"... which is bad... in a game, that's called "osu!"...
    I moved the file to "D:\system\osu!" and it didn't work, in "D:\system\" however, it did! So, that's a bug, i guess.

    2. The option "Overlay osu!" is (well irrelevant, who would not want it to overlay osu!? But also) not working when osu!'s in fullscreen.

    3. It drains the performance way too much for what it's doing. For me, at a refresh rate of 1000 ms, it has almost the same CPU load as osu! itself at an unlimited frame rate (usually around 700-1500 fps). Even on 125 ms I still experienced lag spikes in osu!. But at least there's a simple solution for that: Just don't ever fucking use Java for real-time processing. Use C#, C++, Python, even fucking AutoHotkey if you like, but not Java...

    4. I don't know what caused it and it doesn't happen anymore, but at first, while playing, the program was constantly lighting up in the taskbar as if it had a notification for me.
And here are a few feature requests I have:


  • 1. Making an installer, rather than a standalone file. It would be easier to manage the config file, since it could be loaded automatically.

    1.5 Also right now the Load Config and Save Config windows always default to the documents folder. With an installer you could have it remember where the last file was loaded from.

    2. Saving the position of the overlay in the config file. (And/Or making it easier to position, like by snapping to the edges of the screen)

    some minor things left:

    1. Maybe do the opacity in percent, would be easier for the users, I think.

    2. The adding of keys is weird. Dunno. It works perfectly fine, but it's weird >.< Maybe make a window pop up and have the user then press the key, not before pressing the button! o:

    3. The config files could just be ordinary .cfg-files. Right now, you can't even edit them by hand (what I really like to do).

    4. Make the overlay right-clickable (I'm kind of influenced by Rainmeter here, it does that really nicely). At least for maybe exiting, pausing the counter, etc. this function could be very useful.
Aaaaaand that's it!

Wow, what a long list D:

I know, some of these are not easy to fix, for example the performance thing, when you only know Java, or the "Overlay osu!" thing, because osu!'s a dick and it always wants to be on top of everything.
I hope, you at least understand what I mean with those things c:

Obviously, if you have questions, or you fixed something, let me know! I would love to see this program on my screen every day :P

I hope, I could help you with this feedback :3
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Huh, I actually like this little program a lot, but it has some bugs and other weird stuff I want to point out!

Oh man, I hope I wasn't to nitpicky with you here :/
Again, I really like this program, at least the idea is fantastic, but these are the things I came across the first hour or so of testing.
I'm not expecting you to fix all of them, but at least read through these and consider it :^)


  • 1. (ironically) It doesn't launch when the path of the executable (or the jar) contains a "!"... which is bad... in a game, that's called "osu!"...
    I moved the file to "D:\system\osu!" and it didn't work, in "D:\system\" however, it did! So, that's a bug, i guess.

    2. The option "Overlay osu!" is (well irrelevant, who would not want it to overlay osu!? But also) not working when osu!'s in fullscreen.

    3. It drains the performance way too much for what it's doing. For me, at a refresh rate of 1000 ms, it has almost the same CPU load as osu! itself at an unlimited frame rate (usually around 700-1500 fps). Even on 125 ms I still experienced lag spikes in osu!. But at least there's a simple solution for that: Just don't ever fucking use Java for real-time processing. Use C#, C++, Python, even fucking AutoHotkey if you like, but not Java...

    4. I don't know what caused it and it doesn't happen anymore, but at first, while playing, the program was constantly lighting up in the taskbar as if it had a notification for me.
And here are a few feature requests I have:


  • 1. Making an installer, rather than a standalone file. It would be easier to manage the config file, since it could be loaded automatically.

    1.5 Also right now the Load Config and Save Config windows always default to the documents folder. With an installer you could have it remember where the last file was loaded from.

    2. Saving the position of the overlay in the config file. (And/Or making it easier to position, like by snapping to the edges of the screen)

    some minor things left:

    1. Maybe do the opacity in percent, would be easier for the users, I think.

    2. The adding of keys is weird. Dunno. It works perfectly fine, but it's weird >.< Maybe make a window pop up and have the user then press the key, not before pressing the button! o:

    3. The config files could just be ordinary .cfg-files. Right now, you can't even edit them by hand (what I really like to do).

    4. Make the overlay right-clickable (I'm kind of influenced by Rainmeter here, it does that really nicely). At least for maybe exiting, pausing the counter, etc. this function could be very useful.
Aaaaaand that's it!

Wow, what a long list D:

I know, some of these are not easy to fix, for example the performance thing, when you only know Java, or the "Overlay osu!" thing, because osu!'s a dick and it always wants to be on top of everything.
I hope, you at least understand what I mean with those things c:

Obviously, if you have questions, or you fixed something, let me know! I would love to see this program on my screen every day :P

I hope, I could help you with this feedback :3
Euh I'm kinda short on time right now so I'm only going to answer some points right now :3
I'll update this post tomorrow when I have some more time :D

Bugs:

1. This is really interesting, lol.

2. I'm aware of this 'bug'. But it's not something I can fix. Well I tried but that didn't really work out. Since when I set my program to 'always on top' mode it's always competing with osu! for being to top most window. So in the end neither program was working like it should :cry: But when you run osu! with the fullscreen option off (resolution can be fullscreen though). osu! doesn't try to be the top window so then it works. That however also adds extra lag for some :/

3. Real time processing is done in C actually. And on my old laptop (Intel Centrino CPU) it only takes 0~2% CPU (Firefox takes 10~50%). What really takes most of the CPU is the graph. But even so on my laptop that also only takes 2~4% CPU (slowest update rate 1000ms). Also Java isn't slow anymore besides I like Java for being cross-platform. It is a little weird though that the program seems to take that much CPU power for you.

4. It should only do that if the window was made visible again. So either on starup or when pressing Ctrl + Y. I'll see if I can replicate it though.

Features:

1. I personally really dislike installers. Since I like being able to drag my programs from computer to computer. As for the config part that is also possible without the program being installed, so I might look into that. But I'll make it optional for sure, since I for example have multiple config files for different mania modes and standard mode. Another option would be to associate the extension with the program so that you can just open the config files automatically. But that would require that you don't move the program to a different location. Hmm, this one is a little difficult xD

1.5 Also posible without an installer :P

2. I could make it snap to the edges of a screen but that would be troublesome for user that have multiple monitors. I think I'll just add a 'snap' option in the command menu I'm going to add for feature #4.

1. I didn't do it in percentages O.O shame on me..... >.<

2. Yup I totally agree the addition of keys is weird :) so weird that I always mess up myself..... Adding another option dialog would be possible. But I thought that the GUI was already preatty dialog heavy. If that's not an issue then I'll just make another dialog for it.

3. Hmm.... technically they could be. But currently they are serialized objects. Which is really really really convenient for me since I can load them really easy xD. Making them text based would be possible, but it would also be a lot of work, I'll see though if I'm in the mood I might do it ;)

4a. I should be able to implement this quite easily as soon as I have some time.

4b. Todo: pause functionality xD since that currently doesn't exist.

Anyway thank you for the feedback :) much appeciated.
I am going to put everything on my todo list however I currently don't have much time so I don't know when I'll be able to work on this.

Progress
Item / Status / Published
1. / Investigating / -
2. / Impossible / n/a
3. / Major improvements made / Published
4. / Todo / -
1. / Need a concrete idea / -
1.5 / Todo / -
2. / Todo / -
1. / Implemented / Published
2. / Todo / -
3. / Todo / -
4. / Todo / -

Edit
Thanks to your performance concerns I was able to find a major issue xD. Turns out that there was still some very old code left that was ultra inefficient, so please blame me for this and not Java >.<. Problem was that it would become exponentially more inefficient on a faster computer, so that's why I didn't really notice it. So I've changed it and on my computer the program now uses about 20 times less CPU xD. Plus I also improved the accuracy of the counter. So thank you very much for pointing this out :) The new improved release is published now by the way (v4.0). Still working on the other points.
Micha ohne el
Man, I'm so glad I could help you! c:

1. This is really interesting, lol.
Right? o: I could only imagine some kind of error, wehre the exclamation mark is treated as part of the actual code. I'm not sure, but in Java that would be a Boolean negation, right?

2. I'm aware of this 'bug'. But it's not something I can fix. Well I tried but that didn't really work out. Since when I set my program to 'always on top' mode it's always competing with osu! for being to top most window. So in the end neither program was working like it should
Okay, I actually wanted to run it with admin and with system privileges and I found another (veeery strange) bug! When running this program with system rights (using PsTools) I can't load/save config files :D
I think, you can just ignore this bug, because who runs this with system rights? But I find it pretty interesting nonetheless :P
And no, running it as admin doesn't help keeping the overlay on top, nor does running as system :c

3. Real time processing is done in C actually. And on my old laptop (Intel Centrino CPU) it only takes 0~2% CPU (Firefox takes 10~50%). What really takes most of the CPU is the graph. But even so on my laptop that also only takes 2~4% CPU (slowest update rate 1000ms).
Thanks to your performance concerns I was able to find a major issue xD. Turns out that there was still some very old code left that was ultra inefficient, so please blame me for this and not Java >.<. Problem was that it would become exponentially more inefficient on a faster computer, so that's why I didn't really notice it. So I've changed it and on my computer the program now uses about 20 times less CPU xD.
Now that seems pretty good! I'm looking at 0.8% CPU Power at 200 ms, instead of >20% at 1000 ms refresh rate!
Wow, actually i still don't like Java all that much :P But it's not that slow anymore, I guess c: *Sorry for blaming you Java ;-;*

4. It should only do that if the window was made visible again. So either on startup or when pressing Ctrl + Y. I'll see if I can replicate it though.
For the record, it started doing that again! I noticed, it is actually stealing the window focus while it's doing that!
It only occurs when the Overlay osu! option is set.

Features:

1. I personally really dislike installers. Since I like being able to drag my programs from computer to computer. As for the config part that is also possible without the program being installed, so I might look into that. But I'll make it optional for sure, since I for example have multiple config files for different mania modes and standard mode. Another option would be to associate the extension with the program so that you can just open the config files automatically. But that would require that you don't move the program to a different location. Hmm, this one is a little difficult xD
Yeah, I forgot to write that, I meant an optional installer alongside the standalone!
I don't think making the config files launchable would be a good idea, they're usually stored in a location you don't normally go to when you want to run something.

1.5 Also possible without an installer :P
Alright ^^

2. I could make it snap to the edges of a screen but that would be troublesome for user that have multiple monitors. I think I'll just add a 'snap' option in the command menu I'm going to add for feature #4.
Same here, alright ^^

1. I didn't do it in percentages O.O shame on me..... >.<
haha, yea. That was SUCH a big issue! Not doing that in percentages! Pftt. :D

2. Yup I totally agree the addition of keys is weird :) so weird that I always mess up myself..... Adding another option dialog would be possible. But I thought that the GUI was already pretty dialog heavy. If that's not an issue then I'll just make another dialog for it.
For me, that's totally not an issue at the moment. The program is not very dialog heavy in my opinion, since you only have one extra window open at the time (two if you count the main window). So I think, you'd be way better off with another dialog box c:
Also, the window with the key list wouldn't have to close every time you add another key!

3. Hmm.... technically they could be. But currently they are serialized objects. Which is really really really convenient for me since I can load them really easy xD. Making them text based would be possible, but it would also be a lot of work, I'll see though if I'm in the mood I might do it ;)
Well, that's sort of just me that I want to edit them by hand, but if it is that much more convenient with serialized objects, leave it like that!

4a. I should be able to implement this quite easily as soon as I have some time.

4b. Todo: pause functionality xD since that currently doesn't exist.
Great c:



No hurries with these, you already changed so much so quick! I appreciate it very much :>

Again, I'm very happy that I could help you with this :3
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Man, I'm so glad I could help you! c:

1. This is really interesting, lol.
Right? o: I could only imagine some kind of error, wehre the exclamation mark is treated as part of the actual code. I'm not sure, but in Java that would be a Boolean negation, right?
I've been investigating this but it's not caused by something in code I wrote :/. So I'll have to see if I can find the actual bug. If I can't fix the bug I'll just copy the program to the temp directory and execute it from there xD. Not all that convenient but it would work. From what I've been able to find out an ! in a file path is sometimes used to specify a zip archive so that's probably what's causing the issue. And you right on what the ! is in Java, it's indeed boolean negation ^^.

SALZKARTOFFEEEL wrote:

2. I'm aware of this 'bug'. But it's not something I can fix. Well I tried but that didn't really work out. Since when I set my program to 'always on top' mode it's always competing with osu! for being to top most window. So in the end neither program was working like it should
Okay, I actually wanted to run it with admin and with system privileges and I found another (veeery strange) bug! When running this program with system rights (using PsTools) I can't load/save config files :D
I think, you can just ignore this bug, because who runs this with system rights? But I find it pretty interesting nonetheless :P
And no, running it as admin doesn't help keeping the overlay on top, nor does running as system :c
xD yet another interesting bug. I'm guessing that when running as system you can't open the file since it is owned by the user and not by system. Not sure though, but yeah I'm not going to fix it :P.

SALZKARTOFFEEEL wrote:

3. Real time processing is done in C actually. And on my old laptop (Intel Centrino CPU) it only takes 0~2% CPU (Firefox takes 10~50%). What really takes most of the CPU is the graph. But even so on my laptop that also only takes 2~4% CPU (slowest update rate 1000ms).
Thanks to your performance concerns I was able to find a major issue xD. Turns out that there was still some very old code left that was ultra inefficient, so please blame me for this and not Java >.<. Problem was that it would become exponentially more inefficient on a faster computer, so that's why I didn't really notice it. So I've changed it and on my computer the program now uses about 20 times less CPU xD.
Now that seems pretty good! I'm looking at 0.8% CPU Power at 200 ms, instead of >20% at 1000 ms refresh rate!
Wow, actually i still don't like Java all that much :P But it's not that slow anymore, I guess c: *Sorry for blaming you Java ;-;*
xD that's quite the improvement! And yeah Java has it's pros and cons, but the same goes for every other language, so for now I'm sticking with Java xD.

SALZKARTOFFEEEL wrote:

4. It should only do that if the window was made visible again. So either on startup or when pressing Ctrl + Y. I'll see if I can replicate it though.
For the record, it started doing that again! I noticed, it is actually stealing the window focus while it's doing that!
It only occurs when the Overlay osu! option is set.
Actually now that you mention it, that is intended behavior xD. Well actually it's a side effect. When you have to overlay osu! option enabled the program will make every attempt to stay the top window. Part of this functionality is to immediatly jump on top of other windows when they try to jump on top of the window. And, well, apparently that causes the icon to flash :/. It's not really I can remove though since if it doesn't have this functionality it is not guaranteed that I'll stay on top. When it's flashing it's basically telling you that it won the competion for top window from another program :D. So I'm not sure if there is a way to disable it, but I'm going to look into it.

SALZKARTOFFEEEL wrote:

Features:

1. I personally really dislike installers. Since I like being able to drag my programs from computer to computer. As for the config part that is also possible without the program being installed, so I might look into that. But I'll make it optional for sure, since I for example have multiple config files for different mania modes and standard mode. Another option would be to associate the extension with the program so that you can just open the config files automatically. But that would require that you don't move the program to a different location. Hmm, this one is a little difficult xD
Yeah, I forgot to write that, I meant an optional installer alongside the standalone!
I don't think making the config files launchable would be a good idea, they're usually stored in a location you don't normally go to when you want to run something.
Well, true, I'll give it some more though and hopefully come up with a good system.

SALZKARTOFFEEEL wrote:

1.5 Also possible without an installer :P
Alright ^^

2. I could make it snap to the edges of a screen but that would be troublesome for user that have multiple monitors. I think I'll just add a 'snap' option in the command menu I'm going to add for feature #4.
Same here, alright ^^

1. I didn't do it in percentages O.O shame on me..... >.<
haha, yea. That was SUCH a big issue! Not doing that in percentages! Pftt. :D
Yeah such a terrible mistake >.<

SALZKARTOFFEEEL wrote:

2. Yup I totally agree the addition of keys is weird :) so weird that I always mess up myself..... Adding another option dialog would be possible. But I thought that the GUI was already pretty dialog heavy. If that's not an issue then I'll just make another dialog for it.
For me, that's totally not an issue at the moment. The program is not very dialog heavy in my opinion, since you only have one extra window open at the time (two if you count the main window). So I think, you'd be way better off with another dialog box c:
Also, the window with the key list wouldn't have to close every time you add another key!
I just implemented this xD.

SALZKARTOFFEEEL wrote:

3. Hmm.... technically they could be. But currently they are serialized objects. Which is really really really convenient for me since I can load them really easy xD. Making them text based would be possible, but it would also be a lot of work, I'll see though if I'm in the mood I might do it ;)
Well, that's sort of just me that I want to edit them by hand, but if it is that much more convenient with serialized objects, leave it like that!
I won't say that it won't happen but it's at the bottom of my todo list :P.

SALZKARTOFFEEEL wrote:

4a. I should be able to implement this quite easily as soon as I have some time.

4b. Todo: pause functionality xD since that currently doesn't exist.
Great c:
This currently has the highest priority on my todo list :3.

SALZKARTOFFEEEL wrote:

No hurries with these, you already changed so much so quick! I appreciate it very much :>

Again, I'm very happy that I could help you with this :3
And again thank you for helping ^^
Micha ohne el

Roan wrote:

If I can't fix the bug I'll just copy the program to the temp directory and execute it from there xD. Not all that convenient but it would work. From what I've been able to find out an ! in a file path is sometimes used to specify a zip archive so that's probably what's causing the issue. And you right on what the ! is in Java, it's indeed boolean negation ^^.
huh, I've never heard of an exclamation mark specifying an archive before. Well, I guess it's not that big of a problem if it works from the temp directory :D
Oh, yay (ノ・ω・)ノ I got it right! Boolean negation! c:

Roan wrote:

xD yet another interesting bug. I'm guessing that when running as system you can't open the file since it is owned by the user and not by system. Not sure though, but yeah I'm not going to fix it :P.
Actually, I think I've sort of messed up the explanation there xD What actually happens is that the explorer window doesn't even open at all! :P
But yeah, it's really not something to worry about c:

Roan wrote:

xD that's quite the improvement! And yeah Java has it's pros and cons, but the same goes for every other language, so for now I'm sticking with Java xD.
I still like Python better! ^~^

Roan wrote:

Actually now that you mention it, that is intended behavior xD. Well actually it's a side effect. When you have to overlay osu! option enabled the program will make every attempt to stay the top window. Part of this functionality is to immediatly jump on top of other windows when they try to jump on top of the window. And, well, apparently that causes the icon to flash :/. It's not really I can remove though since if it doesn't have this functionality it is not guaranteed that I'll stay on top. When it's flashing it's basically telling you that it won the competion for top window from another program :D. So I'm not sure if there is a way to disable it, but I'm going to look into it.
Well, I actually thought about that. Maybe there's another method in Java for this that doesn't make it flash :v
Isn't really a problem at all, but I personally have found it a bit distracting.


Features:

Roan wrote:

Well, true, I'll give it some more though and hopefully come up with a good system.
I'd like it if you would :3 Rechecking all these checkboxes / reloading the config file over and over again is kind of annoying. Right now I can totally forgive you for that, but when an installed program does that, man... It's like when you scroll down, click on something, go back and you're on top of the list again ._.
I only just read at your todo list that you're working on passing the config file via the command line, which is a fantastic idea! :3

Roan wrote:

I just implemented this xD.
ヽ(。・ω・。)ノ

Roan wrote:

I won't say that it won't happen but it's at the bottom of my todo list :P.
Alright :^)


One more thing:
This is probably supposed to happen, but the config window doesn't appear in the taskbar. If it is just an option you can simply set to true or something, in my opinion, you should :P But if it is because of maybe the type of window (like a special type for dialogs, overlays, etc.) and it is a lot of effort to edit, just leave it like it is c:
I just wanted to point it out anyway ^^


Roan wrote:

And again thank you for helping ^^
Thanks for being patient, I've totally forgotten to reply to you D:
And thanks for letting me help, I really enjoy it! <3
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

If I can't fix the bug I'll just copy the program to the temp directory and execute it from there xD. Not all that convenient but it would work. From what I've been able to find out an ! in a file path is sometimes used to specify a zip archive so that's probably what's causing the issue. And you right on what the ! is in Java, it's indeed boolean negation ^^.
huh, I've never heard of an exclamation mark specifying an archive before. Well, I guess it's not that big of a problem if it works from the temp directory :D
Oh, yay (ノ・ω・)ノ I got it right! Boolean negation! c:

Roan wrote:

xD yet another interesting bug. I'm guessing that when running as system you can't open the file since it is owned by the user and not by system. Not sure though, but yeah I'm not going to fix it :P.
Actually, I think I've sort of messed up the explanation there xD What actually happens is that the explorer window doesn't even open at all! :P
But yeah, it's really not something to worry about c:

Roan wrote:

xD that's quite the improvement! And yeah Java has it's pros and cons, but the same goes for every other language, so for now I'm sticking with Java xD.
I still like Python better! ^~^
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

Actually now that you mention it, that is intended behavior xD. Well actually it's a side effect. When you have to overlay osu! option enabled the program will make every attempt to stay the top window. Part of this functionality is to immediatly jump on top of other windows when they try to jump on top of the window. And, well, apparently that causes the icon to flash :/. It's not really I can remove though since if it doesn't have this functionality it is not guaranteed that I'll stay on top. When it's flashing it's basically telling you that it won the competion for top window from another program :D. So I'm not sure if there is a way to disable it, but I'm going to look into it.
Well, I actually thought about that. Maybe there's another method in Java for this that doesn't make it flash :v
Isn't really a problem at all, but I personally have found it a bit distracting.
Euh I guess I've fixed it ¯\_(ツ)_/¯

SALZKARTOFFEEEL wrote:

Features:

Roan wrote:

Well, true, I'll give it some more though and hopefully come up with a good system.
I'd like it if you would :3 Rechecking all these checkboxes / reloading the config file over and over again is kind of annoying. Right now I can totally forgive you for that, but when an installed program does that, man... It's like when you scroll down, click on something, go back and you're on top of the list again ._.
I only just read at your todo list that you're working on passing the config file via the command line, which is a fantastic idea! :3
Implemented the passing of config files via the command line, since that was easy to implement anyway xD. Still thinking of more improvements here. Also I noticed that the overlay osu! option wasn't being saved to the config xD so I've fixed that too.

SALZKARTOFFEEEL wrote:

Roan wrote:

I just implemented this xD.
ヽ(。・ω・。)ノ

Roan wrote:

I won't say that it won't happen but it's at the bottom of my todo list :P.
Alright :^)


One more thing:
This is probably supposed to happen, but the config window doesn't appear in the taskbar. If it is just an option you can simply set to true or something, in my opinion, you should :P But if it is because of maybe the type of window (like a special type for dialogs, overlays, etc.) and it is a lot of effort to edit, just leave it like it is c:
I just wanted to point it out anyway ^^
Yeah that isn't happening since they are indeed actually dialogs ;) . And as far as I know there is no (easy) was to give dialogs an icon. If it's a real problem I could just give them frames but that introduces other problems :o .

SALZKARTOFFEEEL wrote:

Roan wrote:

And again thank you for helping ^^
Thanks for being patient, I've totally forgotten to reply to you D:
And thanks for letting me help, I really enjoy it! <3
^^
Nearing the end of your list :P.
And your help is much appreciated since you see the bugs I don't see because you try things I'd never think off xD. I never would've thought that putting it in the osu! folder would make it stop working ;) .
Micha ohne el

Roan wrote:

Euh I guess I've fixed it ¯\_(ツ)_/¯
So you did use a different technique then? c:



Roan wrote:

Implemented the passing of config files via the command line, since that was easy to implement anyway xD. Still thinking of more improvements here. Also I noticed that the overlay osu! option wasn't being saved to the config xD so I've fixed that too.
I'm guessing simply: <exe-path> "<config-file>" o:



Roan wrote:

Yeah that isn't happening since they are indeed actually dialogs ;) . And as far as I know there is no (easy) was to give dialogs an icon. If it's a real problem I could just give them frames but that introduces other problems :o .
Yeah, got another one right! c: Well, as I said, it's not a real problem. The program is still in the Alt+Tab-Menu, which is probably more important! It's completely fine this way :3



Roan wrote:

And your help is much appreciated since you see the bugs I don't see because you try things I'd never think off xD.
That's sort of a skill I have, I do the weirdest stuff until everything breaks :D

Roan wrote:

I never would've thought that putting it in the osu! folder would make it stop working ;) .
Me neither xD
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Euh I guess I've fixed it ¯\_(ツ)_/¯
So you did use a different technique then? c:
I'm still using the same technique but I have removed all focus calls. As far as I can tell it still works though. They were kinda left over from when I was trying to render it on top of fullscreen osu! But since that doesn't work anyway I removed them, I hope I didn't break anything xD.

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented the passing of config files via the command line, since that was easy to implement anyway xD. Still thinking of more improvements here. Also I noticed that the overlay osu! option wasn't being saved to the config xD so I've fixed that too.
I'm guessing simply: <exe-path> "<config-file>" o:
Yup the program takes a single argument which is the config file path (also don't use quotes around the path, spaces in the path are handled). If the config is in the same directory as the executable you only have to specify the filename ;) . Oh and also don't accidentally forget the file extension :D

SALZKARTOFFEEEL wrote:

Roan wrote:

Yeah that isn't happening since they are indeed actually dialogs ;) . And as far as I know there is no (easy) was to give dialogs an icon. If it's a real problem I could just give them frames but that introduces other problems :o .
Yeah, got another one right! c: Well, as I said, it's not a real problem. The program is still in the Alt+Tab-Menu, which is probably more important! It's completely fine this way :3
Okay ^^

SALZKARTOFFEEEL wrote:

Roan wrote:

And your help is much appreciated since you see the bugs I don't see because you try things I'd never think off xD.
That's sort of a skill I have, I do the weirdest stuff until everything breaks :D
xD sounds usefull :P

SALZKARTOFFEEEL wrote:

Roan wrote:

I never would've thought that putting it in the osu! folder would make it stop working ;) .
Me neither xD
Micha ohne el

Roan wrote:

I'm still using the same technique but I have removed all focus calls. As far as I can tell it still works though. They were kinda left over from when I was trying to render it on top of fullscreen osu! But since that doesn't work anyway I removed them, I hope I didn't break anything xD.
Yeah, i was kind of wondering why you would even need to get the window focus, but I knew about this windows 'bug' that sometimes keeps the inactive window above the active one when the focus changes at some weird point in time, I thought you were trying to use that.

Roan wrote:

Yup the program takes a single argument which is the config file path (also don't use quotes around the path, spaces in the path are handled). If the config is in the same directory as the executable you only have to specify the filename ;) . Oh and also don't accidentally forget the file extension :D
Huh, it handles spaces! :D I've never seen something like this in command line arguments c: Also great, that the config window doesn't appear in the first place.



Okay. After tinkering around with my good old friend AutoHotkey, I've sort of found a workaround for the "overlay osu!" Setting.
I have an AutoHotkey script that lets me have a window in AlwaysOnTop-Mode. I just found out that when I want to have your overlay on top of osu!, I can simply deactivate the AlwaysOnTop property of the osu! window! This keeps the focus on osu! but brings the overlay in front!
But there's a catch, be aware D:
Because osu!'s a dick, every time the focus changes (i.e. I press Alt+Tab), osu! pushes itself back on top of the other windows and the overlay.

Soo, if this helps you, I'm glad, if not, well... I'm gonna keep trying!
Right now the only thing I could probably do would be to (veery inelegantly) write another AHk script that steels the property from the osu! window every time it gets activated and the overlay is present. But that wouldn't be a real solution, would it? D:


EDIT:
This script I wrote fixes the issue. It is a bit wonky, but it works without any input delay or lag (at least for me) and I just wanted to share it c:
It is just 9 simple AHk lines, 3 of which are a Loop, 2 are some setup stuff and only 4 lines are the actual logic.
As I pretty much described earlier, it just tests for the osu! window to be in foreground, tests for the overlay to exist and then just steels the AlwaysOnTop property from the osu! window.

Source Code (not that there are any people who know AutoHotkey ^~^)
;-- setup stuff --;
#SingleInstance, force
#Persistent

Loop {

;-- logic --;
WinWaitActive, osu!
WinWait, ahk_class SunAwtFrame
WinWait, Keys per second
WinSet, AlwaysOnTop, OFF, osu!

}
Return ;-- Return, just in case an error happens and the loop breaks

Yet another EDIT:
osu! seems to have problems with not running on the topmost layer, I am rarely getting stutters here and there, even though the overall performance is not effected o:
I think this is pretty much like disabling fullscreen mode, but with less (pretty much no) input lag. I don't know what I think about this.
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm still using the same technique but I have removed all focus calls. As far as I can tell it still works though. They were kinda left over from when I was trying to render it on top of fullscreen osu! But since that doesn't work anyway I removed them, I hope I didn't break anything xD.
Yeah, i was kind of wondering why you would even need to get the window focus, but I knew about this windows 'bug' that sometimes keeps the inactive window above the active one when the focus changes at some weird point in time, I thought you were trying to use that.
Well I didnt actually need the focus. However the method to place a window on top of all other windows automatically makes a focus all :/ I was trying to call this method everytime the window was no longer the top most window. However what happened was that osu! and KeysPerSecond started a contest and kept overlaying each other xD or osu! minimized.

SALZKARTOFFEEEL wrote:

Roan wrote:

Yup the program takes a single argument which is the config file path (also don't use quotes around the path, spaces in the path are handled). If the config is in the same directory as the executable you only have to specify the filename ;) . Oh and also don't accidentally forget the file extension :D
Huh, it handles spaces! :D I've never seen something like this in command line arguments c: Also great, that the config window doesn't appear in the first place.
Yeah I though that was usefull so I made it parse spaces :D.

SALZKARTOFFEEEL wrote:

Okay. After tinkering around with my good old friend AutoHotkey, I've sort of found a workaround for the "overlay osu!" Setting.
I have an AutoHotkey script that lets me have a window in AlwaysOnTop-Mode. I just found out that when I want to have your overlay on top of osu!, I can simply deactivate the AlwaysOnTop property of the osu! window! This keeps the focus on osu! but brings the overlay in front!
But there's a catch, be aware D:
Because osu!'s a dick, every time the focus changes (i.e. I press Alt+Tab), osu! pushes itself back on top of the other windows and the overlay.

Soo, if this helps you, I'm glad, if not, well... I'm gonna keep trying!
Right now the only thing I could probably do would be to (veery inelegantly) write another AHk script that steels the property from the osu! window every time it gets activated and the overlay is present. But that wouldn't be a real solution, would it? D:


EDIT:
This script I wrote fixes the issue. It is a bit wonky, but it works without any input delay or lag (at least for me) and I just wanted to share it c:
It is just 9 simple AHk lines, 3 of which are a Loop, 2 are some setup stuff and only 4 lines are the actual logic.
As I pretty much described earlier, it just tests for the osu! window to be in foreground, tests for the overlay to exist and then just steels the AlwaysOnTop property from the osu! window.

Source Code (not that there are any people who know AutoHotkey ^~^)
;-- setup stuff --;
#SingleInstance, force
#Persistent

Loop {

;-- logic --;
WinWaitActive, osu!
WinWait, ahk_class SunAwtFrame
WinWait, Keys per second
WinSet, AlwaysOnTop, OFF, osu!

}
Return ;-- Return, just in case an error happens and the loop breaks

Yet another EDIT:
osu! seems to have problems with not running on the topmost layer, I am rarely getting stutters here and there, even though the overall performance is not effected o:
I think this is pretty much like disabling fullscreen mode, but with less (pretty much no) input lag. I don't know what I think about this.
I-I-I'm filing a bug report :D, your script doesnt work for me :( . I did know about AutoHotkey though ^^.
However it did give me an idea. I suppose it would be possible to override the alwaysOnTop property using either C or C++. If thats the case then I can just include the functionality in my program since Java can make native calls :). So I'm going to look into that.
Also did I mention you're awesome? If not: you're awesome!
Micha ohne el

Roan wrote:

Well I didnt actually need the focus. However the method to place a window on top of all other windows automatically makes a focus all :/ I was trying to call this method everytime the window was no longer the top most window. However what happened was that osu! and KeysPerSecond started a contest and kept overlaying each other xD or osu! minimized.
Great, an endless loop of windows fighting for attention! :D

Roan wrote:

Yeah I though that was usefull so I made it parse spaces :D.
It is pretty useful, actually! o: It's kind of weird, since I've never seen it, but I like it :D

Roan wrote:

I-I-I'm filing a bug report :D, your script doesnt work for me :( . I did know about AutoHotkey though ^^.
However it did give me an idea. I suppose it would be possible to override the alwaysOnTop property using either C or C++. If thats the case then I can just include the functionality in my program since Java can make native calls :). So I'm going to look into that.
Yeah, file one if you want to :D But I don't think this is a real solution, as i said, unless you can implement it c:

Roan wrote:

Also did I mention you're awesome? If not: you're awesome!
Thank you so much :D I think you're awesome! (I mean, you knew about freaking AutoHotkey, that's a win already :3)
You put so much effort into fixing every single detail I complain about :P Thank you very much for that (っ◕‿◕)っ
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I didnt actually need the focus. However the method to place a window on top of all other windows automatically makes a focus all :/ I was trying to call this method everytime the window was no longer the top most window. However what happened was that osu! and KeysPerSecond started a contest and kept overlaying each other xD or osu! minimized.
Great, an endless loop of windows fighting for attention! :D

Roan wrote:

Yeah I though that was usefull so I made it parse spaces :D.
It is pretty useful, actually! o: It's kind of weird, since I've never seen it, but I like it :D

Roan wrote:

I-I-I'm filing a bug report :D, your script doesnt work for me :( . I did know about AutoHotkey though ^^.
However it did give me an idea. I suppose it would be possible to override the alwaysOnTop property using either C or C++. If thats the case then I can just include the functionality in my program since Java can make native calls :). So I'm going to look into that.
Yeah, file one if you want to :D But I don't think this is a real solution, as i said, unless you can implement it c:
So this was an interessting one. I think I just created an osu! stroboscope, the result of trying to implement this was basically osu! and KeysPerSecond alternating being the top most window every 1/60th of a second xD. So I this might be impossible without changing setting for osu! :(. That being said there's probably some clever hack for this somewhere that I'm just not aware of. But untill I find it I guess I can't fix it :(

SALZKARTOFFEEEL wrote:

Roan wrote:

Also did I mention you're awesome? If not: you're awesome!
Thank you so much :D I think you're awesome! (I mean, you knew about freaking AutoHotkey, that's a win already :3)
You put so much effort into fixing every single detail I complain about :P Thank you very much for that (っ◕‿◕)っ
^^
I just really enjoy fixing complaints :3

Edit
Finally got around to implementing the right click menu :)
While at it I also implemented the functionality to pause the counter, accesible via the new menu or by using Ctrl + T ;) .
And since everything was going well anyway I also implemented the snap to screen edge funtionality :D (works with multi-monitor setups).
Only 3 more points from you list to go xD, but they are mostly bug fixes.
So now let's hear all the new bugs I've introduced... :P
Micha ohne el

Roan wrote:

So this was an interessting one. I think I just created an osu! stroboscope, the result of trying to implement this was basically osu! and KeysPerSecond alternating being the top most window every 1/60th of a second xD. So I this might be impossible without changing setting for osu! :(. That being said there's probably some clever hack for this somewhere that I'm just not aware of. But untill I find it I guess I can't fix it :(
huh, It seems as if the method you are using to set the window AlwaysOnTop also makes it the topmost window! That would cause such a 'stroboscope' effect as you call it :^)

Roan wrote:

^^
I just really enjoy fixing complaints :3
I totally understand that :P


Roan wrote:

Finally got around to implementing the right click menu :)
While at it I also implemented the functionality to pause the counter, accesible via the new menu or by using Ctrl + T ;) .
And since everything was going well anyway I also implemented the snap to screen edge funtionality :D (works with multi-monitor setups).
Only 3 more points from you list to go xD, but they are mostly bug fixes.
So now let's hear all the new bugs I've introduced... :P
Not many bugs so far :P Just a few things that are (technically not bugs and) probably easy to fix/change!
First of all: This snap-functionality works sooo much better that I expected! I haven't even thought about putting that into the context menu c:
I thought you would implement it just like all other programs, making the window snap automatically. But this is so much better, since you don't have the trouble when you want to put the window say 3 pixels away from the screen border!

Okay, now onto the bad things :P

1) right clicking on the graph doesn't trigger the context menu. Yeah, that's it. The graph's potion of the overlay just doesn't count when right-clicked.

2) (this is a minor one) resetting the stats doesn't reset the graph o: It does reset the average line, but not the rest of the graph, maybe add that in c:

3) This one was probably there before, but the logic behind the counting seems to be pretty inconsistent o:
As seen below, the three overlays drift quite a bit from each other, in all the different values!
This is a live recording of me tapping X&Y (X&Z for normal people outside of Germany) but the counters seem to... disagree with each other :D
Right now I don't have enough time, but tomorrow (on Friday, that is) I could analyze the video just to see, what went wrong! o: I guess it's not a big deal, but I find it a bit odd that the counters drift like that.

That's it for now! :D
Again, I don't have the time that I want to have right now, but maybe I'll find more errors and weird stuff in the future :P
(I think opening multiple counters could be a potential weak spot ;3)
゚・✿ヾ╲(。◕‿◕。)╱✿・゚ I figured, I want to put at least one non-ASCII-Smiley per forum post :P
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

So this was an interessting one. I think I just created an osu! stroboscope, the result of trying to implement this was basically osu! and KeysPerSecond alternating being the top most window every 1/60th of a second xD. So I this might be impossible without changing setting for osu! :(. That being said there's probably some clever hack for this somewhere that I'm just not aware of. But untill I find it I guess I can't fix it :(
huh, It seems as if the method you are using to set the window AlwaysOnTop also makes it the topmost window! That would cause such a 'stroboscope' effect as you call it :^)
Yeah probably, I have't given up on this yet but for now I'm going to focus on other issues :^).

SALZKARTOFFEEEL wrote:

Roan wrote:

^^
I just really enjoy fixing complaints :3
I totally understand that :P
:P

SALZKARTOFFEEEL wrote:

Roan wrote:

Finally got around to implementing the right click menu :)
While at it I also implemented the functionality to pause the counter, accesible via the new menu or by using Ctrl + T ;) .
And since everything was going well anyway I also implemented the snap to screen edge funtionality :D (works with multi-monitor setups).
Only 3 more points from you list to go xD, but they are mostly bug fixes.
So now let's hear all the new bugs I've introduced... :P
Not many bugs so far :P Just a few things that are (technically not bugs and) probably easy to fix/change!
First of all: This snap-functionality works sooo much better that I expected! I haven't even thought about putting that into the context menu c:
I thought you would implement it just like all other programs, making the window snap automatically. But this is so much better, since you don't have the trouble when you want to put the window say 3 pixels away from the screen border!
Glad you like it! For the next version I'm also going to add the option to move the overlay using the arrow keys, so you can position it pixel perfect xD. (Only active when the overlay has focus) :)

SALZKARTOFFEEEL wrote:

Okay, now onto the bad things :P
:O

SALZKARTOFFEEEL wrote:

1) right clicking on the graph doesn't trigger the context menu. Yeah, that's it. The graph's potion of the overlay just doesn't count when right-clicked.
I actually knew about this one xD But I though I could just release it and quickly patch it some other time without you noticing, looks like I failed xD

SALZKARTOFFEEEL wrote:

2) (this is a minor one) resetting the stats doesn't reset the graph o: It does reset the average line, but not the rest of the graph, maybe add that in c:
o:

SALZKARTOFFEEEL wrote:

3) This one was probably there before, but the logic behind the counting seems to be pretty inconsistent o:
As seen below, the three overlays drift quite a bit from each other, in all the different values!
This is a live recording of me tapping X&Y (X&Z for normal people outside of Germany) but the counters seem to... disagree with each other :D
Right now I don't have enough time, but tomorrow (on Friday, that is) I could analyze the video just to see, what went wrong! o: I guess it's not a big deal, but I find it a bit odd that the counters drift like that.
I can't reproduce it >.<
From your video it seems that the instances were not all started at the exact same millisecond time (the graph isnt shifting at the same time in all of them). And all the stats refer to the last second so if they are not started at the exact same time that could be the cause of the drift.
I'm actually more worried about that fact that not all your instances are reporting the same hit count for the keys O.O does that happen all the time? Since I can't replicate that no matter what I try. The differences in max, avg & cur I can replicate when starting the instances at different times. It's also probably impossible for me to actually fix that since the only way to reliably fix that is shorten the time interval to 1 millisecond (which would be imprecise anyway due to the way windows timers work) also that places a massive load on the CPU :(

SALZKARTOFFEEEL wrote:

That's it for now! :D
Again, I don't have the time that I want to have right now, but maybe I'll find more errors and weird stuff in the future :P
(I think opening multiple counters could be a potential weak spot ;3)
Plenty of work for me to do :3

SALZKARTOFFEEEL wrote:

゚・✿ヾ╲(。◕‿◕。)╱✿・゚ I figured, I want to put at least one non-ASCII-Smiley per forum post :P
I'm not good with non-ASCII-smiley's >.< but here we go ʘ‿ʘ
Also added you as a friend :3
Micha ohne el

Roan wrote:

Glad you like it! For the next version I'm also going to add the option to move the overlay using the arrow keys, so you can position it pixel perfect xD. (Only active when the overlay has focus) :)
Okay, I find myself simply never using such tings, since I'm usually more comfortable with using my mouse for it. But it can be nice to have! And it's not half as frustrating as using the mouse sometimes c:

Roan wrote:

I actually knew about this one xD But I though I could just release it and quickly patch it some other time without you noticing, looks like I failed xD
Sneaky, sneaky, sneaky... xD

Roan wrote:

o:
o:?


Roan wrote:

From your video it seems that the instances were not all started at the exact same millisecond time (the graph isnt shifting at the same time in all of them). And all the stats refer to the last second so if they are not started at the exact same time that could be the cause of the drift.
Yeah, they weren't. I thought about that while trying to sleep and I wanted to try it out today. Looks like you were faster here c:

Roan wrote:

I'm actually more worried about that fact that not all your instances are reporting the same hit count for the keys O.O does that happen all the time? Since I can't replicate that no matter what I try.
uhm... (that's where the madness starts)... Me neither ._.
I have no idea what I did the first time, but I can't reproduce either, so it was.. uhm... something really weird... ¯\_(ツ)_/¯ Let's just ignore this unless it occurs again o:
(I'm trying my best not to blame that on Java for once :P)

Roan wrote:

The differences in max, avg & cur I can replicate when starting the instances at different times. It's also probably impossible for me to actually fix that since the only way to reliably fix that is shorten the time interval to 1 millisecond (which would be imprecise anyway due to the way windows timers work) also that places a massive load on the CPU :(
Yeah, well. It's not the biggest issue I guess, because what crazy person totally not me.. would want multiple counters at once? xD

Roan wrote:

Plenty of work for me to do :3
Well, I heard, you liked fixing complaints? So guess what? I've got even some more work for you (✿◠‿◠)

I hope, this is a simple one and just a little bug in the code:
(Just for the record, I can actually reproduce this one – I'm using this config file!)
Whenever Custom Colors are on, the background color opacity is set to 100% and the text color opacity is NOT set to 100%, this happens:

The top part just goes gray-ish for some reason. Again, this happens every time and I believe it's just some simple error – like switching up "<" and "<=" or something like that.



Roan wrote:

I'm not good with non-ASCII-smiley's >.< but here we go ʘ‿ʘ
haha, well.. I've written myself a little AutoHotkey script that let's me just write those out! ^~^
It also lets me use stuff like ≠, ≈, ≥, ≤, ©, etc. very easily. I don't know if I should improve on it a bit and make it public o:

Roan wrote:

Also added you as a friend :3
yay! ヽ(。・ω・。)ノ
Topic Starter
Roan
Updates :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Glad you like it! For the next version I'm also going to add the option to move the overlay using the arrow keys, so you can position it pixel perfect xD. (Only active when the overlay has focus) :)
Okay, I find myself simply never using such tings, since I'm usually more comfortable with using my mouse for it. But it can be nice to have! And it's not half as frustrating as using the mouse sometimes c:
Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).

SALZKARTOFFEEEL wrote:

Roan wrote:

I actually knew about this one xD But I though I could just release it and quickly patch it some other time without you noticing, looks like I failed xD
Sneaky, sneaky, sneaky... xD
This is now not so sneakily fixed :)

SALZKARTOFFEEEL wrote:

o:?
o: fixed :D

SALZKARTOFFEEEL wrote:

Roan wrote:

From your video it seems that the instances were not all started at the exact same millisecond time (the graph isnt shifting at the same time in all of them). And all the stats refer to the last second so if they are not started at the exact same time that could be the cause of the drift.
Yeah, they weren't. I thought about that while trying to sleep and I wanted to try it out today. Looks like you were faster here c:
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm actually more worried about that fact that not all your instances are reporting the same hit count for the keys O.O does that happen all the time? Since I can't replicate that no matter what I try.
uhm... (that's where the madness starts)... Me neither ._.
I have no idea what I did the first time, but I can't reproduce either, so it was.. uhm... something really weird... ¯\_(ツ)_/¯ Let's just ignore this unless it occurs again o:
(I'm trying my best not to blame that on Java for once :P)
xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯

SALZKARTOFFEEEL wrote:

Roan wrote:

The differences in max, avg & cur I can replicate when starting the instances at different times. It's also probably impossible for me to actually fix that since the only way to reliably fix that is shorten the time interval to 1 millisecond (which would be imprecise anyway due to the way windows timers work) also that places a massive load on the CPU :(
Yeah, well. It's not the biggest issue I guess, because what crazy person totally not me.. would want multiple counters at once? xD
Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3

SALZKARTOFFEEEL wrote:

Roan wrote:

Plenty of work for me to do :3
Well, I heard, you liked fixing complaints? So guess what? I've got even some more work for you (✿◠‿◠)
\o/ yay! xD

SALZKARTOFFEEEL wrote:

I hope, this is a simple one and just a little bug in the code:
(Just for the record, I can actually reproduce this one – I'm using this config file!)
Whenever Custom Colors are on, the background color opacity is set to 100% and the text color opacity is NOT set to 100%, this happens:

The top part just goes gray-ish for some reason. Again, this happens every time and I believe it's just some simple error – like switching up "<" and "<=" or something like that.
o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm not good with non-ASCII-smiley's >.< but here we go ʘ‿ʘ
haha, well.. I've written myself a little AutoHotkey script that let's me just write those out! ^~^
It also lets me use stuff like ≠, ≈, ≥, ≤, ©, etc. very easily. I don't know if I should improve on it a bit and make it public o:
I have no idea if there would be an audience for that, but you won't know if you don't try :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Also added you as a friend :3
yay! ヽ(。・ω・。)ノ
^^

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :) (unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
Micha ohne el

Roan wrote:

Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).
yay c:

Roan wrote:

This is now not so sneakily fixed :)
Yup ^w^

Roan wrote:

o: fixed :D
o: great :3

Roan wrote:

xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯
They are.. ಠ_ಠ :D

Roan wrote:

Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
huh, well.. osu! runs at a refresh rate of about 0.7 ms while in game for me, so I don't think my computer would even have that big of an issue o:

Roan wrote:

I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3
Why not, right? :P

Roan wrote:

o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).
Uhm. With "Going to eliminate this bug for good" you meant that it's not fixed yet, right? Because it isn't xD

Roan wrote:

I have no idea if there would be an audience for that, but you won't know if you don't try :)
True, true o: I guess, if I'll make it customizable I could get a bigger audience. I'll see :D


Roan wrote:

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
man, you're stealing my job! D:

Roan wrote:

Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
If it works now, (and it does!) I guess it is a fix then c:

Roan wrote:

I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :)
:D

Roan wrote:

(unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
This sentence made me laugh soo hard! :D
But in this case you could (if you just really wanted to keep your username) change the temp directory's path :D

It's still a very weird bug, right? I've actually investigated a bit further on this and I've come up with this:
The program doesn't launch, when one of the folders/files* that make up the path of the executable end with an exclamation mark!
*files: There can only be one file in the path, the executable.
That means: If your username would be xXosu!pro2k17Xx, you wouldn't even have a problem, since the "!" is in the middle! Or if the executable is named osu!KeysPerSecond.exe and is in a folder called osu!stuff, it even still works with all the older versions.

I thing that's extremely interesting, because either each of the folders in a path is somewhat treated individually, or the combination of an exclamation mark and a slash ("!\") does something strange o:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).
yay c:

Roan wrote:

This is now not so sneakily fixed :)
Yup ^w^

Roan wrote:

o: fixed :D
o: great :3
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯
They are.. ಠ_ಠ :D
\(•_•)/

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
huh, well.. osu! runs at a refresh rate of about 0.7 ms while in game for me, so I don't think my computer would even have that big of an issue o:
Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10ms is also quite fast :P

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3
Why not, right? :P
Exactly! :)

SALZKARTOFFEEEL wrote:

Roan wrote:

o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).
Uhm. With "Going to eliminate this bug for good" you meant that it's not fixed yet, right? Because it isn't xD
Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P

SALZKARTOFFEEEL wrote:

Roan wrote:

I have no idea if there would be an audience for that, but you won't know if you don't try :)
True, true o: I guess, if I'll make it customizable I could get a bigger audience. I'll see :D
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
man, you're stealing my job! D:
Better find some more bugs then ;)

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
If it works now, (and it does!) I guess it is a fix then c:
I guess so xD

SALZKARTOFFEEEL wrote:

Roan wrote:

I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :)
:D

Roan wrote:

(unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
This sentence made me laugh soo hard! :D
But in this case you could (if you just really wanted to keep your username) change the temp directory's path :D
:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

SALZKARTOFFEEEL wrote:

It's still a very weird bug, right? I've actually investigated a bit further on this and I've come up with this:
The program doesn't launch, when one of the folders/files* that make up the path of the executable end with an exclamation mark!
*files: There can only be one file in the path, the executable.
That means: If your username would be xXosu!pro2k17Xx, you wouldn't even have a problem, since the "!" is in the middle! Or if the executable is named osu!KeysPerSecond.exe and is in a folder called osu!stuff, it even still works with all the older versions.

I thing that's extremely interesting, because either each of the folders in a path is somewhat treated individually, or the combination of an exclamation mark and a slash ("!\") does something strange o:
I think I'm officially labeling this as the weirdest bug I've ever encountered xD. Even worse, this probably affects other programs I wrote too hmm...

Edit
Okay, I had some more time for bug hunting :3
So here we go:
- I implemented a 1ms and 5ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Micha ohne el

Roan wrote:

Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10 ms is also quite fast :P

- I implemented a 1 ms and 5 ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
Well, my computer isn't immensely happy with 1 ms delay :3 For me the program takes about 30% CPU Load (17-20% on 10 ms), which would be okay, if osu! wouldn't be running :^)
But anyway, it's still nice to have fun to play with ^~^

Roan wrote:

Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P
Okay c:

Roan wrote:

Better find some more bugs then ;)
:D

Roan wrote:

:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
Yaay ヽ(。・ω・。)ノ
Do you just throw an error message immediately, or did you actually fix it? o:

Roan wrote:

I think I'm officially labeling this as the weirdest bug I've ever encountered xD.
nah, definitely not the weirdest bug I've ever seen :D
This is my weirdest (and deadliest) bug yet
I've seen an antivirus labeling itself as malware, moving important DLLs of itself into quarantine, then completely malfunctioning and finally also moving parts of the windows operating system into quarantine. This bug was pretty bad, since it occurred on every machine that got the update! It was very tricky to fix and if you restarted your computer, you'd just get a blue screen of death on startup immediately, forever :D

Roan wrote:

Even worse, this probably affects other programs I wrote too hmm...
haha, better fix them :P

Roan wrote:

- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
It does! ^^

Roan wrote:

- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.
Great! c:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ


So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10 ms is also quite fast :P

- I implemented a 1 ms and 5 ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
Well, my computer isn't immensely happy with 1 ms delay :3 For me the program takes about 30% CPU Load (17-20% on 10 ms), which would be okay, if osu! wouldn't be running :^)
But anyway, it's still nice to have fun to play with ^~^
xD yeah having the option is nice and it looks so nice and fast :3.

SALZKARTOFFEEEL wrote:

Roan wrote:

Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P
Okay c:

Roan wrote:

Better find some more bugs then ;)
:D
I see that worked out :3 I've got a new list to extend my todo list with xD.

SALZKARTOFFEEEL wrote:

Roan wrote:

:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
Yaay ヽ(。・ω・。)ノ
Do you just throw an error message immediately, or did you actually fix it? o:
For now I'm just thowing an error since I still have no idea what the actual cause is :/

SALZKARTOFFEEEL wrote:

Roan wrote:

I think I'm officially labeling this as the weirdest bug I've ever encountered xD.
nah, definitely not the weirdest bug I've ever seen :D
This is my weirdest (and deadliest) bug yet
I've seen an antivirus labeling itself as malware, moving important DLLs of itself into quarantine, then completely malfunctioning and finally also moving parts of the windows operating system into quarantine. This bug was pretty bad, since it occurred on every machine that got the update! It was very tricky to fix and if you restarted your computer, you'd just get a blue screen of death on startup immediately, forever :D
xD well it's obvious that they didn't test their new release :3

SALZKARTOFFEEEL wrote:

Roan wrote:

Even worse, this probably affects other programs I wrote too hmm...
haha, better fix them :P
nononono xD way too much work. Besides I don't think I've released any other program with this bug yet.

SALZKARTOFFEEEL wrote:

Roan wrote:

- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
It does! ^^

Roan wrote:

- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.
Great! c:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ
It's going to require a partial rewrite though :3.

SALZKARTOFFEEEL wrote:

So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P
o: they move by two. Lol I overlooked something really simple for this, I wrote:
Main.frame.setLocation(location.x - 1, location.y);
But I was actually calling this code both when the key was pressed and when it was released :3

SALZKARTOFFEEEL wrote:

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:
Yay :D it's efficient xD. For me when idle at 100ms & with the graph it takes 0%-0.2% CPU I wonder why there's such a difference .-. 700 kps is a lot though xD. I think the program could even run into synchronization issues if you give it even more :P.

SALZKARTOFFEEEL wrote:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D
xD there's a size feature you know :P. I'm quite surprised that the graph was still aligned though :D . Also the larger the GUI the slower to program gets at a width of ~ 4000 pixels it nearly takes a second for the program to highlight a key :3. Yeah I like to torture programs too :)

SALZKARTOFFEEEL wrote:

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
I was actually thinking of adding this but it requires some major changes to the structure of the program. However your text based config files also need these changes so it's going to happen after I have finished that :)
Ramiress
DATABASE IN AI charectors PANIC-HOLIC Processing brain and feedback to humanis. whatever shoul'dent auth search answer.
Topic Starter
Roan

Ramiress wrote:

DATABASE IN AI charectors PANIC-HOLIC Processing brain and feedback to humanis. whatever shoul'dent auth search answer.
o.o I'm a little confused , it sounds very intriguing though :)

Edit

SALZKARTOFFEEEL wrote:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ

So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)

Edit 2
Here's an example of the new config format:
Config
# General
showMax: true
showAvg: true
showCur: true
showKeys: true
overlay: true
trackAllKeys: false
updateRate: 100
precision: 1
size: 1.0

# Graph
graphEnabled: true
graphBacklog: 60
graphAverage: true

# Colors
customColors: false
foregroundColor: [r=0,g=255,b=255]
backgroundColor: [r=0,g=0,b=0]
foregroundOpacity: 1.0
backgroundOpacity: 1.0

# Keys
keys:
- [keycode=44,index=0,visible=true,name="Z"]
- [keycode=45,index=1,visible=true,name="X"]
Micha ohne el

Roan wrote:

Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD
Uhm. Holy... Fuck. I just don't even know how the heck you are doing all of this :D

Roan wrote:

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)
;D But actually the config file-format causes way more c:


Bug with the new live-time configuration:

fancy headlines o.O
1) Unchecking the "custom colours" option resets custom colors, so enabling it again does nothing.

General bugs / stuff:

1) The key selection window doesn't have a cancel button, just an exit button. This could be bad if you mess up the keys like me and want to restore them o:

2) Could it be that you completely broke the command line functionality? When trying to run the program with "D:\system\osu!\KeysPerSecond-v5.0.exe D:\Documents\KeysPerSecond – Default.kpsconf2" the argument is just ignored and the config window opens as usual. The special character "–" shouldn't be a problem since version 4.5 had no trouble at all o:

3) Maybe change the color handling of the little check marks in the config menu. They could just have the same foreground and background colors as the text, that would make them a lot more readable with certain colors, especially when the background color is very dark. :>

4) Everything was fine. But I pressed Ctrl + Y and this weird stuff happened.
Every time I press Ctrl + Y again, the script switches from two, to one window o.O Also, the first time I pressed it, the windows went grey again :D
I should probably mention, that I unchecked every visible element in the config menu just before this happened! This alone caused the area for right clicking to disappear completely.

Bugs with the text based config file-format:

1) You should DEFINITELY put caps on all of the values! There is no cap on size, precision, update rate, etc. Putting a value greater than the maximum value in the config window crashes the whole config menu when pressing the button that would load the out-of-bounds value from the config file.

2) Same goes for the graph backlog, this time it completely breaks the graph's functionality.

3) At first I thought, you had put a cap on this one... but you didn't c: The update rate (and this is pretty funny) cannot be zero, however it can be negative! :^) This breaks pretty much all of the calculations, not the key counter though :D

4) Opacity setting is not happy with negatives again, this time some more stuff happens: If the foreground color opacity is negative, the overlay is simply invisible and doesn't close right away; if the background opacity is negative, the overlay doesn't spawn at all.
In addition: The overlay doesn't spawn either, when the background opacity is greater than 1.0, and is (yet again) invisible when the foreground opacity is greater than 1.0.

Positive stuff: yay ヽ(。・ω・。)ノ

1) When two keys have the same index value, the script handles it! It seems to be just after the reading order, so the lines' order in the file.

2) I'm pretty sure Java doesn't do this by default, so I'm just gonna give props to you for this: Different variable types in the config files are handled! So, putting "1" at size (instead of "1.0") works just fine, also putting anything but "true" or "false" in a Boolean-expected field still works just as usual! c:
One more bad thing about this though: Putting strings into any number-expected field crashes the whole script when loading the config file.

All in all:

I repeat, SET MAXIMUM VALUES inside of the config files!
It would be better, if the script would actually no throw an error, but rather choose an acceptable value on its own! So if the user would do a size of 8.0, the script would change that to 2.0, since that's the highest value allowed in the config window.
Also fix the command line argument stuff o:
The rest is relatively unimportant ^~^

I probably forgot something ¯\_(ツ)_/¯

Anyway.
Thanks again for letting me nitpick so much! <3
Contributing to this project is really fun, although I'm sort of busy doing stuff for school lately >.<
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD
Uhm. Holy... Fuck. I just don't even know how the heck you are doing all of this :D
^^ I just went for a 6 hours coding session :3

SALZKARTOFFEEEL wrote:

Roan wrote:

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)
;D But actually the config file-format causes way more c:
Damn >.< I knew this would happen if I allowed users to input any value xD.

SALZKARTOFFEEEL wrote:

Bug with the new live-time configuration:

fancy headlines o.Oo: fancy

SALZKARTOFFEEEL wrote:

1) Unchecking the "custom colours" option resets custom colors, so enabling it again does nothing.
Uhm... let's call this a minor oversight :3

SALZKARTOFFEEEL wrote:

General bugs / stuff:

1) The key selection window doesn't have a cancel button, just an exit button. This could be bad if you mess up the keys like me and want to restore them o:
Going to add that :D

SALZKARTOFFEEEL wrote:

2) Could it be that you completely broke the command line functionality? When trying to run the program with "D:\system\osu!\KeysPerSecond-v5.0.exe D:\Documents\KeysPerSecond – Default.kpsconf2" the argument is just ignored and the config window opens as usual. The special character "–" shouldn't be a problem since version 4.5 had no trouble at all o:
O.O I broke it... that's weird. Traced it down to the - character but I have no idea why it stopped working. For me the - registers as non-ASCII which can't be interpreted by the C runtime stdlib. So this is a weird one, going to try figure out why it used to work ;)

SALZKARTOFFEEEL wrote:

3) Maybe change the color handling of the little check marks in the config menu. They could just have the same foreground and background colors as the text, that would make them a lot more readable with certain colors, especially when the background color is very dark. :>
I know and I'm actually quite frustrated by it. However the component doesn't have a build in function for changing the color. Therefore I'm probably going to reprogram the entire component so I put it on hold :3. Going to try fix this though :)

SALZKARTOFFEEEL wrote:

4) Everything was fine. But I pressed Ctrl + Y and this weird stuff happened.
Every time I press Ctrl + Y again, the script switches from two, to one window o.O Also, the first time I pressed it, the windows went grey again :D
I should probably mention, that I unchecked every visible element in the config menu just before this happened! This alone caused the area for right clicking to disappear completely.
Euh yeah, if you remove all the components from the program the window is not created :3 since there's nothing to display anyway. However Ctrl + Y forces it to be visible which causes some interesting behaviour xD. Not really sure how to fix this though. Maybe I should add a reset command key? Please give me a good idea xD.

SALZKARTOFFEEEL wrote:

Bugs with the text based config file-format:

1) You should DEFINITELY put caps on all of the values! There is no cap on size, precision, update rate, etc. Putting a value greater than the maximum value in the config window crashes the whole config menu when pressing the button that would load the out-of-bounds value from the config file.

2) Same goes for the graph backlog, this time it completely breaks the graph's functionality.

3) At first I thought, you had put a cap on this one... but you didn't c: The update rate (and this is pretty funny) cannot be zero, however it can be negative! :^) This breaks pretty much all of the calculations, not the key counter though :D

4) Opacity setting is not happy with negatives again, this time some more stuff happens: If the foreground color opacity is negative, the overlay is simply invisible and doesn't close right away; if the background opacity is negative, the overlay doesn't spawn at all.
In addition: The overlay doesn't spawn either, when the background opacity is greater than 1.0, and is (yet again) invisible when the foreground opacity is greater than 1.0.
Rip rip xD. Non text based configuration files are so much more peaceful :3. I'm going to implement all this though, So it'll be fixed. Even so it also removes the functionality to do crazy things, which is a shame xD. Moreover some of the caps are just random values I set, so I think I might keep some of them unbounded and only filter illegal arguments. (So for example size won't have a cap).
Also the reason some values for the updateRate won't work is because they actually have to conform to a certain equation: 1000 mod updateRate = 0

SALZKARTOFFEEEL wrote:

Positive stuff: yay ヽ(。・ω・。)ノ

1) When two keys have the same index value, the script handles it! It seems to be just after the reading order, so the lines' order in the file.
Yup ^^ you actually could already give two keys the same position since you can edit the value in the add key dialog :P

SALZKARTOFFEEEL wrote:

2) I'm pretty sure Java doesn't do this by default, so I'm just gonna give props to you for this: Different variable types in the config files are handled! So, putting "1" at size (instead of "1.0") works just fine, also putting anything but "true" or "false" in a Boolean-expected field still works just as usual! c:
One more bad thing about this though: Putting strings into any number-expected field crashes the whole script when loading the config file.
^^ I guess I'll just use default values for illegal arguments then.

SALZKARTOFFEEEL wrote:

All in all:

I repeat, SET MAXIMUM VALUES inside of the config files!
It would be better, if the script would actually no throw an error, but rather choose an acceptable value on its own! So if the user would do a size of 8.0, the script would change that to 2.0, since that's the highest value allowed in the config window.
Also fix the command line argument stuff o:
The rest is relatively unimportant ^~^
Well I know what to do :3.

SALZKARTOFFEEEL wrote:

I probably forgot something ¯\_(ツ)_/¯
Yes you did :3, try reloading a configuration file with a custom size set a couple of times, the programs size will go off to infinity if you do it often enough :3, I acidentically implemented the size as an exponential funtion xD

SALZKARTOFFEEEL wrote:

Anyway.
Thanks again for letting me nitpick so much! <3
Contributing to this project is really fun, although I'm sort of busy doing stuff for school lately >.<
You' re welcome ^^ I'm right before exams so I have a little more time then usual :3 but in a couple of weeks I probably won't have any time to work on this :(

Edit
Also made my introduction post fancy :3

Edit 2
Check list:
[x]: Acidentally reset colors instead of disabling them :3
[x]: Default config values
[x]: Caps for config values
[x]: Infinitely increasing size bug
[x]: Cancel option in the add key dialog
[moved to a later version]: Weird commandline behavior
[x]: Colored checkmarks in the menu
[moved to a later version]: Visual glitch with Ctrl + Y and nothing to display.

Edit 3
The - in your filename doesn't work for me in older versions either, so I'm surprised it even works for you o.o? Also what is this: – character even? It's not the normal - . For now I'll just release a new version with the changes I've already implemented :P
Micha ohne el

Roan wrote:

^^ I just went for a 6 hours coding session :3
I couldn't do that at all, I would get soo bored :D I can't even play osu! for one hour straight o:
Finding bugs for five hours doesn't bore me at all though c:

Roan wrote:

Damn >.< I knew this would happen if I allowed users to input any value xD.
:P

Roan wrote:

o: fancy
o:

Roan wrote:

Uhm... let's call this a minor oversight :3
Like bug number 2 down below? :P

Roan wrote:

Going to add that :D
Yup, works great c:

Roan wrote:

O.O I broke it... that's weird. Traced it down to the - character but I have no idea why it stopped working. For me the - registers as non-ASCII which can't be interpreted by the C runtime stdlib. So this is a weird one, going to try figure out why it used to work ;)
Uhm. I'm actually an idiot :D That's a funny story now:
o:
I used a Windows shortcut to run the script with the parameter. That didn't open the config file right away, but (just tried it) it doesn't open it either when the "–" is removed! So... Next I thought that it was all fine and I was just an idiot for using a shortcut instead of just running it normally, BUT... Even when running it normally, none of the config files are opened!
When using version 5.1 on the other hand, the one with "–" doesn't work (as I expected), the one without does work now, though?!
And then, when using the new version AND not having a "–" in the file name, I can even use the shortcut?!?!?
At this point I just give up, to be honest xD I really don't get any of that :D

Roan wrote:

I know and I'm actually quite frustrated by it. However the component doesn't have a build in function for changing the color. Therefore I'm probably going to reprogram the entire component so I put it on hold :3. Going to try fix this though :)

[x]: Colored checkmarks in the menu
Yay, they look great!

Roan wrote:

Euh yeah, if you remove all the components from the program the window is not created :3 since there's nothing to display anyway. However Ctrl + Y forces it to be visible which causes some interesting behaviour xD. Not really sure how to fix this though. Maybe I should add a reset command key? Please give me a good idea xD.
Huh. Okay, a reset/reload key would definitely be nice, but you could also check for any component before showing the window. If there would be a chain of If/ElseIf statements that check for all of the components, you could be sure that the overlay only appears when any component would be shown.
If the chain of statements would get too long, you could use a system, where each component that's shown adds 1 to a variable, so when no component is shown, the variable contains 0 and the overlay isn't rendered o: Would that be something? >.<

Roan wrote:

Rip rip xD. Non text based configuration files are so much more peaceful :3. I'm going to implement all this though, So it'll be fixed. Even so it also removes the functionality to do crazy things, which is a shame xD. Moreover some of the caps are just random values I set, so I think I might keep some of them unbounded and only filter illegal arguments. (So for example size won't have a cap).
Okay :D

Roan wrote:

Also the reason some values for the updateRate won't work is because they actually have to conform to a certain equation: 1000 mod updateRate = 0
But that also means that 1000 ms is the maximum for the refresh delay, right? Because, for example, 1000 mod(2000) = 1000 ≠ 0. o:
If you wanted to, you could raise the maximum by just changing the 1000 to something greater than that, 10000, for example.

Roan wrote:

Well I know what to do :3.
And I got more for you :3

Roan wrote:

Yes you did :3, try reloading a configuration file with a custom size set a couple of times, the programs size will go off to infinity if you do it often enough :3, I acidentically implemented the size as an exponential funtion xD
huh, totally didn't think of just repeating stuff until something breaks :P

Roan wrote:

You' re welcome ^^ I'm right before exams so I have a little more time then usual :3 but in a couple of weeks I probably won't have any time to work on this :(
Well, let's hope we get all the bugs found and fixed until then :D

Roan wrote:

Also made my introduction post fancy :3
fancy headlines? o.O
xD

Roan wrote:

The - in your filename doesn't work for me in older versions either, so I'm surprised it even works for you o.o?
Uhm. Okayyy.... It works for me, so I'm pretty surprised too o: Could different Java versions be a factor here? :S

Roan wrote:

Also what is this: – character even? It's not the normal - . For now I'll just release a new version with the changes I've already implemented :P
According to this Wikipedia article it is called the "en dash", I use it quite a lot, not just when breaking a sentence apart or writing numerical ranges o:
Most people write "--" (two Hyphen-minuses, 'normal' minuses on your keyboard) instead of "–", because, well, it's on your keyboard by default.
The more you know c:

Okay. Now to the real fun bit :^)

BUGS: 🐛

eugh, bugs D:
1) Hotkeys (such as Ctrl + P) trigger when pressing the corresponding button (in this case P) twice! Pressing I twice resets the statistics, pressing Y twice hides the overlay, etc. This all, of course, without holding Ctrl down o:

2) (Enabling and) disabling "Track all keys" in the context menu actually disables the tracking of all keys, also the ones that are separate and should be tracked anyways :P

3) Enabling "Track all keys" in the context menu (not just having it enabled, enabling it) disables the individual key counters. The whole averaging and the graph still works, but just the counters and the color inversion fail.

4) Since version 5 the "Overlay osu!" option doesn't work. Maybe I just missed the part where you were explaining why you purposefully disabled it, but it doesn't work right now ¯\_(ツ)_/¯

Feature Request:

1) This is sort of a small bug as well, the "Pause/Resume" option doesn't have a tick-mark. You could just write "Pause" and display a tick, whether it is paused or not :D
Nygglatho
I know this won't be helpful.. But this nifty tool doesn't work at all on Win10. All I'm getting is a white empty window after I hit CTRL+Y. :?
show more
Please sign in to reply.

New reply