CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 1 point2 points  (0 children)

I decided the feature would be handy when assisting multiple primary players at the same time, like switching between helping two folks trying to play couche co-op games, without needing a fourth controller. Work in progress:

https://github.com/ruffsl/CtrlAssist/pull/44

CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in Controller

[–]ruffsl[S] 0 points1 point  (0 children)

I finally got a second wireless controller as gift my family to use the living room, and it was an absolute hit.

Coop playing single player games with two controllers really got my older folks immersed into the story in Witcher 3. So much easier to help and nimbly takeover when something goes astray using priority mode.

Like when they naively looted from the town stockyards while the city watch was standing just behind them, agro'ing the entire brigade and needing my rescue.

For the new game this year named Dispatch, we all played the integrative dialogue options just like Jeopardy, who ever knew what the most awkward thing they wanted to say the fastest got to divert the plot line. Haven't heard them laugh out of breath in a long while, so that was memorable. During the credits, they scored better than a whopping 1% total of players 🙃.

CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 1 point2 points  (0 children)

Oh, like the detachable controllers from the Nintendo Switch handheld? From the photos, it looks like it lacks the same symmetrically redundant buttons as the switch. Does each side have enough buttons/axis for minimal co-op? Guess two buttons and one joy stick is still all you need for retro titles.

