Code_JS
What is now active spacenavd running in user mode Socket: ~/run/spnav.sock FreeCAD: /usr/bin/freecad (APT build) Linked against system libspnav Snap/AppImage removed
ok it is gone. now can we reinstall the good one? Yes. Install the repository build (the one that worked with spacenavd). 1οΈβ£ Install FreeCAD (APT version) sudo apt update sudo apt install freecad 2οΈβ£ Verify it is the APT binary which freecad Expected: /usr/bin/freecad 3οΈβ£ Ensure spacenavd is running (user mode) pgrep -a spacenavd ls -l /run/spnav.sock If not running: mkdir -p ~/run spaceavd -d & disown 4οΈβ£ Launch FreeCAD using your socke SPNAV_SOCKET=$HOME/run/spnav.sockfreecad If SpaceMouse works, make it permanent: Add this line to ~/.profile: export SPNAVSOCKET=$HOME/run/spnav.sock Log out / log in. You will now have: System FreeCAD (APT) User-mode spacenavd No Snap version interfering what happened what wasthe difference? You had three different bilds Source Binary Path Linkd to libspnav? SpaceMouse Snap 1.0.2 /snap/bin/frecad β No β No AppImage 1.0.2 (conda) sandalone bundle β No β No APT 0.20.2 /usr/bin/freead β
Yes β
Yes Why the Snap / AppImagefailed 1οΈβ£ Snap sandbox isolation Snap apps cannot access: /dev/input/event* custom UNIX sockets (/run/spnav.sock) spacenavd socket was invisible to Snap. Result: no daemon connection. 2οΈβ£ Conda AppImage build Built against its own bundled libraries. Did not include or link libspnav. grep inside the AppImage showed no spnav symbols. Result: FreeCAD never attempted to connect. 3οΈβ£ APT version worked because: It is compiled against system libspnav. It respects SPNAV_SOCKET. It can talk to your user-mode spacenavd. No sandbox isolation. Root Cause Summary SpaceMouse support requires: FreeCAD β libspnav β spacenad β /dev/input/eventX Snap/AppImage broke that chain. APT preserved it. If you want 1.0.x with SpaceMouse You would need: A non-Snap, non-conda build Compiled with libspnav enabled Installed from source or proper PPA What you observed was not random β it was packaging differences.
prediction gradients at different levels for singular weekly moves.
https://pragmatic-code.hashnode.dev/why-you-probably-dont-need-a-rest-api
https://jamesrmeyer.com/otherstuff/easy-footnotes-for-web-pages
https://shkspr.mobi/blog/2025/09/drunk-css/
https://wok.oblomov.eu/tecnologia/google-killing-open-web-2/
https://lwn.net/Articles/631631/
https://developer.chrome.com/blog/entry-exit-animations
https://bernsteinbear.com/isdt/
https://nerdy.dev/open-and-close-transitions-for-the-details-element
https://zoo.js.org/?arch=amd64
https://news.ycombinator.com/item?id=46416945
Using Hinge as a Command & Control Server https://mattwie.se/hinge-command-control-c2
https://wet-boew.github.io/v4.0-ci/demos/footnotes/footnotes-en.html
https://arpitbhayani.me/blogs/clock-sync-nightmare/
https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API
https://news.ycombinator.com/item?id=46254794
https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback
https://pomb.us/build-your-own-react/
A popover on top of a modal dialog should be interactable https://github.com/whatwg/html/issues/9936
web vitals extension arr.at(-1) deep copy = immutiable = JSON.parse(JSON.stringify(obj)) == structuredClone(obj) import maps alllow you to define a bunch of js modules at once (front end) view transition api animation timeline - experimental
import json from './foo.json' assert { type: 'json' };
top level await
let importModule; if (shouldImport) { importModule = await import('./module.mjs'); }
export * as am from 'another-module'
stringVar.matchAll(/test([\w]+?),/g); or replaceAll('/', '|') > regex
phoneNumbers.replace(/\d{3}-\d{3}-\d{4}/g, (_, p1, p2, p3) => {return
${p1}-${p2}-${p3}; });const result = func?.();
const item = array?.[0];
arr.at(-1) === arr[arr.length - 1)
arr.flat(2)
x2 ??= getNewValue(); - assign iff null or undefined
x2 &&= 'b'; - assign iff βtruthyβ
x2 ||= getNewValue(); - Assign iff false
tagged template literals: formatNumbers(strings, number){ return strings[0] + number.toFixed(2) + strings[1]; } -- console.log(formatNumbers
This is the value: ${0}, it's important.); // This is the value: 0.00, it's important.
cosnt grouped by = Object.groupBy([{},{},{}], fn) toSorted -> keeps initial arr immutable
function fn(){ console.log(arguements) }Theargumentsobject contains all the parameters passed to the function but is not available in arrow functions....- In arrow functions, 'this' does not have its own binding but instead retains the value of this from the enclosing lexical context.
- object destructuring: assign to variables values extracted from a nested object const x=today.min and const y=today.max === const {today: {min: x,max: y } } = {today: { min: 10, max: 30} }
- url.searchParams.append(key, params[key]),
document.currentScript window.top data.color ||= "#745DDE";
const screenSizeQuery = window.matchMedia("(min-width: 550px)"); screenSizeQuery.addEventListener("change", handleScreenSizeChange);
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e => { localStorage.setItem("theme", e.matches ? "dark" : "light")
Click here to copy