This is Project Wingman mission 01 Black Flag played on a Linux PC with Proton Experimental, OpenTrack with the Neuralnet Tracker plugin and my DIY HOTAS / rudder system based on Arduino Pro Micros replacing the original electronics in my Thrustmaster FLCS/Cougar gear:

Pick your poison: https://makertube.net/w/8MyoVSzDfwMuQR6bCqtbie / https://www.youtube.com/watch?v=dq0sihlgW_Y

I got Project Wingman on a sale months ago and I finally gave it a try. As an Ace Combat player I felt right at home. My initial experiment was with the XR glasses and woah that feels good in 3D and all but today I remembered that old Plasma TV in the basement. Got it second hand a year ago for dead cheap. Today I brought it upstairs to try it with the ViperPit and now I’m not sure what’s more awesome.

Well, that is if I feel like burning ~470W on top for that thing but hey this is for very specific gaming sessions only anyway 🤷

Guess I’ll spend more time in the ViperPit again 😀

I Can Spot AI Writing Instantly — Here’s How You Can Too by Evan Edinger (YouTube)
How can you tell if something is written by AI?

Re: https://www.youtube.com/watch?v=9Ch4a6ffPZY

I really lost it when YT provided me with an AI summary of this video ticking all the boxes 🤣 Anyway, what others mentioned before: As a non native speaker I feel cooked. I’m already constantly pivoting between English, American and Aussie (that’s my 3 points as we were taught in school btw). Mostly _phrases_ picked up here and there especially from movies but lately also from AI because – (ndash :D) let’s face it: We see it everywhere so it slowly gets adopted to the own lingo assuming this is how people talk nowadays. Kinda similar to the jargon of the youth that always sports their own lingo as well. Anyway, IMHO the more important thing is not really being able to detect AI but being able to understand if there is a human behind a comment, trying to bring a point along, or simply a gorram bot tasked with influencing/advertising.

AWS deleted my 10-year account and all data without warning by Abdelkader Boudih (Seuros Blog)
After 10 years as an AWS customer and open-source contributor, they deleted my account and all data with zero warning. Here's how AWS's 'verification' process became a digital execution, and why you should never trust cloud providers with your only copy of anything.

This reads like a horror show and sounds like a worst of the worst case scenario. Tried to avoid cloud like Covid before thanks to a deep rooted distrust against big corporations, that can and will terminate accounts on a whim. This report is fuel to my trust issues but it’s far too easy to just yell “self-host” now. The admin tax is just too real and it sounds like you did everything properly. Thanks for this epic write-up Abdelkader and while Ruby isn’t my wheelhouse I love that you don’t let other devs bleed for the disgraceful treatment you experience. Best wishes for you and your future projects and keep speaking up!

RE: https://www.seuros.com/blog/aws-deleted-my-10-year-account-without-warning/

Enforcing a touchscreen mapping in GNOME (who-t.blogspot.com)
Touchscreens are quite prevalent by now but one of the not-so-hidden secrets is that they're actually two devices: the monitor and the ac...

Hell yes, https://who-t.blogspot.com/2024/03/enforcing-touchscreen-mapping-in-gnome.html just solved my problem to limit a to a single display in . While it is detected just fine it’s input was all over the place of my 4 displays when that should only work for a single display. Apparently has something in it’s settings where this can be easily configured. Gnome does not [yet?] have such an option in settings.

There is however a way to enforce the touchscreen mapping in Gnome too!

The real manufacturer for the controller of my new display here is still a mystery to me. Snippet from my $HOME/.config/monitors.xml is as follows:

<monitorspec>
<connector>HDMI-2</connector>
<vendor>RTK</vendor>
<product>0x2555</product>
<serial>0x20230705</serial>
</monitorspec>

The touchscreen comes back as an ILITEK-TP though and according to lsusb is it connected as ID 222a:0001 ILI Technology Corp. Multi-Touch Screen.

Armed with that knowledge I can limit it’s input with gsettings:

gsettings set org.gnome.desktop.peripherals.touchscreen:/org/gnome/desktop/peripherals/touchscreens/222a:0001/ output "['RTK', '0x2555', '0x20230705']"

Works like a charm!