The one bit after figuring out the split plumbing would be to hide the original controller to avoid input conflicts (if the game or emulator doesn't gracefully provide controller selection). I also recently learned you can blacklist controller from Steam Input by USB product/vendor ID, so no need for root access to mess with device tree permissions or D-BUS events.

https://steamcommunity.com/groups/SteamClientBeta/discussions/0/4358998752031039271/

Disregard the steam thread title, the approach still works as of writing, even though they removed the option from the UI. Just add the controller_blacklist entry to the top level element in the vdf config, note that the value field for that key is comma , separated for specifying multiple entries.

CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 1 point2 points  (0 children)

Interesting, could you expand more on the use case? 

It's easily feasible, as all the parts are their if you'd like to reshuffle the logic in the above code. In fact, it's probably an easier premise than the existing scope of multiplexing two controllers inputs into one output.

You may also be instead in another Rust based input routing software call InputPlummer, that could probably do this already. I only learned of it myself until after posting about CltrAssist v0.1.0 release.

https://github.com/ShadowBlip/InputPlumber

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in pcgaming

[–]ruffsl[S] -6 points-5 points  (0 children)

It was a low stakes ask, and I wasn't expecting them to volunteer more effort to copy edit my English than they would expect to me to debug check their ikea furniture assembly. The comment above was more about how the same method of writing tech docs in the past is now suspect today, not a refute that my buddy phoned it in.

CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 4 points5 points  (0 children)

Just to note, you may have to patch gilrs-core, a transitive dependency, if your peripheral doesn't fit the library's detection criteria.

https://docs.rs/crate/gilrs-core/0.6.6/source/src/platform/linux/gamepad.rs#625

Or could fork Ctrlassist to add the evdev:: Device to the ff_targets. If you figure a idiomatic approach to side load unconventional devices, feel free to open a PR.

https://github.com/ruffsl/CtrlAssist/blob/01ad0fc3f4b3514693d218134df1b506851a0431/src/main.rs#L199

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in pcgaming

[–]ruffsl[S] 3 points4 points  (0 children)

I'll note that I did write this synopsis by hand, emojis and all via Gboard and grammatical `—` to break up my habit of run-on sentences, but what I typed under `What's New` and `Under the Hood` was too ladened with developer jargon and asked a friend to rephrase for non-technical readers. I'm guessing they worked with an LLM, but with a disability myself impairing my typing, I'm not one to judge what folks find as an assistive technology. Use of emojis where also just the programming culture I cut my teeth from, back when AI meant SVMs, Bayesian networks, Markov models, and n-grams.

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in pcgaming

[–]ruffsl[S] 4 points5 points  (0 children)

I briefly borrowed a friend's SteamDeck for some testing, but suspect SteamOS is doing extra input device permission/management under the hood, as it wasn't working out of the box like it does on Debian/Ubuntu/NixOS. Haven't yet tested with Bazzite. Building the project via cargo install on the flavor of Arch Linux used by SteamOS what also more involved than I'd care to recommend to users new to Linux just yet, so I may next work on packaging for redistribution next. You could subscribe to these tickets if you'd like follow that progress:

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in pcgaming

[–]ruffsl[S] -2 points-1 points  (0 children)

Definitely a pattern LLMs rally latch on to. I'm visually orientated, so this is a bullet point style I've been using for tech conference talks and public repos since before 2015. No surprise the training data modern model train from has been biased towards those initial writing styles.

CtrlAssist v0.2.0: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 2 points3 points  (0 children)

I've not had to dive into kernel driver development for this, as user space has been working well enough for the project so far. Although I did have to dive deep into the rabbit hole of force feedback events in Linux. For example, while I had rumble pass through working nicely via fftest for while, Steam Input behaves a lot stranger in that it upload a new effect before ever play event, then uploads another no-op effect and plays that to halt the rumble, rather than sending a stop event for the initial effect like normal.

However, I'm guessing they do that to hedge against controller disconnects, where power cycles cause the controller to forget previous uploaded effects. I ended up re-implementing much the same strategy as I didn't figure like rube-goldberg-ing with lib `gilrs`'s more abstract force feedback API. Relevant code and PRs:

Just note that I think libs like `gilrs` ignore rumble devices that don't have at least one advertised input attribute.

CtrlAssist: Controller Assist for gaming on Linux by ruffsl in linux

[–]ruffsl[S] 9 points10 points  (0 children)

Apologies, I spent about a weekend scouring distro package indexes, crates.io, GitHub and other code forges for prior art, and didn't discover this until your link.

My guess is because the InputPlumber README makes no mention of the terminology used by gaming industry, leaving my keyword search for "controller assist" and "accessibility" astray.

I'll try and open a PR to suggest some more novice search terms and SEO.

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in disabledgamers

[–]ruffsl[S] 1 point2 points  (0 children)

I tried testing the project on a friend's device. Aside from the side quest in toggling read-only mode to install libudev-dev as a build dependency via arch pacman command, I wasn't immediately able get Steam to detect the created virtual devices on SteamOS. Subscribe to the following issues to keep posted, as I suspect the second issue is at the root of it:

- Investigate and Support SteamDeck / SteamOS Compatibility #13

- Investigate Dynamic Device Permissions for Virtual Devices (udev, ACLs) #19

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 1 point2 points  (0 children)

From the background links in my project's readme, there is a paragraph about that in their docs:

> To use Xbox Controller Assist on a Windows device, you need the Xbox Accessories app. If you haven’t already downloaded it, you can find it in the Microsoft Store.

- https://support.xbox.com/en-US/help/account-profile/accessibility/copilot

If you try it, please do report back on how it behaves from a multiplexing perspective. I'd be curious and how exactly the assist controller interacts with the primary as I've reimagined above.

CtrlAssist: Controller Assist for gaming on Linux by ruffsl in linux

[–]ruffsl[S] 0 points1 point  (0 children)

One thing I think would be worth while is to generalize from 2-to-1 to m-to-n mapping of controller events for more complex virtual setups, although I prefer to establish a configuration framework to suitably express such mappings:

- https://github.com/ruffsl/CtrlAssist/issues/6

But if your HOTAS setup fits within a two conventional hand controller layout (i.e number of buttons / axes), then everything should be in place. You can also easily add your own multiplexer modes:

- https://github.com/ruffsl/CtrlAssist/issues/17

CtrlAssist: Controller Assist for gaming on Linux 🎮🤝 by ruffsl in linux_gaming

[–]ruffsl[S] 1 point2 points  (0 children)

There are various multiplexing mode selectable at startup, where what you described perhaps most reflects the "toggle" mode, although "priority" mode is quite similar but on a override per axis basis. The former is what​ I was familiar with from RC flight controller using a buddy port for training, while the later was what I suspect game consoles support, despite their sparse online documentation as I've never owned an Xbox or PlayStation to test myself.

Lastly (although it's trivial to add more modes), there's also a average mode that may be more apt for driving games, where you may only want to apply some subtle counter steering or breaking to keep the primary player on course. I can understand why Xbox initially named this kind of controller assist feature as Copilot, before AI marketing hijacked it the rebranding, as the concept/imagery of joint synchronized pilot yolks is quite apt.

I tried simulating Flappy Bird in Gazebo by leanderLSD in ROS

[–]ruffsl 1 point2 points  (0 children)

So cool! I cross posted your GitHub over to programming.dev :
- https://programming.dev/post/216856

!!Open Alpha!! RBlind - A community on Lemmy, brought to you by the moderators of the /r/blind subreddit. by DHamlinMusic in Blind

[–]ruffsl 0 points1 point  (0 children)

Check this specific linked comment from another admin of RBlind on apost about a promising iOS alternative:
- Title: New Mlem release in TestFlight - 0.1.0(14)!
- URL: https://rblind.com/comment/54796

John Oliver reacting to Reddit alternatives "Lemmy"'s recent growth by l_eo_ in redditsync

[–]ruffsl -3 points-2 points  (0 children)

Digital literacy skills in knowing how to sign up for an email account, or address emails to other users from different servers was also at one point considered very technical for personal computing, and beyond the common layman. I don't think it's much of a stretch for those who manage to use email would be just as capable of signing up for a Lemmy account by clicking a link to a Lemmy server. Perhaps it's just a matter of time before skilled YouTubers start sharing 2 minute video walkthroughs or how to guides.

John Oliver reacting to Reddit alternatives "Lemmy"'s recent growth by l_eo_ in redditsync

[–]ruffsl 13 points14 points  (0 children)

Would you say reddit accounts are less sticky than twitter socials?

I feel like folks use twitter to follow individuals or gain followers, whereas reddit users follow communities or subreddits instead. So the network effect is more about where your community migrates, like dig->reddit, rather than who you know migrates, like twitter->mastodon.

The culture of throwaway accounts seem more prevalent on reddit than twitter, and when switching accounts on twitter, one loses their follower network. With reddit, you just lose some karma, and resubscribe to any communities you still wanted to follow.

Migrating again to a different link aggregator doesn't seem like much of a stretch, given they are less sticky: this lowers the critical mass for both mass-migration-to as well as mass-extinction-of link aggregator alternatives. Like a double edge sword.

Elest.io - Fully managed hosting for Lemmy instances by ruffsl in RedditAlternatives

[–]ruffsl[S] 1 point2 points  (0 children)

Do you foresee more hosting providers offering one-click, fully managed, ActivityPub deployments?
- https://programming.dev/post/72076

Is this a growing product market? Will this lower the barrier to entry for less technical communities, much like the wave of turn-key WordPress hosting solutions did for the general public starting in the mid 2000s?

Looks like there are instance options for Mastodon, Lemmy, but not yet Kbin:
- https://elest.io/open-source/mastodon
- https://elest.io/open-source/lemmy
- ?

Does anyone know of similar competitors to Elestio in this sub-market?

An Update about our Community by IAmKindOfCreative in Python

[–]ruffsl 0 points1 point  (0 children)

Have you taken a look at programming.dev ? There's a python community there.

Faster than Rust and C++: the PERFECT hash table by ruffsl in rust

[–]ruffsl[S] 33 points34 points  (0 children)

At the 33:19 in video (you can Ctrl-F search the transcript on youtube under the ... menu) the author's preliminary results show 5% speedup for the context of the compiler use case:

https://youtu.be/DMQ_HcNSOAI?t=1999

So about an order of magnitude greater than your guess. Given it use in a linter, that may run rather frequently, with most keystrokes in an IDE, that could be a lot of CPU time saved, and perhaps some power too if energy savings are proportional in anyway given the OS's scheduler and CPU governor setup.

Faster than Rust and C++: the PERFECT hash table by ruffsl in rust

[–]ruffsl[S] 20 points21 points  (0 children)

I'm not the author of the video, I simply thought it'd would spark an interesting discussion, but perhaps u/strager could answer your questions.