#🤖│community_dev
1 messages · Page 8 of 1
"untested version of the plugin", so the official one? 😛
I mean, the good news is that I personally haven't had the init take 3 minutes
The bad news is, you're on your own in figuring that shit out
Yay
I made my own C++ plugin, tho it's aimed at supporting keyboard by Razer & co, it can also be compiled with Wooting support, so you could try it as a replacement ¯_(ツ)_/¯
Oh? How is it compared to the official one feature-wise?
It's a plugin, I implemented all the APIs and stuff
You'd just have to remove this continue
Looks interesting.
hello scary hackers
Hello, GTA Online DLC name
this name is from the 80s 
um, do any of you fine folks know how to get the browser hotkey (in remap) to work when you don't have the browser utility open
Browser utility?
yeah the beta utility
You mean this, right?
correct
i have it mapped as such, but it only works when i have a* browser open already
Well, I just mapped it, closed chrome, and pressing it seemed to re-open chrome
This might be related to how your OS handles this key
Able to replicate the issue on Arch Linux, works fine while a browser is already open
i was thinking the same thing, do you think this would be a keyboard or windows internal setting though
It must be some OS setting, the keyboard just reports that the key was pressed
It's possible that the key itself actually has no effect (in your OS) and it's the browser software that implements the functionality
this is why i came to the nerd channel
is there a way to see what the hotkeys in the utility do?
They're all just keys 😛
It triggers KEY_HOMEPAGE according to evtest
It's interesting that when I press it while in Chrome it opens up localhost
if you don't mind
I'm on Windows 10 Pro
Although, there is also the key that opens explorer and that works fine. That one definitely must be implemented in Windows.
Well, it's not a Wooting issue imo
(Unless you can prove that the keyboard is actually not reporting the key being pressed)
yeah so KEY_HOMEPAGE doesn't do anything on most OSes afaik, and instead depends on the focused application. If chrome is open and in focus, it'll handle the keypress and go to the homepage, but under any other circumstances it does nothing.
i would just like to know if they would have any insight, i'm not blaming anyone for anything lol
interesting
would changing the function of that key allow all OS to open the default browser?
yeah
File Explorer doesn't seem to work in Linux either (at least not on KDE), it just sends the KEY_FILE event
feedback channel probably the right place for this?
It's interesting, tho, I don't seem to get any WM_KEYDOWN or so for it being pressed, it just opens my browser
if i do make a feedback post, would you mind contributing to it? you have a much more in-depth knowledge of what you're talking about than i, lol @dim flax
might be a difference between Linux/Windows?
sure
It probably just means for some reason that keycode isn't associated with anything on your machine
god these keys are so responsive, so many extra letters!
i guess i want to make sure it's not a ME issue before posting something new
It might be these launch app keys, since LAUNCH_APP1 seems to be the "open explorer" one
Well, it is a you issue, since the "open browser" seems to work flawlessly for me
Actually, it's this one
if it's not just me, though
For the Linux user, you can just blame all problems on Linux 
I can always just rebind it to some macro that does the exact same
It seems to respect my default browser here
Those fancy keys do work on the Linux side, you might just have to bind it in whatever desktop environment / compositor / whatever you use
Check evtest, wev, xev..
tho I can't find anything else in windows settings about this key
hey guys
i am about to purchase my first wooting keyboard
but i have a question to anyone working on the company before purchasing about VAT
does anyone know how i can contact?
Is this the new general now
Anyway, I'm pretty sure you will pay whatever VAT is appropriate for your current region of residence as per your billing address
i'll go to general.
You'll see at checkout at latest 😄
the thing is that the shipping in my country is astronomic, and i can ship to my parents house in another country where the shipping is 10€, go pick it up in 30 mins and go home. but the shipping in my country is like 60€, so the vat and shipping i end up paying in both situations is the same.
Although it seems like VAT may already be included in the price?
look...
thanks guys, appreciate the help. posted a feedback thread and tagged you two in it. feel free to add what you wish!
hmm
crazy VAT in Spain but ok shipping... the thing is i dont want to pay VAT in spain as i am not living there...
well, do you know how can i contact someone? and sorry to break the theme on this channel, saw it before than general...
❤️
Well, in my invoice it looks a bit different
Funny stuff
possibly
thanks!
they do have a support email, I'd try shooting them a message
but can't you solve this yourself by simply using a different billing & shipping address?
also, Spain is in Europe?
I'm also in Europe
so, uhh
Holy what, I just deinited the Wooting Analog SDK and it did not crash
lucky me I guess
I feel like I actually prefer a more subtle effect for games, something like (value - 60) / 80 instead of simply value / 255
Guess I'll have to add such options to AnalogSense 😛
hahahaha, every single time
40% ortho wen
nah, they need to compromise more... how about one with only 3 keys? 
I currently am using a ZSA Voyager (https://www.zsa.io/voyager). They have a great set of software that enables a lot of neat features on the keyboard.
One of these features is called combos (https://blog.zsa.io/2212-combos/). I really like this feature. For example, if I press the x and c keys at the same time, it returns [ (holding Shift & x + c at the same time, I get { instead). I can similarly press , and . at the same time to get ] or adding shift to get }.
Does anyone know if I can recreate this using the Wootility software for a Wooting keyboard?
I don't think Wooting have support for this at the firmware level. At best, you can use the Fn key for custom "combos". You'd have to make some custom program that detects your inputs and sends appropriate inputs to correct it.
Ok, thanks for letting me know
tbf, the software is not that complex, e.g. this here works exactly as you describe:
it's just not particularly elegant since the x & c obviously still get input first
a custom driver could maybe handle this more elegantly, but it would certainly increase complexity 😄
also, a proper implementation of "combos" would certainly add input latency because whenever you press c, there needs to be a short window within which you can press x without a correction being needed (and vice-versa).
is there a wooting rgb sdk for python or is it not possible
dont really know how it works
its possible but would just call the dll file via FFI
do i need to build my own dll using this github rep
You can just download the official DLL and use it via FFI
oh nvm its inside
where can i find the functions of the dll this is the only 1 i know

now i can finally make this work much faster
instead of using a program that moves to each button on wootility lol
when you said "osu on the keyboard", I thought i'd be like whac-a-mole where a key would light up and you'd have to press it lol
I just mirror my screen lol
and its osu mania
I can see yeah
that makes more sense lol
is there a way to make a profile code for wootility
i want to be able to run my code with an image and then paste it into wootility so i can use it without running the program each time
just open dev tools and create a profile code
then replicate the request that is made
what is dev tools?
does it track requests made on a computer?
In your browser. Just press F12.

I just implemented "Rappy Snappy" in software 
"Last Input Priority" would be more interesting, I guess I'd have to keep track of which key has most recently been moved down?
isnt it already a thing
oh ur own implementation
Well, Wooting users can access it via the beta
but Razer users cannot select which SOCD resolution algorithm to use
and there's other analogue keyboard manufacturers with no such option at all
What do u mean by that @pearl yarrow

My friend reporter me since I scored more goals than him on football team @vestal jackal
before i used to get the colors i need for the keyboard and then run a program that moves my mouse to the color text box and then paste the color in and then click the key corrisponding the the color
and i repeat for all
now i can directly set the color to the keyboard using the script
i also made it so its generates a profile code that u can just paste into wootility
i dont have the code for the one that moves the mouse but here is the one that makes profile code
takes any image and turns it into a wooting keyboard's rgb
K @pearl yarrow can u make a colourful one
To whom it may concern, I've just published version 0.2.2 of the universal-analog-plugin: https://github.com/calamity-inc/universal-analog-plugin
I think the list of supported keyboards looks pretty good now.
At least it's a decent ratio of "works with my software" to "waste of money"
(Still pissed at Corsair and SteelSeries for producing the laziest analogue keyboards in existence.)
AI is such a waste upon this world, can't even listen to this UwU birthday song.
Back in my day, when we wanted a joke song like this, we'd go on fiverr...
thats cool ngl
Is there a way to make a default profile in the wooting software cuz its kinda annoying to change my profile every time i open my pc
make it the top most profile
this channel is also more for people developing custom projects with our SDKs. for general support its usually best to ask in #1019755933959733258
@grand flax Hello, i am using wootverlay and love it but it seems to be limited to 60fps. Is there any workaround for higher update rates?
seems limited to 40 fps actually: https://github.com/DjCrqss/Woot-verlay/blob/799c6cc99e95a7ee790e1eb5ed6cc3d8fffd16d4/Program.cs#L255
I made a similar thingy to this, but never really bothered making it a standalone piece of software. You can see it here: https://www.youtube.com/watch?v=xIVNbDQNNW4
You can get analogue input in GTA V and Cyberpunk 2077 with AnalogSense: https://github.com/Sainan/AnalogSense
For analogue input in GTA V alone, you can also use Stand.
The keyboard visualisation is Soup's cli_keyboard: https://github.com/calamity-inc/Soup
Can't say about its refresh rate, but it pretty much just waits until the device has an update available and then redraws the window.
Which wouldn't be possible if I used the Wooting Analog SDK 
why not?
40 updates a sec is definitely much too few btw. It looks jerky in realtime (especially without the blending option) and there are issues like going from 0 press to full press in 1 update when really the board was reporting 25x faster than that
Analog SDK only has polling, it doesn't give you a way of waiting for updates
ah that's fine
Yeah, I was thinking of maybe porting this to using the Analog SDK and making it like a standalone app
I mean, it certainly wouldn't be impossible, I guess I'd just have to memcmp and then redraw
Anyway, shouldn't be too hard to patch the "Woot-verlay" to have a higher refresh rate?
Okay, this bothers me
Also I legit can't detect any slowness
Oops
If it's too slow u can edit the code and minimise the delay -- I tried to pick a value to not make it have too many requests
Haha rip I guess my eyes are slow
mine too I guess
you can see the issues a lot better with slowmo or frame by frame but they are visible on fullspeed
for example on gameplay it can show a key unpressed, then update once and it's already fully pressed or releasing
it also adds avg 12.5ms, peak 25ms of latency which desyncs it a bit from the video
with a faster report that kind of thing wont happen
now I'm kinda curious how you'd feel about my tool lol
if you want a random .exe to execute 
you have dm's and friend requests off
honestly when I just press a key down, it looks instant to me
I can't possibly tell the transition states
these are consecutive frames of a 60fps video capture
the key actuates ingame at 0.7mm+ of travel two frames (17-33ms) before wootverlay catches any movement with current delay. These latencies are cumulative, not parallel.
and the key goes from 0.0mm to 4.0mm in one update, when it actually took me probably about 20 milliseconds to press it physically.
on other keystrokes, whole actuations (press then reset) are lost between updates sometimes
how do you tell the game actuated it?
new timing indicator on bottom bar and increment on combo count etc
let me know if it's any better, it should have pretty much no latency as it goes from receiving the HID report to telling Windows to redraw
will test out in a bit ty (:
I patched Woot-verlay to be 100hz and I can't tell a difference, guess I'll try 40hz
I would just yeet it to 1khz and see if there was any problem 😛 falling back like 2ms, 4ms if neccesary.
I mean I guess it feels a bit slower at 40hz with instant transitions off, but not slow enough for me to say "it's behind", just "it's got a slower refresh rate"
it is not an enormous amount of latency, just a noticable and unneccesary one. On a tuned gaming system the motion to photon latency is like 10 milliseconds but the latency on wootverlay is up to 35ms
and also there are events that are either lost or poorly captured if you want to do the kind of thing i do and look carefully over your gameplay, how and when you actuated the keys and if you made a mistake with that - the switches can do it, but they need to be polled more often to record truthfully - especially with repeated actuations and rapid trigger.
ah yeah just recorded it and played it back in slowmo
feels pedantic, tho
(this is 0.1x speed)
the one thing I don't capture is rapid trigger, but I guess I can compile a separate exe for digital input
may it help you in whatever way
I honestly never used rapid trigger, looks funny tho
It doesn't seem to make a difference with the way I use my keyboard, but I suppose it would help me spam better (if I adjusted my spamming motions)
can't wait to get banned from osu! (I don't play osu!)
well, it kinda breaks my analogue input stuff because it thinks me applying less pressure to a key means I want to stop pressing it, as opposed to I want the action to happen with less force 
Everybody uses rapid trigger for osu, and for most other games. It's the main transformative feature of wooting boards and analog switches in general IMO
Yeah, different modes
Being able to do stuff like variable turn rate in a racing game with analog switch is really big as well, but with the state of software at the moment it's limited to a niche
but didn't they ban the snap tap stuff because it allows for easier spamming? how is this different?
rapid trigger uses analog data to modify digital input, so it works everywhere that a regular keyboard does - but better
rappy tappy allows for multiple keystroke events per key press, and for one button to modify the state of another. They're both generally banned
rapid trigger makes the one key reflect your intention with less error, so it's not banned.
If you press a key down and then release it, that is only allowed to send one "press" - and the press has to be sent on key down.
yeah, I am trying hard to push on this front, but the only thing I can really do is try to improve the Wooting Analog SDK and support non-Wooting analogue keyboards
You will notice the exe I sent will also work with your Razer Huntsman keyboards or Keychron Q1 HE, should you have any of those 😛
i'm a wooter 😄
what games would you recommend that work well with analog input?
I know that trackmania does
Yeah, I still prefer my Wooting keyboards, but it's about the point of supporting the keyboards for me
I'm not much of a gamer tbh. I love GTA V the most, so I patched analogue input into it, and that's what I use mostly.
I put this up on Github as well: https://github.com/Sainan/AnalogSense
Have you tried the KSP mod? I've heard of it, but haven't used it
I'm not familiar with the KSP game at all
I'm aware of the mod because of awesome-wooting but that's it
KSP is really great for vehicle controls. Less excellent for cars because the wheel physics are not amazing, but cars do work and aircraft/rockets are better than anything else
more native analogue support in games is certainly always appreciated by me! 😄
https://www.youtube.com/watch?v=vWuOlWK0Z94 this would have been a lot easier for example with analog inputs 😛 there i had to keep some of the control authorities on screen and adjust them with the mouse cursor because it only lets you input like 0%, 20% (with lag) or 100% digitally. The same authorities don't work for different stages of flight. It's also basically mandatory with digital input to tap buttons on and off at a high frequency to average the actual input that you want which causes stuff to jerk around.
just a shame it's such a niche thing that no games have native support for it
yeah
oh yeah I can imagine flying like that with digital input 💀
my analogue patch for GTA V makes planes so much better lol
and the one game that did dropped it because of how bad the Analog SDK is, ha.
which?
Fugl
Like, Wooting listed the game on their website at one point (that link is now defunct)
I'm not sure what exact problem they were facing, but probably fixed with one of my PRs, haha
I'm honestly surprised how people didn't see Wooting when they started out in like 2016 and were like "wait, wtf, my keyboard can sense how hard I'm pressing my keys? this is gonna be huge in games, especially for racing and flying."
because that was basically my exact thoughts lol
Got my Wooting Two and never looked back at digital keyboards 
I saw a video on the original boards, but they had mixed feedback due to some issues and lack of game support
so it went to the back of my mind until everybody started losing their shit about the hall effect switches and rapid trigger 😄
Yeah, lack of game support was a point of contention, but controller emulation was supposed to be a "workaround"
then i got to try it, and the hype is real
Do you play Baldur's Gate 3?
it's a shame that in the end it's just using the analogue values at firmware level for better digital input, but I guess that's just how it goes
No
Games like that move the camera digitally with WASD
it would be nice to have analog

I'd love to extend my AnalogSense project to every game, but I'm honestly not that good at reverse-engineering lol
Well, not quite right on the year. I learned about Wooting in this video: https://www.youtube.com/watch?v=1WNI-f6QDPQ
Ah yeah and the RGB SDK still confuses the Wootility
Simon, are you looking for a colleague? I'll rewrite your software in C++ and fix all the longstanding bugs (same thing). 
ah man, the old switches, back when they were still nice and clicky 
That seems fast, but doesn't show the key press depth in digital mode or actuation status
digital mode tends to do that yeah, it just shows if the key is considered pressed or not
I'd recommend using both exes at the same time so you can see both the analogue state and if the key is considered actuated
I should probably add some option to display both in the same window, but whatever 
https://github.com/DjCrqss/Woot-verlay/blob/799c6cc99e95a7ee790e1eb5ed6cc3d8fffd16d4/Program.cs#L255 could someone compile a few vers of this for me with this line modified to 8ms and 1ms
or tell me how to set up stuff for compiling it if it's easy (i just figure that is probably more effort than someone who already has it set up running it)
you install visual studio 2022
ty
This project should be using .NET 4.5, having to share all this trash is... certified Microtrash 😄
or C++, with no standard library 😛
It's reading as 0.0% CPU usage even with 1ms wait
and i can't see any problem or reason for me not to just use that, in that case
Yeah, your CPU can do a lot in a millisecond, lol
Cries in instability
Thanks for the help
@quick bough you can probably get a similar feeling / tell of something being wrong with it like i had if you increase the sleep time, e.g. doubling it. If you're not sensitive enough for these problems to be obvious at 40 updates per second, they certainly will be at 20 or 10. Use instant transition.
Not sure if OBS still throttles the browser source, but definitely better (:
You sure are pressing those keys at an accelerated pace
better vid
and yeah
top players can very very easily do 1.5x my speed, and sometimes 2x with the same level of comfort
you don't really seem to be taking much advantage of rapid trigger
you dont see it that well on the display because it's so fast, but generally no when everything is going great rapid trigger isn't kicking in much
when you get faster and less comfortable there is a really common and difficult to avoid mistake where you don't lift your finger far enough off the key to release it before you press again
my favourite osu! cheat is this: https://www.google.be/search?q=metronome 
(I still don't play osu!)
and rapid trigger basically fixes that issue, to an extent at least (i have it on 0.7mm to mitigate accidental releases and presses)
I should plug in my Wooting® UwU™ and give it a shot
has wooting uwu
doesn't play osu

This is what i use with continuous rapid trigger
with other KB's you have to lift 2mm from bottom out every keystroke
with this it's 0.7 mm
which is a pretty big comfort and advantage gain
Well, from what I understand the most important thing is tapping consistently
aka with the beat
Yeah but even when you have a good feel for the beat it is difficult to move on the quicker maps
Stupidly enough, I also have a drawing tablet, but I lost the pen, so it's just a paperweight now 
like 250bpm map with quarter beat streams is 1000 hit objects per minute / 16.67 per second. 8.33 keystrokes per second per finger
i can hit that for brief periods of time like 3-5 actuations, but i can't hit 30 objects in a row at that speed
So you have to hit an object every quarternote?
on streams yes
usually people map jumps on half beat and continuous patterns like triplets and streams on quarter beat
and usually maps are around 160-220 bpm
but
masochism?
wait what switches does the wooting 60he+ come with
lekker v1 60's or lekker v1.5 60's depending on the batch
so i would have to buy the gateron magnetic jades seperate?
if you want jades, yeah
this is not even considered a hard map any more for like top 100 players https://www.youtube.com/watch?v=5d432cQoT-c
Watch Shigetora @ http://www.twitch.tv/shigetora
Player: https://osu.ppy.sh/u/124493
Map: https://osu.ppy.sh/s/158023
Skins: http://bit.ly/shigskin
Follow for updates @ https://twitter.com/ReeseWasHere
and it's over 16 keystrokes/sec on the streams
I wasn't even aware this was a thing, I'm kinda sleeping on keyboard modding I think
my keyboard could be sounding so good!!!!
that's insane. doesn't even look like he's using a wooting keyboard.
yeah woots are faster
get your wootings with my link to make my Day :)
https://next.wooting.io/our-products?partner_id=Lifeline
does this exploit snap tap or what?
or maybe dks?
idk
No, he's just pressing two keys 11x per second each
hmm, so just rapid trigger?
if you dont have rapid trigger (key deactivates after a slight liftoff) then you end up pressing the key back down again before it's reset, and choke hard
yeah
when ramping to a speed that you are not as comfortable with
eventually it becomes even a physical limitation because shit can't move that far or swap directions of movement easily in 40 milliseconds
this is what happens with dks exploit for tapping on key-up https://www.youtube.com/watch?v=mh24uiU8jOE
A top player showed it on unranked
Profile: http://osu.ppy.sh/users/7562902
Discord server: https://discord.gg/mrekk
Twitch: https://www.twitch.tv/mrekk
Twitter: https://twitter.com/mrekkosu
Use my code on Gamer SUPPS for 10% off!: https://gamersupps.gg/mrekk
Skin: https://osuck.link/u-7562902
// -=- Beatmap info:
Score link: https://osu.ppy.sh/scores/osu/
Edited by: cyper...
ah it's the next update (codename "lazer")
wait whaddefack
yes
I think it was using DKS to have key2 output on up instead of down
and tapping both fingers at the same time
so you get one action on key down and one on key up, and have to move your wrist half as much
https://youtu.be/ULFpTUOjpZo?t=40 this is mania :3
i can't play it
at all
that kind of game is kind of a niche but there are gods of it lol
Welp, probably not horrible for my first time doing this clicky thingy
I couldn't even process that fast lol
Lyrics:
Phineas: So you're saying that you don't have rhythm
But listen what you're doing right there
With that stamp and a book
You've got a real nice look
Sounds to me like you've got rhythm to spare
Swampy: I have no idea what you're talking about
I've got as much rhythm as that chair
What happened to me was a tragedy
But I don't have to be...
snap tap is a feature that is going to stay right? would like to confirm just before buying the keyboard
Just install the beta firmware, enable it, and never upgrade firmware again 
It's actually paradoxically easier to go faster, to an extent. Both in terms of BPM, and having less warning before you have to take actions
yes
snap tap is questionable from a getting banned pov though. Probably not an issue, but it wouldn't be super shocking if some game banned people for using
osu! confirmed snap tap is cheating
for osu yeah
so just be sure to check with whatever game you're playing if it's considered cheating...
i was thinking more towards games like valorant
probably fine for that
tho the part that confuses me is: doesn't rapid trigger basically already do what snap tap did?
I don't think snap tap is actually really useful for osu
actually it probably is nvm
but rappy snappy is more OP
because with rappy snappy you can hold key 1 halfway down
and press key 2
and each keystroke of 2 sends a "2" signal when it goes down, and a "1" when it goes up.
so it's doubling your inputs
well, snap tap is easier tho because you can press 1 key full down and spam the other
any idea on where wootility will recognise more keyboards manufacturers?
wootility is the software for wooting kb's
Wootility is exclusively for Wooting keyboards. What exactly are you trying to do?
it's not a general configuration software for all keyboards
also love how sometimes this chat is more active than general and then suddenly new people come in here for support lol
also does anyone know if u get a discount for signing up for the newsletter i swear it said u did but i didnt get one :/
Uhh, there's these if that's of any use?
(also I'm pretty sure I never bought a Wooting 60HE)
thanks, but unfortunatley im buying the reg one so those dont work :/ 200$ hope its worth it 🙏 😭
It is, Wooting keyboards are nice, and very durable
even if you only want to buy it because you think it gives you an advantage instead of an actual interest in the coolness of analogue input, but... no judging.
At this point who is even buying it for the analog

I mean, I think the analogue is still the selling point
It's just a better way of doing digital input now, lol
which is just a cruel irony
Yeah sad, I bought mine for analog keys but that was back in 2018.. Before double movement or snap tap or SOCD was even a thing people thought about
just ordered the keyboard it said thanks for the "pre order" are there none in stock rn ?
Which one did you buy? The 80HE is right now still a preorder. The other ones should be getting out rather quickly, tho.
60he+
hmm, maybe keep an eye on #📦│batch_updates
but it looks like the 60HE+ us already at a stage where they are able to mass-produce it, so it probably shouldn't be too long until you get it
I feel like the Wooting Two HE is the only thing they keep in stock tho lol
Unserious keyboard company, doesn't even have a TKL, smh
my 60HE+ took 2 days from order to delivery, within Germany
That is quite fast for Wooting 
I bought like 3 Wooting Twos in total and I don't even remember how long they took to be shipped, I guess I'm just remembering how long the preorders take
That's a win, I guess?
Please reserve this channel for only community development related conversations, thanks
Mine took 4 days in France
And i received it yesterday
Awesome keyboard
Can you enable digital input somewhere?
Your keyboard is digital by default
but the keys are analogue, so you can take advantage of that in various ways
e.g. by defining how far down a key has to be in order to be considered "pressed"
Right I’m fairly familiar with Hall effect sensors, Ive done a couple projects at work with them, was just wondering that exact point, whether you could set that actuation point. Very cool. Thinking about picking one up then
Thanks for the heads up
my keyboard keep connecting and disconecting when i try to save anythign in the perfomance tab what do i do?
best to make a post over at #1019755933959733258
Are you using any RGB apps such as Artemis?
nope
all ive got on my pc is pulsar mouse software
and the wooting movement and wootlity
no other rbg apps
dealted razor and steelseries trying to fix it
Anyone know how fast the leds can update? or how fast the keyboard can update
Just spam it with updates, it will block/throttle anyway at waiting for the keyboard to acknowledge the interrupt
would it queue them or skip them?
The problem is that there is a bug where sometimes the LEDs do not update anymore and you have to unplug and replug the keyboard to fix it. And I'm not entirely sure this bug is related to how much you update the LEDs at all.
When I say "it" here, I mean whatever API you use to send an HID report.
I want to make my own program to make the smoothest rgb rainbow animation as possible, but if it reaches a quiet limit and skips updates it would have the opposite effect, skipping colors
I'd be using the wooting rgb sdk
Yes, that's also an API that sends an HID report for you
So, you will notice it will block, waiting for the keyboard to "ack" the interrupt.
hmm, I guess I need to make sure not to overload the processor so it doesn't fail to send keys or something
I don't think that's a concern
My only concern would be about that bug where it stops updating the LEDs
Anyway, just try it and see 🙂
for some reason I cant increase my brightness above the locked limit unless I use artemis, this might be a beta firmware issue though
Wdym?
it only goes full brightness when artemis is running, otherwise its stuck at 70% even if I set it to 0
70% is the brightness you set in wootility?
I tried both wootilitys but its the same, for some reason it only applies when using third party rgb, with stock rgb its stuck at 70%
70% is the max unless you click to unlock the 100%
Oh, because of Tachyon mode?
it saves the brightness setting, and uses it when I open artemis, and shows in the other wootility, but it goes back to 70 when I close artemis even if it's set to 0 it goes back up to 70
I don't think an app using the RGB SDK should touch the brightness at all, as you can configure this yourself in the Wootility
and I figure the brightness cap is only implemented in the wootility because they found it to be better for tachyon mode performance
if you then go and bypass that by sending a report to the keyboard to update the brightness yourself, that's kinda your problem
I'm gonna try factory resetting the keyboard to see if it's a beta firmware issue
now its working, must have been a weird bug
I'm getting hidapi error: Broken pipe
I'm using the hidapi rust bindings, and I tried setting my device to 777 with udev rules but it didn't help
You did set the udev rules appropriately, yeah?
Otherwise the fopen or whatever call returns an invalid handle value (-1 I believe)
Actually maybe any negative number would be an invalid handle on Linux
I have the wooting udev rules and I tried adding a 777 permission to it
You also restarted the service after setting the rules?
The chmod has no relationship to it, I don't think.
Tho it should definitely work as root
no I set MODE="0777" for all the rules, restarted, and I tried running the binary with sudo
What is this "smoothest rgb rainbow"? Just out of curiosity
That still makes no sense to me, because this is all the rules you need
yeah thats what I have
Well, okay. Have you tried using hidapi in C/C++?
I want a smooth rainbow animation but with tachyon, but artemis lags sometimes and I want to program some integration with my window manager
It's unlikely the Rust bindings are wrong, but I can't reason about your Rust code, there's like so many uncertainties about it that I assume you just hope magically work.
I haven't, but my wooting-rgb-sys crate works
You lose the benefits of tachyon if you use the rgb sdk :p
Why don't you just use that one as the framework, then?
the rgb sdk doesn't expose the rgb matrix buffer, so I wanted to try using hidapi
There is no way you can possibly notice a 1-2ms difference in input latency
So I asked Simon and yeah, turns out reading the rgb stuff on the firmware side and writing to the leds takes time
no I don't care that much about tachyon
does it turn back on if you close the program?
It doesn't turn off
Just the stuff that it skips doing while it's on, you're forcing some of it to still happen if you use the sdk
That's my understanding of it.
So there's 8 interfaces and #2 seems to accept write/feature reports, but I don't see where that's controlled in the rgb sdk
Based
I hate to say it but I found another bug in the Analog SDK 
Would be nice if you could read unbound keys
It is more so for organisation, same as why vendor id & product id are split.
Of course, ultimately, it is up to the vendor to decide how they assign usage ids and usage pages for custom protocols, as long as they avoid any of the reserved/documented values.
Is the firmware open source?
No
They gotta keep (what they believe to be) their competitive advantage
In my opinion as a customer of analogue keyboards, the real competitive advantage of Wooting is the long-term support they give for their boards plus the excellent software interface (Wootility).
Because as we can see, when a competitor actually cares (Razer), they are perfectly capable of replicating everything on the firmware end that's interesting
For sure, wish they were hiring US developers. Seems like a great team
Meanwhile I'm just trying my best trying to fix up their Rust software as a C++ developer
even tho "at work", I've now stopped using the Wooting Analog SDK in favour of my own C++ class for analogue keyboard support. It's a lot easier for the customer to use (no need to install any software, no need to restart anything for PATH to update, no need to install a plugin for non-Wooting keyboards). Also the turnaround time on getting bugs fixed is faster by a factor of months or even years.
I haven't looked at the SDK yet, might have to take a peak
I have like 10% of the rgb sdk rewritten in rust, took awhile to figure out the rgb matrix is converted le
I can't spam send as fast as possible, it causes flickering, but 15ms is good enough
You are waiting for a response from the keeboard, right?
You should not do that 😄
Wait for it to acknowledge
I've not managed to have it "flicker"
do you mean wait for the write to finish? or read, read just timed out after 1s for me
Well, depends on what you're doing
If you're doing the full-size keyboard update (WootDevRawReport), then I don't think there's a response
but (WootDevSingleColor) does have a response
Init & Deinit as well
Now rewrite it in C++
Also, note that your product matching will breaky if you switch the gamepad mode
yeah a lot of it is hard coded, I might add more support to the lib, but it's really just for me. I will never write in c/c++ again .-.
does anyone know what command is used to get what function layer is active?
we have a command for that?
wootility is able to see it, I assume there's a command for it
You mean which profile?
which function layer is active
where can the wootility see that?
you can get which profile you're on, but i don't think you can for the current fn layer
yay a Rust enjoyer
If you like Rust, you might also enjoy: The Wooting Analog SDK
(Just ignore all the bugs that the version written in C never had, and then you can feel a sense of pride and accomplishment!)
It was written in C before?
Yeah, there was a version written in C
Then they rewrote it in Rust, like you do
I don't quite get what possessed them to skip over C++
The fact that it's not safe :p
That's a strawman argument
Well, that could be one reason
There could also be Rust's package manager or its stdlib and ecosystem in general
what about that is strawman 💀
It's pretty hard to have memory safety issues in C++

I really don't think it's hard to have memory safety issues with C++. You can still blow your whole leg off while carefully using all the standard practices like unique/shared ptr, all the sanitizers like ASAN/BSAN/LSAN etc.
Meanwhile in Rust:
- when you don't use
unsafe, it's impossible unless you exploit a compiler bug - when you do, the unsafety is scoped and way more controllable
Different requirements, I suppose
The problems I have with the Analog SDK boil down to the fact that Rust loves crashing
Sure, you're not having a memory safety problem if your program isn't running
but you're also not having much of a user experience to speak of
That's not inherent to Rust, but more about the general practice of using .unwrap() everywhere when starting a project. At some point when I write a program in Rust I want to make sure I have the least amount of panics possible, at which point I look for these .unwrap() / panic! calls and start properly handling the errors
Also, a lot of these crashes I've seen were, in fact, not panics, but access violations
I mean, there's the unstable ABI
which funny enough does not cause linker errors
so it links just fine, but crashes at runtime
Are you talking about the analog SDK?
Yes
Because I searched "segfault", "segmentation", "fault" and "violation" and I see no issues
Did someone get one on the Discord or something
There was one where a dependency of the package was super unstable (I mean, okay, they used unsafe, but it was not clear at all what caused it)
Like "yeah your code is safe unless you use unsafe" kinda breaks apart when just any one of your 100 deps has to use unsafe lol
With this npm-like ecosystem, how could you possibly tell
most of system resource access is unsafe
Ah, there I see one potentially related issue, which is fair yeah, Rust has an unstable ABI (I don't like that either)
https://github.com/WootingKb/wooting-analog-sdk/issues/71
The fix for what I just described was just merged recently: https://github.com/WootingKb/wooting-analog-sdk/pull/70
Still a problem in the current latest release tho
Another fun random crash: https://github.com/WootingKb/wooting-analog-sdk/pull/76
The patch for that doesn't even make any sense, lol
if only rgb sdk was rust already with proper multi device handling and not my BS implementation of it
Yeah let's write more code in Rust so we can have more unstable software!!!
Not really. The standard library uses unsafe all over the place, but they actually put comments every time to justify why what they're doing is actually safe.
One of the problems with Rust is that it's harder to write unsafe code in it than to write inherently unsafe code in C/C++ (or Zig, I've heard) because of the differences in UB
Even though Rust makes tangible improvements to memory safety and actually makes it possible to write completely memory-safe code, if at the end of the day you don't look at what the dependencies do you're bound to have any kind of error including memory unsafety ones
i dont think rust is inherently more unstable or something. also cant forget that c/cpp had a few more days in the slow cooker compared to rust
for how young rust is its pretty mature imo
Writing stuff in Rust vs in C won't make the software crash more than it would've done. Usually it makes it more correct simply because its APIs are designed to make you think about it earlier on. That's my experience
My experience is with C++ (not C, C should die already) and RAII makes it stupidly easy to deal with allocations, without leaks or GC (same thing)
"c should die" take is kind of insane lol
Certainly I will agree there is some "skill" in identifying when C++ code is just C in disguise and then double- and triple-checking the correctness of all operations
yes but cpp is like 40years old now having the same time in development of the language, its compilers and resources around it
rust is not even 10years old
the first stable release of Rust is 9 years old indeed
I mean, not entirely, obviously it has tons of uses for tiny compilers/embedded systems, but systems programming on modern operating systems? No, don't do that.
Also people put Rust up to really really high standards when it comes to memory safety because it's pretty much the only language that brings "memory safety" as a point. Garbage collected languages already brought in safety at the cost of performance, the real difference is that Rust eliminates that cost (and also has a few more correctness features)
even worse when people act like it's either "write it in C" or "rewrite it in Rust" when the correct answer is "slowly introduce C++ to the C codebase"
Have you heard of https://github.com/EpicGamesExt/raddebugger 👀
oh and also Handmade Hero
No, looks like a horrible language choice for a GUI program tho 😄
weird cause i remember some kernel devs saying cpp sucks for kernel development
I know why Torvalds doesn't like C++, and I understand those reasons, but at least some of them should also prevent him from allowing Rust 😄
It looks like it, but the author Ryan Fleury has a whole UI blog series on making a UI from scratch, as well as a few other programming-related articles you might like to read as a C++ dev :p
As well as his Enter The Arena conference talk
Personally I prefer C to C++ because it's a simpler language, which is weird coming from a Rust guy but it is what it is
Ideally I'd have a language that's safe like Rust yet kinda simple like C, but that language just doesn't exist (no, Zig is not safe like Rust)
Ideally I'd have C++ and more humans with enough brain capacity to effectively use it
and, as a result, more software that is up to my standards
but then, I guess there would be very few opportunities for me to compete and earn money 😄
"skill issue" is a very common argument, but I think it's a complete red herring
Well, either you never tried C++ or you have a skill issue
and surely you wouldn't dislike C++ if you never tried it? 😄
Well, it's what we use to make complex software without going insane
You're gonna encounter skill issues in any programming language, especially low level ones.
In C you'll get skill issues doing memory management yourself in a safe way.
In C++ you'll get skill issues doing RAII and ownership in a safe way with smart pointers.
In Rust you'll get skill issues fighting with the borrow checker.
in JS everything is a skill issue
The key difference in these skill issues is that in the first two, you get skill issues making your program safe, while in Rust's case, you get skill issues compiling your program because the compiler only accepts safe code
(I'll be going afk for an extended period of time now.)
(note that I didn't say it only rejects unsafe code, that's different and somewhat impossible unfortunately)
I love how my first proper discussion on this server is a Rust vs C/C++ debate lmao
there's been a few of those already lol
I guess this checks out
I'm sure xD
rust does have a lot of that doesn't it
Yeah
At least I like it on Discord way more than on Twitter. On Twitter they just babble without listening
"Rust doesn't prevent all possible memory leaks on earth?! yet it claims it's memory safe?!?!? ABSURD!!!!!!"
the only significant thing i did with rust used a lot of win32 stuff that i couldnt find any rust bindings for so it was kind of miserable with a bunch of unsafe blocks everywhere
sad
Yeah FFI is always unsafe u_u
I tried Rust years ago and didn't like it and don't like it now either
I start liking Rust less and less for quite different reasons
The first is that it's now really complex and that I wish I could use a safe language that's closer to C in terms of simplicity
i think rust can be good but it's also misused. people try to shove a systems programming language where it doesn't belong because of hype
The second is that I got... uh... "arena-pilled" (?)
I also find it quite offputting that many Rust written projects make it a big deal that OOOH WRITTEN IN RUST YEAH!
The third is that everyone uses a gazillion dependencies and it frustrates me to no end 
I don't, I do it myself. It's pretty much a feature in and of itself because of the work the language does. You can expect both performance and memory safety when you see that 
That's combined with the fact that a lot of those projects seem to crash (well, panic) all the time
Yeah at the beginning they'll be lose on that
there's shit projects written in rust and amazing projects written in "crappy" languages. the tech doesn't matter that much
as long as it's appropriate for the task, of course
Well, it does matter, but it doesn't do all the job
It's just a tool like any other with its advantages and disadvantages
Not really making a "everything has its ups and downs" argument because I will rank a tool against another one 
But talking in binary is always easier than explaining every nuance
I personally try to use .unwrap() the least amount possible in my projects anyways, I prefer when stuff doesn't crash
that's how the "blazingly fast" people come across to me, binary :p
How about quantum bits? Being memory safe and memory unsafe at the same time 
cve-rs wink wink
I'm also not too impressed by all the dependencies. I get it yeah you don't want to always write everything but seeing even simple projects have hundreds of them, many even duplicated in different versions isn't so great
i was looking for that earlier but couldnt find it haha
I actually prefer that Cargo duplicates dependencies, rather than refusing to compile or bring a dependency because it exists in another version
I don't like that the ecosystem is essentially drugged on deps though I'll give you that
I try my best to avoid it but it's hard
the worst part of c/c++ in my personal experience is build system and dependency things. i get that it's skill issue and the flexibility can be a good thing, but i like to be able to cargo build and it "just works" most of the time
but what about my dependency on the package to tell me if something is odd or even and the one for if its true
How could you possibly f*** up RAII and ownership?
Worst case scenario, you use-after-move a smart-pointer and it turns into a nullptr deref
...you just gave an example, didn't you 
Which you can imagine as a "panic" if you wanna think of it as all sunshine and rainbows
In both cases, you don't have a memory safety problem
You still obviously have a logic error, tho
And no amount of compiler magic will fix that for you
You need to know programming to write correct logic
winit, a windowing library, imports about 100 dependencies including ones like ttf-parser, tiny-skia and ab_glyph just for wayland because Gnome is too stupid to enable server side decorations
Transitively, through sctk
u g h
duh xd
Even Rust doesn't change that of course
it just makes it easier to not fuck up
the real reason I use Rust is to not have to deal with learning gcc/clang/make/cmake and writing makefiles that works cross platform. The language is alright, I would learn it if it was otherwise easy to use; but it's not unless you're writing software for one platform.
build.sh + build.bat my beloved (?)
but the main money maker is Microsoft Windows, and there Visual Studio is an excellent build system
excellent you say
Yeah it really is excellent when I have to manually edit all the library and include paths since no one invented pkgconfig on Windows
I could've saved myself a lot of pain if I didn't want to port my software to Linux and MacOS probably
seriously windows where's the pkgconf
I mean, it has tons of problems, but on the point of pressing Ctrl+B and compiling what needs to be compiled and linking what needs to be linked, it is very good
Like, secure sockets are just an OS library on Windows
instead I spent probably 2+ weeks to implement TLS myself

why
so it works on Linux and MacOS, too 🙂
openssl 🥲
can't argue with that, I use rustls
(which is not spec compliant)
and yours was spec compliant and had no bugs?
obviously
It was spec compliant, and had none of the known implementation bugs
its sainan youre talking to
but it's a protocol with 2 sides and I encountered some funny behaviours from the other side
Also, use-after-move wouldn't be a nullptr deref, it would just be an invalid deref, right?
e.g. NGINX would return internal_error with certain "hello" packets
I have been stopped by tls cert pinning too many times
No, it would be guaranteed nullptr if the value was moved away. You have such guarantees with C++ classes.
Ah right, because it nulls the pointer
I don't actually use cert pinning, I just have my own trust store, which is fine, unless one of the trusted CAs goes rogue.
Also means you can't MITM the traffic, because none of your puny CAs are trusted 
thats my problem
Not a problem for my use-case, lol
I wanna sniff that traffic
and I don't want you to sniff my traffic 😛
does that mean stuff that uses cert pinning doesn't work in china, or do they allow tls traffic through the firewall?
Mainly, the TLS spec does advise that AES-CBC-128 should be supported. In practice, of course, this is rarely the case anymore. This does lead to some problems where people just try to optimise for some security vanity metrics with their TLS configs and end up making it needlessly complex to just establish a connection.
Sometimes people forget that public UDP services exist, too, I feel like
Not really. Who you connect to is obvious from DNS queries which may be unencrypted, from the IP address you are talking to, and/or the TLS handshake which also includes the target hostname in plain-text.
Funny enough, they block raw.githubusercontent.com, but they don't block jsdelivr (who also support github content)
Trying to make internet-connected software is actually a nightmare with everyone and their mother trying to play the censorship game
I include anti-virus/endpoint security/router security/etc. as "censorship", too, because your intentions rarely matter
don't mind me, just adding salt to the Rust vs C++ debate (?)
https://lobste.rs/s/0akqy7/are_there_any_good_reasons_use_c_over_rust#c_ihruks
Yeah, there's a lot of "interesting" takes on it
I'm not surprised that this is a decision that came from the CTO (and not someone who actually codes all day)
Rust totally makes sense as a business decision
If the mistakes of your programmer can not be a safety risk for your company, then obviously you would prefer that language
because now you can hire more idiots
have a higher throughput
and (at least in theory) not take on any more risks
but the way this scales is also interesting to consider
because a person using Rust is certainly slower than a person using C++
the C++ dev doesn't have to contend with a ton of (mental) overhead everytime they wanna add a new feature or whatever
I'd always just invest in better people over more people
This is yet again the "skill issue" red herring which only leads to unjustified gate keeping. No matter if you're the number 1 driver, you wear a seatbelt, and if there's one that's better engineered than the last you will wear it given the opportunity. Switching to Rust doesn't necessarily lead to having more programmers that are overall less skilled, it just leads to more safety compared to C++
Your analogy is a bit off
Also, as someone who doesn't have a driver's licence, the only times I was behind the wheel and driving, I in fact did not wear a seatbelt 😛
Anyway, if there were a better seatbelt available, doesn't mean I would install it if it were effort and the benefits aren't obvious
They do. They think about ownership and lifetimes without the help of the compiler to verify it. It has to stay in their heads, just like someone coding in a dynamically typed language has to keep the types of the variables in their head in mind to avoid having runtime type errors
oh, you might be doing C++ wrong then
my man, that's what abstractions are for
I never think about lifetimes nowadays, I just trust in the architecture I made like 4 years ago
which is a very simple tree structure
the lifetime guarantees are obvious
it's maybe 1 second of thought
but if I had to explain what I am doing to a compiler? that how if X is true then also Y is true (and these might be entirely unrelated from its POV), I'd probably go insane
A simple tree structure is exactly what the ownership model makes you create. When you need something more complicated that's where you use different memory containers (equivalent of smart pointers in Rust, somewhat). They're also abstractions just like C++ has abstractions, they're just better

So, it is a skill issue
The skill of programming apparently suddenly disappears from you when faced with C++, or what?
Nothing stopping you from making a tree of smart pointers in C++
you have RAII make sure you don't leak
and very clear guarantees about the lifetime between nodes
I'll just quote this, I don't know what you're saying anymore
RAII only prevents dangling pointer memory leaks, not other kinds of leaks, just like Rust with ownership
If you can show me an example of where you go wrong with RAII and smart pointers, it might make sense
What kind of leaks are you worried about?
reference-counting cycle is a classic example
another very very very simple one is just pushing to a vec in a loop
Does Rust solve that?
So, you need to know programming either way 😄
which is why it's a waste of time to try and fix that
yes
Did I ever say you didn't?
I saw this video a while ago. I think that's a good example
https://youtu.be/qeiRGbYCD-0
Part 2: https://youtu.be/-VbVcpZnQss
Code: https://github.com/contextfreecode/safety
0:00 Intro
0:27 == C++ (cpp) ==
1:30 Returning expired memory
3:09 Pointers and values
4:02 Analyzing memory errors
6:09 Secret frees
7:19 Out of bounds
8:31 Initializing values
8:50 == Zig ==
9:33 Initializing values
9:50 Out of bounds
10:13 Explicit destructi...
Okay, at first I thought this guy was being serious
Then I spotted he's returning a reference to a local lmfao
Yeah, it helps to know how to code in C++ for sure 😄
On another note, vector<Node> doesn't make a huge amount of sense
realistically, Node is an abstract base class with tons of implementation details being unspecified
so you do generally have a vector of smart pointers
Of course it helps
of course, you have to be careful where the lifetime of your objects ends
Yeah, because the compiler won't do it for you
you can't just give a reference to some value you put on the stack during the function execution
You can, that's what will make it crash - although I'm sure for cases as simple as the first one in this cideo the tools can catch it
It's not always that obvious, but unfortunately I already ran out of examples. I have another one but it's your previous "worst case scenario" lol
Well, you can, but you can't. It doesn't make sense.
Also in general not an issue if you ask the compiler to infer the type for you
which he already kinda did but then didn't just to invoke UB for the sake of invoking UB
Anyway, yes, I know that it's possible to use values outside of their lifetime when you use pointers/references as opposed to smart pointers/weakrefs.
If this is a problem for you, you can use smart pointers, weakrefs, and be sure to assert in important places
It's not my really my problem tho if you're unable to use a low-level programming language I guess
You're just not the right person for the job then, right? 😄
In any case, even supposing that following all the safe C++ practices helps, you still have to deal with the old unsafe legacy of the language, the compiler unable to check as much about the safety of your code as Rust can, and safety not being the default, making it harder to write code that is safe from the get go.
Here's another article about C++'s problems in that regard
https://www.thecodedmessage.com/posts/c++-papercuts/
UPDATE: Wow, this post has gotten popular! I’ve written a new post that adds new papercuts combined with concrete suggestions for how C++ could improve, if you are interested. Also, if you want to read more about C++’s deeper-than-papercut issues, I recommend specifically my post on its move semantics. Thank you for reading!
My current day job i...
I'm perfectly capable of using C and C++ to do the job, I'll just have to deal with having potentially more memory safety issues that I'll have to fix later on
there is no unsafe legacy. I use very little third-party code, and what I do use, is heavily tested
Huh? There definitely is unsafe legacy in C++. Just because you make everything from scratch doesn't mean that's false
Heck, making everything from scratch means ditching the entire ecosystem. Not everyone can afford doing that, it's nice when you can though
But yeah sure I'm just not fit to be a programmer, totally not just a design and legacy issue
It's always the same argument, "you're just not good enough", meanwhile the skill issue just doesn't exist in another better ecosystem that doesn't make any significant trade-off in that regard
I didn't mean to offend you
Oh you totally did mean to. That's like the only thing "you're just not the right person for the job" is ever meant to do actually. You don't need to deny that :p
I'm not personally offended, I know my skills, I won't let myself feel insulted by statements like that. But I do feel somewhat pissed off by this completely backwards logic, which is why I engage in these kinds of discussions even though it's probably not good for me in the first place
It's a joke on "right tool for the job"
Anyway, you really just seem to be arguing from a place of second-hand knowledge, hence it's really more a problem for you personally not with the language as a whole imo
Heck, suppose I'm not the right person for the job. I've seen enough experienced C++ developers go to Rust and eventually actually understanding its benefits. I don't need to be the one saying stuff like that, I just don't like misleading statements or ones that are just plain wrong
because clearly we are capable of writing complex software in C++ without a memory issue every 2 seconds
Certainly not every 2 seconds, more like 1 out of 1000 lines of code for Google devs
Maybe a bit less than that if you follow modern practices even more than they do, idk I haven't checked, I just know they have this problem
I stopped doing C++ 5 years ago anyways
I would be hardpressed to come up with a memory issue that isn't contrived
but yeah I can only speak on my own experience
which is in pure C++ codebases with a very good foundation
I will concede that essentially making your own ecosystem and having better foundations outside of C++'s old legacy does help a lot
That's what raddebugger and Handmade Hero do, though in C and not C++
and I do have a little secret trick: if there is an access violation, we can just catch it and continue execution after changing the registers a little 😉
see, I don't understand why they'd pick C over C++ tho
not having to worry about having to free resources is a huge gain alone
anyway, I do have to "lock in" now... I'm trying to interact with a HID device and need to actually get to parsing the damn data
I'll let you know if I run into any memory safety problems 😛
They don't use malloc and free at all
This is a video of a talk I did in August 2023, aiming to teach the concepts described in my blog post at https://www.rfleury.com/p/untangling-lifetimes-the-arena-allocator, in a different format, with greater and more concrete detail.
The small sample program—along with many other projects and examples, all built using arenas as the core memor...
I don't mean literal free, you might need to dtor some resources or whatever...
but also no matter how you allocate memory, you would still need to free that memory in some way
(unless you're a GC, then you can just leak it and call it a strategy, I guess)
They don't use new/delete either, the point is they don't use RAII
well yeah of course they don't use RAII, it's C after all 😄
They use arenas instead, for group allocations
Cool
The thing that RAII does is that it frees resources once they're out of scope
It's basically what you're used to with Rust
Surely they have some resources that do need deallocation/freeing/whatever
and because it's C, they have to do that manually
that's gotta be quite the pain, I imagine
The argument goes that when you use arenas and allocate things in groups, lifetimes and resource management become trivial
RAII is very useful for abstraction imo, so much less to think about, because you can just trust it all gets dtored/freed/whatever
Can you give me an example?
🙄
That way I can contrast it with an arena equivalent
yes, this is why I like my tree structures
Tree structures are just nodes referencing each other in the same arena in their paradigm
arenas don't avoid needing to free tho
Yeah, you just arena.free_all() and you don't have to worry about freeing nodes since everything gets freed
It's also just writing to one pointer
no, if the nodes own any resource, e.g. a file handle, you can't just free this node
you need to let this node know that it needs to relinquish its resources
You're still thinking in RAII
and then you can free it
You don't have objects that just own resources in this paradigm
Resource management is done differently
exactly, that's a guarantee, that the node has to give you.
if the node doesn't give this guarantee, you have a leak
i hate to break this up but this has moved far away from wooting related dev stuff to just general discussions about languages
ah shit that's true
it do be like that sometimes tho
At this point I'll just say you can ask them how they do it on their server and I'll stop talking about this 
I guess #🔌│tech would've been more appropriate
or something
yes
tech is the best for very general discussions like this that just relate to well tech
people are already having a conversation in there 🙂
Honestly, I'm kinda impressed wooting's analogue input is so consistent
some of these I'm trying have some weird input issues where sometimes they just report as 0.2mm down
or don't report all the way down to 4mm instead stopping at like 3.8
I haven't even touched the analog sdk or anything that uses it other than the built-in effects and gamepad lol

I need to add support for more analogue keyboard vendors
Really feels like a pointless battle to fight to begin with at this point
but maybe these things just need time
can you use the rgb sdk and analog sdk at the same time from the same process? like can I read analog state and send rgb updates? If I can I could use the analog sdk to read the fn key
yes
Another one for the pile
Despite the inaccuracies with some of the keys, tho, I love the clickyness, reminds me of the original Wooting Two 
can i somehow do an profile to main so when i start my pc is autoselects this one profile?
Not the right place to ask this but make sure you've got the profile you want to start with at the top
It'll always start with the first one
ah thank you
/** @brief Reset all colors on keyboard to the original colors.
This function will restore all the colours to the colours that were originally
on the keyboard.
@ingroup API
@returns
Return true (1) if the keyboard is reset
*/
WOOTINGRGBSDK_API bool wooting_rgb_reset_rgb(void);
/** @brief Reset all colors on keyboard to the original colors.
This function will restore all the colours to the colours that were originally
on the keyboard and closes the keyboard handle. This function should always be
called when you close the application.
@ingroup API
@returns
Return true (1) if the keyboard is reset
*/
WOOTINGRGBSDK_API bool wooting_rgb_close(void);
WOOTINGRGBSDK_API bool wooting_rgb_reset(void);
What's going on with this undocumented function?
Given the way it's spaced, I'd say it's an alias
Quick look at the source confirms that
Hello, Can I try to add wooting SDK to my own pcb and try to make it work with wootility?
Uhh, no, the Wootility is exclusively for Wooting keyboards.
The most you could do as a keyboard vendor is provide a plugin for the Wooting Analog SDK so any applications using it can also be used with your keyboard, similar to what I did here.
This strategy kinda worked, now I have customers reporting instances of digital input and asking for them to use analogue input, instead. 😄
Only downside: More work for me. 
Which is funny because controller users never noticed or cared. I think with an analogue keyboard, tho, you expect far more of an impact because every. single. input. is analogue.
Weird.
Why weird?
You can have that be exported in the library itself without exposing it in the headers. It seems like something was renamed.
I imagine it was done like that to not break any existing code, whatever that might be
or they just wanted to provide this alias 😄
Tachyon mode optimizes your keyboard for input speed. When enabled, every keypress responds as fast as possible. The RGB effects are disabled and the brightness is soft capped for an optimal result. Analog stability might be affected.
Why don't they just use smt like embassy, to priotize input speed all the time?
and maintain polling rate etc.?
embassy?
rust crate
I don't see how using Rust on the firmware would help anything in regards to speed
They very very likely use C for the firmware 😄
Ig, I was under the impression that tachyon mode limited rgb to maintain polling rate etc.
and was wondering why they don't just do that by default?
Wooting will not tell you their trade secrets obviously
obviously, just taking a guess ig as to what goes on with tachyon mode lol
At least part of tachyon mode, tho, is that the keyboard/firmware does less non-input stuff
So, RGB effects would obviously be wasting CPU cycles on "irrlevant" stuff, hence it gets disabled
That's kind of what i was talking about with embassy, you could have the tasks like input stuff be above everything else to priortize that
Reallistically, will you notice 1-2ms of latency? Absolutely not. 😄
and help the cpu cycles
lmao
If I had a cent for every time a Rust programmer talked like they knew programming, it would still not make up for the frustration I feel. I should get at least $10 instead of only a cent.
Not like I know much about programming a keyboard's firmware either, but the simple truth is that your CPU either does something or it doesn't
And doing something takes time
However little time that may be
Also just Rust alone is generally considered a slower language (to C and C++, albeit less so) because it does also have some more runtime overhead
Again, realistically, does this time overhead matter?
If you're Wooting and there's people with solenoids and whatnot kind of equipment absolutely nit-picking your product, then maybe it does...
Hmmmmm? lmao I don't really use Rust, much more of a cpp kind of person. But have used embassy in the past for drones
idrc if it matters or not, I was just trying to see what all tachyon mode does, and why they do it in that specific way
You're just doing too much high-level programming
Probably
Try writing a scheduler yourself, it's actually not that hard
The only embedded experience I have is working with drones, etc. So I could be pretty wrong in what I assumed
In my limited experience with Wooting's software design, there's like a 50/50 between "marketing" and "actual usability concerns"
So, I do assume the reason why RGB is limited is obviously for best possible functionality
lol, ig I just saw tachyon mode as a way to avoid buying a better processer
but the reason why this feature exists to begin with... it's just for that kind of person
hence why it's not the default
yea
Oh, the thing i was talking about already has been done before lmao
https://github.com/HaoboGu/rmk?tab=readme-ov-file
lmao discord ;-;
So true
There is something kind of hilarious to me about people releasing a keyboard on Github
Like yeah bro just get this PCB printed and put it in a case 
Anyway, I was familiar with the QMK project (and the related VIA protocol/interface/whatever), and this seems to be kind of a Rust version of QMK?
My disappointment on that front is that QMK is only focused on digital input which is almost too boring to even pay attention to
Like wow just read some I/O pins then report their values over USB 
its a full rewrite with almost no inspiration
just that they named it RMK to get more views
because theres ZMK a rewrite of it with bluetooth support imo a propietary 2.4ghz is much better than BLE support
lol QMK does have HE support now
Well at least they should, if keychron would stop violating gpl 3.0 ;-;
Yeah... that's the part that I'm disappointed about.
I'm a disappointed owner of a Keychron Q1 HE
Honestly, Drunkdeer keyboards are much better and they're not violating GPL 😄
but, still, no open-source firmware for analogue keyboards...
I was genuinely about to buy one, but I looked at it and was like huh???? Where do the source code be
I really wanted a knob on my keyboard :(
lmao its the only reason i didn't buy a zoom75
i got the QMK devs to harass them for it
and now they say they'll give it in october
but like why october? why not now????
what changes in october lmao
I think they're embarrased by how bad their code is
Like thats not how GPL works my friend
Well, what are laws if not friendly notes? 😄
If the QMK folks aren't gonna sue before September...
Idk why they don't send cease and desist, theyre like its a cat and dog chase if we have to do it with everyone
IMO do it with at least keychron ;-;
like sure qwertykeys will just avoid them etc.
but keychron? you can really get a lot of their customers to go away by being vocal about it
Why is there a 'T' in the keychron icon tho
all the random programs that implement scd for free arek inda funny
Not least because they ship 300 MB executables and think it's okay
what'd they do to you?
lmao why is it 300mb?
because they think .NET 6 is greater than .NET 4.5
(now they have to ship the entire runtime because it's not shipped with the OS)
"don't envy" means they're in a bad position
like everyone just wants to have the snap tap
but obviously filthy digital keyboard users will only be able to get a nullbind
which, from what I hear, is decent enough
but not like there weren't already scripts for this like 20 years ago
except now everyone feels like because the cheat is on the hardware it's suddenly okay
isnt snap tap a purely digital feature?
not really?
They already have SOCD implemented
it's just not out in the main thing yet
last input priority socd handling doesn't really require analog input
the way razer does it, they don't even use rapid trigger to their advantage
because razer and wooting did it, its no longer scripting
at that point it's just adjustable actuation point last input priority socd handling
that's a mouthful lol
rappy snappy is analog specific but it's much less noticeable from what i read here
well, I think what razer did is slightly more complex than last input priority
is it?
in what way?
but yeah, you are right, in principle you can do this SOCD resolution digitally
i might be misunderstanding what they did so I'm genuinely asking
Who am I to reveal Razer's trade secrets now? (I just sniffed the HID traffic a bit, lol.)
https://github.com/cafali/SnapKey
this sounds right up your alley lol