Modular Flight Simulator Panels and Button Boxes - DigitalJoshua - Joshua Marius by joshuamariusjoshuamarius (digitaljoshua.com)
This video shows you how to build modular Button Boxes or Flight Simulator Panels, without the need of 3D Printers or extra hardware.

🔖 https://www.digitaljoshua.com/modular-flight-simulator-panels-and-button-boxes/

Not often I’m mind blown by what some people come up with to scratch their itch. Swapping panels easily thanks to cable management kits is a great and cheap idea.

Quick demo time: I got a touch display 17.3″ that will replace my rather old one in my VF-1 inspired cockpit panel.

Pick your poison: https://www.youtube.com/watch?v=KX4LsyqYPCA / https://makertube.net/w/nCopvNbkvkwR9XcG5QPQ3i

Mostly because of the bad viewing angle. I’m not a huge fan of touch but sometimes it is really useful and if I already spend money why not go the extra mile 🤓

fso-scripts/SpeedrunTimer/data/tables/speedrun-timer-sct.tbm at master · FSO-Scripters/fso-scripts by FSO-Scripters (GitHub)
The primary collection of Lua scripts, custom SEXPs, and custom AI for FSO - FSO-Scripters/fso-scripts

🔖 https://github.com/FSO-Scripters/fso-scripts/blob/master/SpeedrunTimer/data/tables/speedrun-timer-sct.tbm

Going to investigate – apparently FSO can use fifo pipes too and this example may help me get ship telemetry going for my .

I gave in and changed my event forwarding method in node-red for the Elite Dangerous Journal. This file is updated on various in-game events but in a way that makes it difficult to get new events only since last update. Another problem is that it’s not really a valid JSON file because it has one JSON per line but it’s not a valid JSON array. This is why it has to be parsed line by line and mashed together by event type (name) again to get the latest data for each event type per dump. Each event has it’s own timestamp by set by the game. The latest timestamp is now saved on the special flow const so node-red keeps the value in the “global” memory of the current flow:

msg.payload.event = "Journal";

let newJournalTimestamp = flow.lastJournalTimestamp;

Object.keys(msg.payload).forEach((key) => {
  if (msg.payload[key].timestamp) {
    const keyTimestamp = new Date(msg.payload[key].timestamp).getTime();

    if (!flow.lastJournalTimestamp || flow.lastJournalTimestamp < keyTimestamp) {
      // this entry is new - keep it. MULTIPLE events may have the
      //  same timestamp so wait with reassigning so we don't skip
      //  em or get the latest a 2nd time if nothing else changes.

      // update the next latest timestamp if this is newer
      if(!newJournalTimestamp || newJournalTimestamp < keyTimestamp) {
        newJournalTimestamp = keyTimestamp;
      }
    } else {
      // lastJournalTimestamp is newer, skip this
      msg.payload[key] = null;
    }
  }
});

// make sure this is a valid date for the next time
flow.lastJournalTimestamp = newJournalTimestamp || new Date().getTime();

// remove all nulled events from the payload
msg.payload = Object.fromEntries(
  Object.entries(msg.payload).filter(([_, p]) => p !== null)
);

msg.payload.timestamp = new Date(flow.lastJournalTimestamp);

return { payload: msg.payload };

So I do now keep track of the last read timestamp and reject every event that is older than the last read keeping the Journal dump smaller. This way I don’t have to try to keep track of the “latest” event to drag data from. Refuelling e.g. can happen from whopping 4 (or more) different events and it’s painful to compare all and check which one is the latest to keep track of the real current fuel levels for each tank.

Downside is I won’t get a full set of data for the current session any more if I have to reload my HUD app. This could be mitigated by using MQTT though where I could simply persist each event topic. That is already implemented and I can choose between SocketIO or MQTT in my app anyway.

Gna gna. Found out why my Ace Combat started to crash. The culprit is dwmapi.dll, which is needed for the UE4SS mod (Cheat Engine), so I can adjust the FOV – because the devs kinda “forgot” to add a gorram FOV slider to the game that I NEED and absolutely REQUIRE.

Turns out something in there results in an Access Violation on Start with Proton Experimental (and 9). It works fine with Proton 8. I do not remember switching that but that was the solution in the end 😩

This is after I carefully tried lots of stuff like resetting savegame, disable and remove other mods, fiddle with ini files, read miles of debug logs and whatnot.