Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

Sortie VGA sur un PIC18 : quand l'optimisation hardware devient un art

Par : Korben
26 mars 2026 à 13:11

Générer un signal VGA avec un microcontrôleur 8 bits PIC18 est un défi technique de taille. Ce projet Hackaday montre comment détourner les ressources limitées d'un processeur rudimentaire pour produire une image stable. Une petite plongée dans le bit-banging pur et dur.

Le défi du timing analogique

Le standard VGA impose une rigueur chronométrique absolue à celui qui s'y frotte. Pour obtenir une image stable, typiquement en 640x480 à 60 Hz, le contrôleur doit générer des signaux de synchronisation horizontale (H-sync) et verticale (V-sync) avec une précision de l'ordre de la microseconde. Sur une architecture PIC18 cadencée à quelques dizaines de mégahertz, chaque cycle d'instruction est précieux. L'astuce réside ici dans l'utilisation intelligente des timers internes et des interruptions prioritaires pour maintenir cette cadence sans aucune dérive temporelle, sous peine de voir l'image se désynchroniser immédiatement.

Un DAC rudimentaire pour les couleurs

Côté matériel, la solution retenue est ultra simple (si on peut dire). Pour transformer les sorties numériques binaires du microcontrôleur en signaux analogiques exploitables par un moniteur CRT ou LCD, l'auteur a implémenté une échelle de résistances, aussi appelée DAC R-2R. Ce montage passif permet de convertir des combinaisons de bits en niveaux de tension spécifiques pour les canaux Rouge, Vert et Bleu. C'est une approche classique en électronique "low-cost" qui permet d'obtenir une palette de couleurs certes limitée, mais parfaitement fonctionnelle pour de l'affichage de texte ou de graphismes simples.

L'art du bit-banging et des périphériques détournés

L'envoi des données de pixels vers l'écran nécessite une bande passante que le CPU seul peinerait à fournir en mode pur "bit-banging". Pour optimiser le processus, le développeur détourne souvent le module SPI ou le port série synchrone (MSSP) du PIC pour envoyer les octets de données à la vitesse de l'horloge système. Cela permet de déléguer une partie de la charge de travail au hardware interne et de libérer quelques cycles processeur pour gérer la logique d'affichage. C'est un équilibre précaire où la moindre latence logicielle se traduit par des pixels décalés ou des lignes de travers. Chaud donc.

Ce projet illustre bien l'adage selon lequel la contrainte stimule la créativité. Là où nous utilisons aujourd'hui des processeurs multi-cœurs pour la moindre interface, ce hack prouve qu'un vieux microcontrôleur 8 bits peut encore faire le job. C’est une leçon d'architecture informatique qui permet de comprendre concrètement comment l'information devient image. C'est aussi une forme de résistance face à la démesure logicielle actuelle.

Source : Hackaday

This mobile controller is "opulent" for Xbox Cloud Gaming — top-class controls, feedback, and design for a fair price

The Razer Kishi Ultra is a phenomenal controller that elevates Xbox Cloud Gaming to new heights of fun while being comfy to use, and its steep price has been cut by 55% to make it more accessible.

Razer Kishi Ultra

The Razer Kishi Ultra in action.

Intel's impressive Core Ultra 5 250KF Plus is now available in limited quantities — Don't miss an "incredible deal for content creators who moonlight as gamers"

Intel's eagerly anticipated Core Ultra 250KF Plus desktop CPU, the most affordable of the bunch, is now available to buy in limited quantities. It's a perfect option for value-conscious gamers and creators, and I don't expect stock to last long.

Intel Core Ultra 200S Plus processor reverse side showing LGA 1851 contacts

A look at the new Core Ultra 200S Plus desktop processor held between two fingers.

Our favorite premium Xbox controller has gotten its best discount yet for the Amazon Spring Sale — with 1000Hz polling, you will never lose again

The durable, responsive, and ergonomic Razer Wolverine V3 Pro Xbox controller is one of many gaming accessories that have been massively price-chopped for the Amazon Spring Sale.

AI-Generated image of the Razer Wolverine V3 Pro controller visualized

AI-Generated image of the Razer Wolverine V3 Pro

I'm no competitive gamer, but this new top-tier Razer mouse makes me feel like one — the latest version of the industry's favorite is here

Razer's Viper V4 Pro gaming mouse improves upon its predecessor, though it's still very expensive. Even so, it's a top-tier option for competitive players.

The Razer Viper V4 Pro

The Razer Viper V4 Pro is a refresh of its popular predecessor, and improves upon it with a variety of elevated features and functionalities.

Intel's vPro platform expands to Core Ultra Series 3 processors to keep your next work laptop safe — with local AI and efficiency

Intel's latest vPro upgrades on Core Ultra mean enterprise‑ready laptops with the efficiency of Panther Lake, and a more secure PC for your job.

Intel vPro with Core Ultra Series 3 samples on display

Intel's new vPro platform wants to save your battery and your data.

Time to ditch my old gaming headset for one of Razer's best: An "industry-leading mic, longer-lasting battery life," and more

The Razer BlackShark V2 Pro is an outstanding gaming headset for PC we'd recommend any time it's on sale, and that time is now, as it's currently 36% off for a limited time.

Image of the Razer BlackShark V2 Pro (2023).

<p>The Razer BlackShark V2 Pro (2023) in front of its retail box, along with the detachable mic and two included, braided cables.</p>

Save desk space while saving the World of Warcraft with this MMO mouse and gaming keyboard — both nearly 40% off

Two of Razer's best mid-range PC gaming accessories are on sale for Amazon's Spring Sale, just in time for World of Warcraft: Midnight's first Season.

AI-Generated background of elves using a Razer keyboard and mouse as weapons against the Void, visualized

Fight back Xal'atath's armies with the power of Razer technology

Quand 10 000 bots volent 8 millions aux artistes sur Spotify

Par : Korben
25 mars 2026 à 15:38

Un mec de 54 ans vient de plaider coupable pour avoir siphonné 8 millions de dollars aux artistes musicaux en utilisant 10 000 bots et de la musique générée par IA. Michael Smith, résident de Cornelius en Caroline du Nord, a monté pendant des années une ferme à streams qui écoutait en boucle des centaines de milliers de fausses chansons sur Spotify et Apple Music.

Le truc, c'est que ces plateformes ne paient pas un tarif fixe par écoute. Elles fonctionnent avec un pot commun mensuel qu'elles redistribuent proportionnellement au nombre de streams. Du coup, chaque fausse écoute générée par les bots de Smith grignotait directement la part des vrais artistes. En gros, c'est pas Spotify qui se faisait voler, c'est les musiciens qui galèrent déjà à vivre de leur art !

Pour le contenu, Smith avait en fait trouvé un deal avec le CEO d'une boîte de musique IA qui lui pondait des milliers de morceaux par semaine. Les fichiers WAV arrivaient sous forme de chaînes aléatoires de lettres et de chiffres, et il les renommait avec des noms d'artistes fictifs du genre "Calorie Event", "Calms Scorching" ou encore "Calypso Xored" (on sent le générateur de noms random). Les titres, pareil... "Zygotes", "Zyme Bedewing"... si vous tombez là-dessus dans votre discover, y'a de quoi tiquer quand même mais bon...

Et ce problème, ça pose une question que Spotify connaît bien : comment distinguer les vrais streams des faux quand les bots sont suffisamment dispersés sur des milliers de morceaux ? Smith avait justement calibré ses 10 000 bots pour ne pas déclencher les alertes anti-fraude, en répartissant les écoutes sur un catalogue énorme plutôt que de matraquer un seul titre. Pas con.

Mais le bonhomme s'est quand même fait choper. Il a accepté de rendre la totalité des 8 091 843 dollars et risque jusqu'à 5 ans de prison lors de son procès qui aura lieu le 29 juillet prochain. Pas sûr que le ratio risque/récompense en valait la chandelle, en fait.

Le problème de fond, c'est que cette affaire n'est probablement que la partie émergée de l'iceberg. Et je suis sûr que y'en a en France qui font la même... bah sachez que c'est pas cool et que vous risquez d'avoir de GROS ennuis... Avec les outils de génération musicale par IA qui se démocratisent, n'importe qui peut inonder les plateformes de contenu synthétique pour gratter des royalties.

Et tant que le modèle de rémunération repose sur un pot commun plutôt que sur un paiement direct par utilisateur, il sera vulnérable. Encore une fois, les vrais perdants, c'est pas les plateformes (elles prennent leur commission quoi qu'il arrive), mais ce sont les artistes indépendants qui voient leur part du gâteau fondre à chaque bot supplémentaire.

Moche...

Bref, la prochaine fois que votre playlist de découvertes vous propose un artiste nommé "Calypso Xored" ou un connerie de ce style... méfiance !

Source

Sora ferme - Comment sauvegarder vos vidéos IA avant la coupure

Par : Korben
25 mars 2026 à 14:22

Sora, c’est fini les amis !

Hé oui, cest chacals d'OpenAI ferment leur plateforme de vidéos IA, et franchement, ça me rend un peu triste. À vrai dire, même si c’était que de la vidéo générée à partir de prompts, moi je me marrais bien. C'était fun de regarder le produit de ses prompts mais aussi de regarder les conneries des autres. Les versions québécoises, aïe aïe aïe, c’était quelque chose quand même !

Mais bon, le plus urgent maintenant, c’est de sauvegarder vos vidéos avant que tout disparaisse. OpenAI n’a pas encore communiqué de date précise pour la coupure, juste un vague « on vous dira bientôt ». Du coup, autant ne pas traîner, parce que quand ce genre de service cloud ferme, en général c’est pas 6 mois de préavis qu’on vous file...

Depuis la fuite du modèle jusqu’à aujourd’hui, Sora aura fait parler de lui. Côté raisons, c’est Fidji Simo (la patronne de la division Applications) qui a lâché le morceau : ils éparpillent leurs efforts sur trop d’apps, d’API et de stacks serveur différents, et ça les ralentit. En gros, entre préparer une entrée en bourse pour fin 2026 et cramer du GPU H100 sur des vidéos de chats en IA, le choix est vite fait. L’équipe de recherche Sora, elle, continuera à bosser sur la simulation de mondes 3D... mais pour la robotique. Et le fameux deal à 1 milliard de dollars avec Disney pour des films et séries ? Pouf, magie magie, c'est envolé !!

Faut dire que les chiffres n’étaient pas glorieux non plus. Après un lancement en fanfare fin 2024 (et une app iOS lancée à l’automne 2025 qui avait cartonné dans les charts), les téléchargements sur l’App Store avaient plongé de 32% entre novembre et décembre 2025. La hype, ça dure qu’un temps.

Mais maintenant les gens, on passe aux choses sérieuses !

Sora Backup - le script qui sauve vos vidéos

Je n'avais absolument pas de temps aujourd'hui, mais j'ai quand même taffé pour vous développer un petit script JavaScript qui récupère TOUTES vos vidéos Sora d’un coup, avec les prompts et les métadonnées, et qui vous génère un joli ZIP prêt à archiver. Pas besoin d’installer quoi que ce soit, pas d’extension louche. Vous avez juste besoin d'être connecté à votre profil Sora et d'un navigateur.

Comment ça marche

Allez sur sora.com , connectez-vous à votre compte, puis ouvrez la console JavaScript de votre navigateur (F12 sur Chrome ou Firefox, onglet Console). Ensuite, glissez-déplacez ou collez le script ci-dessous dedans et appuyez sur Entrée.

Le script va automatiquement récupérer votre token d’authentification (pas besoin de le chercher vous-même), puis il va paginer sur votre profil Sora pour récupérer tous vos posts publiés. Pour chaque post, il extrait les vidéos attachées (MP4), les télécharge, et empaquette le tout dans un fichier ZIP directement dans votre navigateur.

Y’a même un fichier manifest.json dans le ZIP qui contient tous vos prompts, les dimensions, les durées, les permalinks, les dates de création... bref, tout ce qu’il faut pour retrouver vos petits. Le ZIP est généré en format STORE (pas compressé, parce que compresser du MP4 ça sert à rien), avec un calcul CRC32 maison et sans aucune librairie externe.

Le script complet

Voici le code à coller dans la console :

// ==========================================================
// SORA BACKUP - Sauvegarde complète vidéos + images + prompts par Korben
// ==========================================================
// Usage : Ouvrir https://sora.com, F12 > Console, coller ce script
// Les fichiers sont téléchargés via le navigateur (dossier Downloads)
// Un fichier manifest.json récapitule tout (prompts, metadata, URLs)
// ==========================================================

(async () => {
 // --- Mini ZIP builder (STORE, pas de lib externe) ---
 const crc32table = new Uint32Array(256);
 for (let i = 0; i < 256; i++) {
 let c = i;
 for (let j = 0; j < 8; j++) c = (c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1);
 crc32table[i] = c;
 }
 function crc32(buf) {
 let c = 0xFFFFFFFF;
 for (let i = 0; i < buf.length; i++) c = crc32table[(c ^ buf[i]) & 0xFF] ^ (c >>> 8);
 return (c ^ 0xFFFFFFFF) >>> 0;
 }
 const zipFiles = []; // {name, data (Uint8Array), crc, size}

 const PAGE_SIZE = 50;
 const DELAY_MS = 1500;
 const manifest = [];
 let totalDownloaded = 0;
 let totalErrors = 0;

 // --- Auth : récupérer le Bearer token ---
 // OPTION 1 : Coller ton token ici (Network tab > Authorization header)
 // OPTION 2 : Laisser vide, le script tentera de le récupérer auto
 let AUTH_TOKEN = '';

 async function getAuthToken() {
 if (AUTH_TOKEN) return AUTH_TOKEN;

 // Auto-detect : endpoint session ChatGPT
 for (const path of ['/api/auth/session', '/backend-api/auth/session']) {
 try {
 const r = await fetch(path, { credentials: 'include' });
 if (r.ok) {
 const json = await r.json();
 if (json.accessToken) {
 AUTH_TOKEN = json.accessToken;
 console.log(' 🔑 Token récupéré automatiquement');
 return AUTH_TOKEN;
 }
 }
 } catch(e) {}
 }

 // Fallback : demander à l'utilisateur
 const input = prompt(
 'Token non trouvé automatiquement.\n\n' +
 'Pour le récupérer :\n' +
 '1. F12 > onglet Réseau\n' +
 '2. Rafraîchis la page\n' +
 '3. Clique sur une requête /backend/...\n' +
 '4. Copie le header Authorization\n\n' +
 'Colle le token ici (Bearer eyJ...):'
 );
 if (input) {
 AUTH_TOKEN = input.replace(/^Bearer\s+/i, '').trim();
 return AUTH_TOKEN;
 }

 console.error(' ❌ Pas de token. Annulation.');
 return null;
 }

 // --- Fetch API avec auth ---
 async function apiFetch(url) {
 const token = await getAuthToken();
 const headers = {};
 if (token) headers['Authorization'] = 'Bearer ' + token;

 // oai-device-id requis par certains endpoints
 const deviceId = localStorage.getItem('oai-did') || '';
 if (deviceId) headers['oai-device-id'] = deviceId;

 const resp = await fetch(url, {
 method: 'GET',
 credentials: 'include',
 headers
 });

 if (!resp.ok) throw new Error(`HTTP ${resp.status} for ${url}`);
 return resp.json();
 }

 // --- Pagination générique ---
 async function fetchAllPages(baseUrl, dataField = 'data', cursorParam = 'after', cursorField = 'last_id') {
 let allItems = [];
 let cursor = '';
 let page = 0;

 while (true) {
 let url = baseUrl;
 if (cursor) url += `&${cursorParam}=${cursor}`;

 console.log(` 📄 Page ${++page} (${allItems.length} items so far)...`);
 const json = await apiFetch(url);

 const items = json[dataField];
 if (!Array.isArray(items) || items.length === 0) break;

 allItems = allItems.concat(items);
 cursor = json[cursorField] || '';

 if (!json.has_more && !cursor) break;
 await sleep(DELAY_MS);
 }

 return allItems;
 }

 // Variante pour les endpoints project_y (cursor-based)
 async function fetchAllPagesCursor(baseUrl) {
 let allItems = [];
 let cursor = '';
 let page = 0;

 while (true) {
 let url = baseUrl;
 if (cursor) url += `&cursor=${cursor}`;

 console.log(` 📄 Page ${++page} (${allItems.length} items so far)...`);
 const json = await apiFetch(url);

 const items = json.items;
 if (!Array.isArray(items) || items.length === 0) break;

 allItems = allItems.concat(items);
 cursor = json.cursor || '';

 if (!cursor) break;
 await sleep(DELAY_MS);
 }

 return allItems;
 }

 function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }

 // --- Extraire URL du média depuis une generation ---
 function getMediaUrl(gen) {
 return gen?.encodings?.source?.path
 || gen?.downloadable_url
 || gen?.url
 || '';
 }

 // --- Extraire le prompt (peut être dans actions, prompt, ou input_text) ---
 function getPrompt(item, gen) {
 // Prompt direct
 if (gen?.prompt) return gen.prompt;
 if (item?.prompt) return item.prompt;
 if (item?.input_text) return item.input_text;
 // Storyboard : les actions sont les descriptions des scènes
 if (item?.actions && typeof item.actions === 'object') {
 return Object.entries(item.actions)
 .sort((a,b) => Number(a[0]) - Number(b[0]))
 .map(([frame, desc]) => `[frame ${frame}] ${desc}`)
 .join(' | ');
 }
 if (gen?.actions && typeof gen.actions === 'object') {
 return Object.entries(gen.actions)
 .sort((a,b) => Number(a[0]) - Number(b[0]))
 .map(([frame, desc]) => `[frame ${frame}] ${desc}`)
 .join(' | ');
 }
 return '';
 }

 // --- Dérouler les items du profil Sora en items plats ---
 function flattenProfileItems(items) {
 const flat = [];
 for (const item of items) {
 const post = item.post || item;
 const attachments = post.attachments || [];
 if (attachments.length === 0) continue;

 for (const att of attachments) {
 const url = att.encodings?.source?.path || att.downloadable_url || att.url || '';
 if (!url) continue;

 flat.push({
 id: post.id || att.generation_id || '',
 generation_id: att.generation_id || '',
 task_id: att.task_id || '',
 title: att.title || post.discovery_phrase || '',
 prompt: post.text || '',
 emoji: post.emoji || '',
 type: att.generation_type || att.kind || '',
 width: att.width || 0,
 height: att.height || 0,
 duration_s: att.duration_s || 0,
 is_public: !!post.posted_to_public,
 created_at: post.posted_at ? new Date(post.posted_at * 1000).toISOString() : '',
 url: url,
 permalink: post.permalink || '',
 username: item.profile?.username || '',
 });
 }
 }
 return flat;
 }

 // --- Sanitize filename ---
 function sanitize(name) {
 return name.replace(/[<>:"\/\\|?*\x00-\x1f]/g, '_').substring(0, 100);
 }

 // --- Ajouter un fichier au ZIP ---
 async function addToZip(url, filename) {
 try {
 const resp = await fetch(url);
 if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
 const buf = await resp.arrayBuffer();
 const data = new Uint8Array(buf);
 zipFiles.push({ name: filename, data, crc: crc32(data), size: data.length });
 totalDownloaded++;
 return true;
 } catch(e) {
 console.warn(` ⚠️ Erreur ${filename}:`, e.message);
 totalErrors++;
 return false;
 }
 }

 // --- Déduire l'extension ---
 function getExt(url, type) {
 if (!url) return type === 'video' ? '.mp4' : '.png';
 const m = url.match(/\.(mp4|webm|mov|png|jpg|jpeg|webp|gif)/i);
 return m ? '.' + m[1].toLowerCase() : (type === 'video' ? '.mp4' : '.png');
 }

 // ==========================================================
 // MAIN
 // ==========================================================
 const origin = window.location.origin;
 console.log('🎬 SORA BACKUP - Démarrage');
 console.log('='.repeat(50));

 // 1. Mes posts Sora (profil)
 console.log('\n📦 1/2 - Récupération de mes posts Sora...');
 let myPosts = [];
 try {
 myPosts = await fetchAllPagesCursor(
 `${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=nf2`
 );
 console.log(`  ${myPosts.length} posts de profil`);
 // Debug premier item
 if (myPosts.length > 0) {
 const first = myPosts[0];
 console.log(' 🔍 Premier item - clés:', Object.keys(first).join(', '));
 console.log(' 🔍 URL:', first.url?.substring(0, 80) || 'none');
 console.log(' 🔍 DL:', first.downloadable_url?.substring(0, 80) || 'none');
 console.log(' 🔍 ENC:', first.encodings?.source?.path?.substring(0, 80) || 'none');
 console.log(' 🔍 GENS:', first.generations?.length || 'none');
 console.log(' 🔍 TITLE:', first.title || 'none');
 }
 } catch(e) {
 console.warn(' ⚠️ profil failed:', e.message);
 }

 // 2. Mes likes sur Sora
 console.log('\n📦 2/2 - Récupération de mes likes Sora...');
 let myLikes = [];
 try {
 myLikes = await fetchAllPagesCursor(
 `${origin}/backend/project_y/profile_feed/me?limit=${PAGE_SIZE}&cut=appearances`
 );
 if (myCameos.length) console.log(`  ${myCameos.length} cameos trouvés`);
 } catch(e) {}

 // --- Dérouler les generations et dédupliquer ---
 console.log('\n🔄 Extraction des vidéos...');
 const rawAll = [...myPosts, ...myLikes];
 const flatItems = flattenProfileItems(rawAll);

 const seen = new Set();
 const allItems = [];
 for (const item of flatItems) {
 if (item.id && seen.has(item.id)) continue;
 // Filtrer : vidéos uniquement
 const isVideo = item.type === 'video_gen' || item.url.includes('/videos/') || item.url.includes('.mp4');
 if (!isVideo) continue;
 if (item.id) seen.add(item.id);
 allItems.push(item);
 }

 console.log(`📊 Total unique: ${allItems.length} vidéos à télécharger`);
 console.log('='.repeat(50));

 // --- Construire le manifest et télécharger ---
 console.log('\n⬇️ Téléchargement en cours...');
 console.log('(Les fichiers arrivent dans ton dossier Downloads)');

 for (let i = 0; i < allItems.length; i++) {
 const meta = allItems[i];
 const url = meta.url;

 if (!url) {
 console.log(` ⏭️ [${i+1}/${allItems.length}] ${meta.id} - pas d'URL, skip`);
 meta.downloaded = false;
 manifest.push(meta);
 continue;
 }

 const type = (meta.task_type === 'image_gen' || url.match(/\.(png|jpg|jpeg|webp|gif)/i)) ? 'image' : 'video';
 const ext = getExt(url, type);
 const nameBase = meta.title
 ? sanitize(meta.title)
 : (meta.prompt ? sanitize(meta.prompt.substring(0, 60)) : meta.id);
 const filename = `sora_${String(i+1).padStart(4,'0')}_${nameBase}${ext}`;

 console.log(` ⬇️ [${i+1}/${allItems.length}] ${filename}`);
 meta.filename = filename;
 meta.downloaded = await addToZip(url, filename);
 manifest.push(meta);

 // Pause entre downloads pour pas surcharger
 if (i < allItems.length - 1) await sleep(800);
 }

 // --- Ajouter le manifest au ZIP ---
 console.log('\n📝 Ajout du manifest au ZIP...');
 const manifestData = new TextEncoder().encode(JSON.stringify(manifest, null, 2));
 zipFiles.push({ name: 'manifest.json', data: manifestData, crc: crc32(manifestData), size: manifestData.length });

 // --- Générer le ZIP (format STORE, pas de compression) ---
 console.log('\n📦 Génération du ZIP...');
 const enc = new TextEncoder();
 const blobParts = [];
 const centralParts = [];
 let offset = 0;

 for (const f of zipFiles) {
 const nameBytes = enc.encode(f.name);
 // Local file header (30 bytes + name)
 const lh = new ArrayBuffer(30);
 const lv = new DataView(lh);
 lv.setUint32(0, 0x04034b50, true);
 lv.setUint16(4, 20, true);
 lv.setUint16(8, 0, true); // STORE
 lv.setUint32(14, f.crc, true);
 lv.setUint32(18, f.size, true);
 lv.setUint32(22, f.size, true);
 lv.setUint16(26, nameBytes.length, true);
 blobParts.push(new Uint8Array(lh), nameBytes, f.data);

 // Central directory entry (46 bytes + name)
 const ch = new ArrayBuffer(46);
 const cv = new DataView(ch);
 cv.setUint32(0, 0x02014b50, true);
 cv.setUint16(4, 20, true);
 cv.setUint16(6, 20, true);
 cv.setUint16(10, 0, true); // STORE
 cv.setUint32(16, f.crc, true);
 cv.setUint32(20, f.size, true);
 cv.setUint32(24, f.size, true);
 cv.setUint16(28, nameBytes.length, true);
 cv.setUint32(42, offset, true);
 centralParts.push(new Uint8Array(ch), nameBytes);

 offset += 30 + nameBytes.length + f.size;
 }

 const centralSize = centralParts.reduce((s, p) => s + p.length, 0);
 const eocd = new ArrayBuffer(22);
 const ev = new DataView(eocd);
 ev.setUint32(0, 0x06054b50, true);
 ev.setUint16(8, zipFiles.length, true);
 ev.setUint16(10, zipFiles.length, true);
 ev.setUint32(12, centralSize, true);
 ev.setUint32(16, offset, true);

 const zipBlob = new Blob([...blobParts, ...centralParts, new Uint8Array(eocd)], { type: 'application/zip' });

 const zipName = `sora_backup_${new Date().toISOString().split('T')[0]}.zip`;
 const a = document.createElement('a');
 a.href = URL.createObjectURL(zipBlob);
 a.download = zipName;
 document.body.appendChild(a);
 a.click();
 document.body.removeChild(a);
 URL.revokeObjectURL(a.href);

 // --- Résumé ---
 const sizeMB = (zipBlob.size / 1024 / 1024).toFixed(1);
 console.log('\n' + '='.repeat(50));
 console.log('🎬 SORA BACKUP TERMINÉ');
 console.log(`  Vidéos dans le ZIP : ${totalDownloaded}`);
 console.log(`  Erreurs : ${totalErrors}`);
 console.log(` 📦 Fichier : ${zipName} (${sizeMB} MB)`);
 console.log(` 📝 manifest.json inclus dans le ZIP`);
 console.log('='.repeat(50));
})();

Quelques précisions

Si le token n’est pas récupéré automatiquement (ça peut arriver selon votre config), le script vous demandera de le coller manuellement. Pour le trouver, c’est simple : F12 > onglet Réseau > rafraîchissez la page > cliquez sur n’importe quelle requête vers /backend/... > copiez le header Authorization.

D’ailleurs, si la vidéo IA vous branche toujours, Higgsfield propose des séries entièrement générées par IA. C’est pas la même approche que Sora, mais c’est un signe que la vidéo IA ne meurt pas avec la fermeture d’un seul service.

Bon, bref, c’est la fin d’un truc sympa. Moi je préférais largement scroller sur Sora sur d'aller sur TikTok ou Instagram parce qu'au moins c'était drôle !

Merci à mes Patreons qui me permettent de prendre le temps de développer ce genre de petits outils pour vous. Sans eux, j’aurais jamais pu me poser une après-midi pour coder ça.

Source

Plus de 1 000 environnements cloud infectés après une attaque sur le scanner Trivy

Par : Korben
25 mars 2026 à 13:30

Un groupe de pirates a compromis Trivy, un scanner de vulnérabilités open source très utilisé dans les pipelines de développement. Résultat : plus de 1 000 environnements SaaS infectés par un malware qui vole des clés API, des identifiants cloud et des tokens GitHub.

Un scanner de sécurité devenu vecteur d'attaque

Trivy est un outil open source maintenu par Aqua Security. Il sert à détecter des failles, des mauvaises configurations et des secrets exposés dans du code, et il est intégré dans les chaînes de déploiement continu (CI/CD) d'un très grand nombre d'entreprises. Le groupe TeamPCP a réussi à compromettre la version 0.69.4 de Trivy en exploitant une mauvaise configuration dans le composant GitHub Action du projet.

En février, ils ont volé un token d'accès privilégié, et ce token n'a jamais été correctement révoqué. En mars, les attaquants l'ont utilisé pour injecter du code malveillant directement dans le projet, en poussant des images Docker et des versions GitHub vérolées vers les utilisateurs.

Le résultat : 75 des 76 tags de trivy-action ont été remplacés par des versions malveillantes.

La contamination s'étend

L'attaque ne s'est pas arrêtée à Trivy. Le même groupe a aussi compromis liteLLM, une bibliothèque Python qui sert d'interface pour les modèles de langage et qui est présente dans 36 % des environnements cloud.

Ils ont aussi touché KICK (un outil d'analyse statique de Checkmarx) et déployé CanisterWorm, un ver qui se propage via des paquets npm vérolés. Le malware installé est un infostealer qui extrait les clés API, les identifiants de bases de données, les tokens GitHub et toute information sensible accessible dans l'environnement de build.

Mandiant, la branche cybersécurité de Google, estime que plus de 1 000 environnements SaaS sont actuellement compromis, et que ce chiffre pourrait grimper à 10 000. TeamPCP travaillerait avec le groupe Lapsus$, connu pour ses attaques contre Microsoft, Nvidia et Uber.

Des révélations à la conférence RSA

Les détails de l'attaque ont été rendus publics lors de la conférence RSA. Le chercheur en sécurité Paul McCarty a été le premier à tirer la sonnette d'alarme, suivi par les équipes de Socket, Wiz et Aikido.dev. Aqua Security a vu ses 44 dépôts GitHub internes défacés, avec une exposition du code source et des configurations CI/CD.

L'affaire montre à quel point les outils de sécurité open source, quand ils sont mal protégés, peuvent devenir le point d'entrée idéal pour une attaque à grande échelle.

C'est quand même un comble : un scanner de vulnérabilités qui devient lui-même le vecteur d'une attaque. Le fait qu'un simple token non révoqué ait suffi pour compromettre toute la chaîne montre que la sécurité des projets open source reste un vrai sujet. Et quand on sait que liteLLM est présent dans plus d'un tiers des environnements cloud, on mesure l'ampleur du problème...

Source : The Register

PowerToys - Quand Microsoft corrige les manques de Windows

Par : Korben
24 mars 2026 à 12:25

Si vous êtes sous Windows 10 ou 11, vous avez forcément déjà ragé sur un truc tout bête. Genre redimensionner 50 photos d'un coup, renommer des fichiers en masse, ou juste organiser vos fenêtres proprement sur un écran ultra-large. Tout ça, Windows ne sait pas le faire nativement et c'est bien dommage ! Heureusement, c'est là que les PowerToys entrent en jeu... Si vous ne connaissez pas encore ça, sachez simplement qu'il s'agit d'un pack d'une trentaine d'utilitaires open source, maintenus par Microsoft eux-mêmes qui s'installent comme ceci dans un powershell lancé en admin :

winget install Microsoft.PowerToys -s winget

C'est gratuit, c'est dispo sur GitHub, et franchement, c'est à se demander pourquoi tout ça n'est pas intégré par défaut dans l'OS. C'est fou quand même !

Le premier truc qui change la vie, c'est FancyZones. Si vous avez un grand écran, le Snap Layout de Windows 11 c'est... limité. Avec FancyZones, vous créez vos propres zones de dépôt. Vous maintenez MAJ, vous glissez une fenêtre, hop, elle se cale exactement où vous voulez. Une fois qu'on y a goûté, impossible de revenir en arrière.

Autre indispensable c'est PowerToys Run. Tapez Alt + Espace et une barre de recherche épurée apparaît comme Spotlight sur Mac. Ça cherche vos applis, vos fichiers, ça fait calculatrice et conversion d'unités. Bref, vous pouvez oublier le menu Démarrer (et ses pubs).

Pour garder une fenêtre au premier plan quoi que vous fassiez, Win + Ctrl + T et c'est réglé. Always on Top, ça s'appelle et ça se matérialise sous la forme d'une bordure colorée qui apparaît pour vous montrer que la fenêtre est "clouée". Pratique quand vous suivez un tuto tout en tapant du code à côté.

Côté renommage de fichiers, PowerRename remplace avantageusement des outils comme Ant Renamer . Clic droit sur vos fichiers, search & replace avec support des regex pour les plus courageux. Du coup, fini le renommage un par un comme en 2003.

Y'a aussi Color Picker (Win + Maj + C) qui transforme votre curseur en pipette pour chopper n'importe quel code couleur à l'écran. Et Text Extractor (Win + Maj + T) qui fait de l'OCR instantané sur une zone de votre écran. Attention, ça marche pas toujours selon la police, mais ça évite de retaper du texte à la main.

Le plus dingue, c'est Crop and Lock. Vous faites Win + Ctrl + Maj + R et vous découpez une zone d'une appli pour en faire une fenêtre indépendante. Genre un graphique ou un flux d'infos. Sous le capot, ça crée une sorte de proxy visuel de la fenêtre originale, et vous pouvez même continuer à interagir dedans.

Et si vous avez deux PC côte à côte, Mouse Without Borders vous permet de les contrôler avec la même souris et le même clavier. Vous passez d'un écran à l'autre comme si c'était la même machine. Et d'ailleurs, si vous perdez votre curseur sur vos écrans géants, y'a aussi un utilitaire ici pour retrouver sa souris facilement.

Après j'ai pas tout listé. Y'a par exemple un éditeur de variables d'environnement hyper fastoche à utiliser, un aperçu du registre (pour éviter les bêtises), une fonction "Command Not Found" pour vous aider dans le terminal, un redimensionneur d'images intégré au clic droit...etc. Bref, à vous de fouiller mais ce que je retiens c'est que Microsoft a mis 30 ans à admettre que son OS avait des manques, et au lieu d'y répondre au cœur de Windows, ils ont fait ce side project devenu indispensable.

Et pour ceux qui veulent gérer leurs installs avec une interface graphique, allez voir WingetUI . C'est le complément parfait.

Voilà. Installez ça et remerciez-moi plus tard !

Un développeur fait tourner du code Arduino sur une puce de 1980

Par : Korben
24 mars 2026 à 09:24

Un développeur vietnamien a trouvé le moyen de faire fonctionner du code Arduino sur un microcontrôleur 8051, une architecture conçue par Intel en 1980.

L'astuce repose sur un émulateur RISC-V intégré directement dans la puce, et le tout est disponible en open source sur GitHub.

Une puce de 45 ans qui refuse de mourir

Le 8051, c'est un microcontrôleur 8 bits qu'Intel a conçu en 1980. L'anecdote veut que son architecture ait été dessinée en un week-end par l'ingénieur John Wharton.

Depuis, Intel a vendu plus de 100 millions d'unités rien que sur la première décennie, et des variantes compatibles sont encore produites et utilisées un peu partout, des souris d'ordinateur aux puces Bluetooth.

La version ciblée ici, c'est le STC8H8K64U, un dérivé moderne fabriqué par le chinois STC Micro. Il coûte moins d'un dollar et reste populaire en Asie, mais les outils de développement modernes ne le prennent pas en charge. D'où l'idée du projet.

Un émulateur RISC-V dans un 8051

Bùi Trịnh Thế Viên n'a pas cherché à porter le compilateur Arduino directement sur l'architecture 8051, ce qui aurait été un chantier monstre.

Il a opté pour une approche détournée : intégrer un émulateur RISC-V (appelé rv51, écrit en assembleur 8051 par un autre développeur, cyrozap) dans la puce STC8. Le code Arduino est compilé pour RISC-V, puis exécuté via cet émulateur.

Le projet est disponible sur GitHub sous le nom STC_Arduino_Core.

Des limites assumées

L'émulation a un coût. L'émulateur consomme 8 Ko de mémoire flash sur la puce, et la vitesse d'exécution est divisée par 100 à 1 000 par rapport au code natif. Pour le code qui demande du temps réel, comme la gestion des interruptions, il faut repasser sur de l'assembleur 8051 classique.

Et puis il faut le dire, des microcontrôleurs RISC-V natifs existent et coûtent à peine plus cher. Le projet reste donc un exercice technique et pédagogique, pas une solution de production.

C'est le genre de bidouille qui fait sourire. Faire tourner du code Arduino sur une architecture de 1980 via un émulateur RISC-V coincé dans 8 Ko, il fallait quand même y penser.

Bon par contre, on ne va pas se raconter d'histoires, en pratique ça n'a pas beaucoup d'intérêt face à un vrai microcontrôleur RISC-V à 2 euros. Mais l'exercice a le mérite de prouver que le 8051 a encore de la ressource, 45 ans après sa création.

Source : Hackaday

Rimowa Classic Aluminium Grid Revives a Forgotten 1969 Design

Par : Ida Torres
25 mars 2026 à 17:20

Most luggage brands don’t have a 127-year-old story to draw from. Rimowa does, and it seems to know exactly when it’s worth pulling from that history and when to let the present speak for itself. With the Classic Aluminium Grid, they’ve clearly decided the archive deserves a second act.

The Classic Aluminium Grid is the German brand’s latest limited-edition release, and it’s generating the kind of quiet excitement that reserved design circles usually save for restored mid-century furniture or a first-edition book that resurfaces at auction. The reason is simple: Rimowa didn’t just design something new. They reached back to 1969, pulled out a hand-carry case design that had been sitting in their archives, and asked what it would look like today if it were treated with the same reverence they give to the grooves.

Designer: Rimowa

That grooved shell, by the way, is practically synonymous with the brand itself. You know a Rimowa from across an airport terminal. Those parallel ridges running down the aluminium surface are one of the most recognizable design signatures in travel goods, and they’ve been that way for decades. So when the brand quietly steps away from them and replaces the lines with a grid, a structured, geometric, embossed pattern pressed right into the aluminium shell, it feels like a real statement. It’s not a gimmick. It’s a choice that speaks to a different kind of confidence.

The grid comes from a real place. In 1969, Rimowa was producing hand-carry cases featuring this geometric pattern: practical, modular, and rooted in the kind of technical precision that defined that era’s design thinking. There’s a reason so much design from that decade still holds up. It wasn’t chasing aesthetics for their own sake. Form followed function, and it did so elegantly. Reviving that spirit in 2026 doesn’t read as nostalgia pandering. It reads as a brand that knows exactly where its DNA lives and isn’t afraid to dig for it.

The collection comes in three sizes: the Classic Hand-Carry Case, the Classic Cabin, and the Classic Trunk. All three are made in Cologne, Germany, which matters more than it might seem. Manufacturing location is one of those details that’s easy to gloss over until you’re actually holding the product, and with Rimowa, the German-made quality is part of the whole point. The embossed grid pattern, the blue leather handles, the individually numbered serial number patch on each case: these aren’t details you’d notice in a thumbnail. They’re details you notice after living with the piece and realising it only gets better over time.

And yes, price matters here. The Classic Aluminium Grid sits in the $2,725 to $3,225 range, which puts it firmly in the territory of deliberate, considered purchasing. That’s not casual spending, and it shouldn’t be. This is the kind of purchase that functions as an heirloom more than a travel accessory, something you keep, care for, and eventually pass along. The lifetime guarantee Rimowa extends to all its suitcases reinforces that framing. They’re not selling you a bag built for a few trips. They’re selling you something built to outlast most things currently in your home.

What makes this collection feel genuinely compelling rather than just another limited drop is the restraint behind it. Rimowa didn’t add bright colour for the sake of attention. They didn’t partner with a streetwear brand or commission someone’s artwork across the shell. They went to their own archive, found something worth preserving, and let the design carry the weight. The grid is subtle enough that it won’t read as flashy at baggage claim, but anyone paying close attention will recognise it as something different. Something that doesn’t quite look like everything else on the carousel.

That’s a hard balance to strike in design. Loud enough to be interesting, quiet enough to be enduring. The Classic Aluminium Grid lands squarely in that space, and for a brand with over a century of aluminium behind it, that feels less like luck and more like a brand that knows exactly what it’s doing.

The post Rimowa Classic Aluminium Grid Revives a Forgotten 1969 Design first appeared on Yanko Design.

8 Best Desk Accessories for Men That Don’t Look Like They Came From a Corporate Supply Closet

21 mars 2026 à 11:40

There’s a version of a desk setup that communicates everything about how little thought went into it. A black mesh organizer from the bottom shelf of a supply closet. A mouse pad that came free with something else. A cable clip in beige. The desk functions, technically, and does so with a level of visual enthusiasm that matches a waiting room.

The accessories below were designed by people who thought about this harder. Some carry authentic 1970s Italian design heritage. Some are running AI in the background to actively shape your environment. One contains material roughly 20 million years older than the Earth it now rests on. What they share is a quality of intentionality. Each was built as an object worth keeping on a desk, not just stashing in a drawer, because it earns its surface area through how it works, how it looks, or both at once. For men who have graduated from the corporate supply closet aesthetic, these eight represent a meaningfully different set of options.

1. Lenovo AI Workmate Concept

Working alone all day carries a specific kind of friction that most desk setups quietly ignore. Questions accumulate, decisions pile up, and the AI tools meant to support you sit behind a keyboard input that gives nothing back spatially or visually. Lenovo’s AI Workmate Concept, unveiled at MWC 2026, takes that problem seriously enough to build a physical object around it. The result is a desk companion in the most literal sense: a spherical head on an articulated arm mounted on a circular base, with animated eyes on its front display that shift and orient as it processes and responds. The form is compact, the presence is deliberate, and the intent is clear from the first time it moves.

The arm is the most consequential design decision here. Because it moves, the Workmate can orient itself toward whatever holds attention in front of it, a document laid flat on the desk, a person leaning back in their chair, or something happening at the periphery. That range of motion is what separates it from a smart speaker that has been given a screen and called a companion. Spatial awareness is embedded in its posture, not just its software. For men who spend long hours alone at a desk and find text-based AI interaction increasingly impersonal and context-free, the Workmate proposes something more honest about what presence and assistance can look like from an object sharing your workspace.

What We Like

  • Articulated arm gives the device genuine spatial awareness, orienting toward objects and people rather than remaining static
  • Animated eyes on the front display make AI interaction feel more present and less transactional than any screen-based interface

What We Dislike

  • Currently a concept unveiled at MWC 2026, with availability, pricing, and final specs still unconfirmed
  • The novelty of animated eyes may carry more emotional weight than the practical functionality justifies over time

2. Levitating Pen 2.0: Cosmic Meteorite Edition

Most pens sit on a desk and do nothing interesting when they’re not being used. The Levitating Pen 2.0 Cosmic Meteorite Edition refuses that arrangement entirely. It floats at a 23.5-degree angle above its magnetic base, creating a suspension that stops people mid-sentence when they notice it. The design draws from spacecraft aesthetics, specifically the visual language of the USS Enterprise, and the tip incorporates a genuine fragment of Muonionalusta meteorite, a material approximately 20 million years older than the Earth it now rests on. It functions as a working ballpoint pen, which means it is simultaneously a collector’s object, a desk focal point, and a writing tool occupying the same physical form.

What keeps this from reading as pure novelty is how it behaves in your hands. The Levitating Pen is fidget-worthy in the best sense, the kind of object you reach for during a long call or a pause between tasks without consciously planning to. For men who collect objects with a verifiable reason behind them, the meteorite tip offers something most limited editions simply don’t: provenance with a story that doesn’t require a certificate to feel real. You’re holding material from beyond the solar system. That fact changes the weight of the object in your hand when you stop to think about it, and that shift is exactly what separates a desk accessory from a desk object worth keeping.

Click Here to Buy Now: $399.00

What We Like

  • Genuine Muonionalusta meteorite tip connects the pen to a tangible, verifiable piece of cosmic history
  • Magnetic levitation display creates a desk focal point that requires no ongoing maintenance once positioned

What We Dislike

  • The floating display requires a flat, stable surface, limiting where it can sit effectively
  • Limited edition production means restocking after sellout is not guaranteed for future buyers

3. BOB Desk Organizer

Joe Colombo designed BOB in 1970, at a time when desk organizers were either plastic trays with zero intentionality or overengineered systems that looked more complicated than the mess they were supposed to fix. He chose neither direction. BOB is a compact polyurethane gel form, elongated and low-profile, almost pill-shaped when viewed from above, with one end rising into a soft dome and the other tapering nearly flat. B-Line, an Italian label dedicated to reissuing objects from discontinued original molds, brought it back in 2023 across five colorways: terracotta, slate blue, mustard yellow, warm white, and a frosted translucent version called ice. The selection alone suggests a designer thinking about rooms rather than offices.

The top surface divides into three functional zones without any visible partition between them. The dome end opens into a large oval scoop for bulkier items. The center holds a three-by-four grid of individual circular holes, each sized precisely for a single pen or brush. The tapered tail offers two horizontal slot grooves for flat objects like rulers or small notebooks. None of this reads as a feature list in person. It reads as a single continuous gesture that happens to keep things organized along the way. For men who want a desk object with actual design history behind it rather than a branding story retrofitted over generic injection molding, BOB is nearly impossible to improve on.

What We Like

  • Rooted in authentic 1970s Italian design history, reissued from Joe Colombo’s original mold by B-Line
  • Three distinct functional zones are built into one continuous organic form with no visible hardware or dividers

What We Dislike:

  • Polyurethane gel construction may show surface wear or discoloration with extended daily use
  • The low-profile form works best for lighter objects and may not support heavier desk tools effectively

4. DEEP

DEEP operates on a premise most desk lamps don’t bother with: the working environment around you should configure itself to match what you are about to do, rather than waiting for you to adjust it manually. Switch it on with a spinning-top-inspired power button, tell it whether you’re studying, coding, reading, or doing creative work, and it adjusts both light quality and ambient sound before you’ve had to think about either. A camera positioned at eye level monitors your focus state in real time, functioning like a built-in productivity coach without requiring a separate app or a separate device taking up additional surface area.

What separates DEEP from a connected lamp with a smart home feature set is what it does across repeated sessions. The system saves your manual adjustments over time, builds a personal profile from the conditions that consistently work best for you, and begins applying them automatically without being prompted. Side buttons allow precise overrides for days when the default doesn’t fit. For men whose desks have become cluttered with single-function devices that each do one thing adequately, DEEP represents a genuine consolidation. It folds a lamp, an ambient sound environment, and a passive focus monitor into a single object that becomes more attuned to how you work the longer it stays on your desk.

What We Like

  • AI builds a personal focus profile across sessions and applies your optimal working conditions automatically over time
  • Combines lighting, ambient sound, and real-time focus monitoring without requiring any additional hardware

What We Dislike

  • Camera-based focus tracking may feel uncomfortable for users sensitive to passive environmental monitoring
  • Ambient sound adjustment effectiveness varies significantly based on an individual’s working environment and noise tolerance

5. Rolling World Clock

Every desk clock tells you one thing. This one tells you twelve. The Rolling World Clock is a 12-sided object with a single hand and an operation that couldn’t be more direct: set it on any face, and the hand reads the correct local time for the city printed on that side. The twelve cities span the major global time zones, including London, Paris, Cape Town, Moscow, Los Angeles, Karachi, Mexico City, New York, Shanghai, Tokyo, Sydney, and New Caledonia. For men who manage work across multiple time zones or simply have family spread across continents, the mental arithmetic of figuring out what time it is somewhere else is one of the more persistent small irritations in a working day, and this object removes it without adding a screen.

The design decision that makes this worth keeping on a desk rather than just owning is the total absence of anything unnecessary. No digital display. No charging cable. No app. Just a tactile, rollable object you turn to the city you need and set down. Available in black and white, it occupies desk or shelf space without reading as a gadget or demanding attention it hasn’t earned. There’s a quiet pleasure to the interaction that most clocks don’t provide: the act of picking it up, choosing a place in the world, and reading the time. There is a physical engagement with global time that a phone screen never manages to replicate.

Click Here to Buy Now: $49.00

What We Like

  • Covers twelve major time zones in a single tactile object with no digital display, no app, and no charging required
  • Minimal form reads equally well on a desk or shelf without visually registering as a tech accessory

What We Dislike

  • A single clock hand requires slightly more reading attention than a digital display for precise timekeeping
  • The 12-city selection covers major zones well, but may not include every specific time zone a user needs regularly

6. Fidget Cube

The case for keeping a dedicated fidget object on a desk is more rational than it sounds from the outside. Restless hands during long calls, slow-loading processes, or decisions you’re turning over without fully committing to are a real and recurring part of working at a desk, and the Fidget Cube was built precisely for that condition. Six sides offer six different tactile surfaces: a cluster of clickable buttons, a gliding joystick, a row of flip switches, a smooth surface designed for the thumb’s natural breathing motion, a rolling ball set into one face, and a spinning disc. The variety means your hands will find a preferred surface quickly and return to it across the session without thinking about it.

What keeps this from reading as a toy is the restraint built into how it was designed. It doesn’t look out of place on a desk or conference table, particularly in the Midnight black colorway, which sits visually neutral among the standard dark objects that populate most professional environments. For men who have noticed that physical repetitive movement genuinely sharpens how they think through a problem, this is one of the more honest tools available at any price point. It takes a real behavioral truth seriously and gives your hands a quiet, clean way to act on it without disrupting anyone around you or drawing attention to what you’re doing.

What We Like

  • Six distinct tactile surfaces address a wide range of fidgeting habits within one compact, pocketable object
  • Discreet colorways, particularly Midnight black, keep it visually neutral in professional desk environments

What We Dislike

  • Some click mechanisms can produce an audible sound in quiet rooms or during video calls
  • Serves no secondary organizational function on a desk, occupying surface space with a purely tactile purpose

7. MOFT Z Sit-Stand Desk

Sit-stand desks have spent years being expensive, physically large, or permanently locked to a specific room. The MOFT Z takes a completely different approach, collapsing to something closer to a slim notebook in thickness while delivering a full ergonomic range through an origami-inspired Z-structure. It provides one standing mode and three seated position angles, which is enough postural variety to meaningfully shift how you feel across a long working session. For men who divide their time between home, a co-working space, a client’s office, or anywhere other than a fixed desk, the ability to carry a sit-stand setup in a bag removes an ergonomic compromise that most standing desk products are structurally incapable of solving.

The weight is what makes it a genuine solution rather than a clever concept. Ergonomic equipment that stays home because it’s too heavy or awkward to transport defeats the purpose of improving how you work across different locations. The MOFT Z doesn’t have that problem. Unfold it in seconds, set your laptop on the surface, and you’ve built the same ergonomic posture you’d have at a standing desk that costs several times more and cannot leave the floor it occupies. For anyone who has watched their posture decline steadily across a long afternoon of flat laptop work, this is a practical correction that goes where you go and requires no tools, no assembly, and no installation to use.

What We Like

  • Origami Z-structure provides one standing mode and three seated positions with no setup tools required
  • Ultra-lightweight, paper-thin folded profile makes it genuinely portable across different working locations

What We Dislike

  • Surface area restricts how much additional equipment can sit alongside a laptop in standing mode
  • Stability may be reduced under heavier setups or on surfaces that aren’t completely flat and firm

8. LEGO-Style Silicone Cable Organizer

Cable management has a way of being solved temporarily and then quietly abandoned. The solution works for a week, then a new cable enters the setup, or the organizer shifts position, or it turns out the adhesive left a mark on the desk. This silicone cable organizer approaches the problem differently. Shaped after a lozenge pack, it uses peg-topped cylindrical columns to wrap and hold individual cables in separate, stable positions. Multiple units can be stacked or arranged in rows, and three sizes cover the range from a single charging cable to a full multi-device setup: a 2×2 mini, a 3×3 medium, and a 2×5 large, with the option to place two cables on top of each other within the same row.

The design was born from a specific personal frustration: cables tangling with other items inside a bag, the kind of small recurring annoyance that accumulates into a genuine grievance over time. That origin shows in how focused the solution is. There’s no overengineering, no branded clip mechanism, no custom routing system that only works with certain cable gauges. The micro suction tape base grips the desk surface firmly without permanent adhesion, meaning it moves when the setup changes and holds when it doesn’t. For men who have gone through two or three cable management products and quietly abandoned all of them, the directness here is precisely the argument for this being the last one you need.

What We Like

  • Three modular sizes cover setups from a single cable to a full multi-device workspace without custom parts
  • Micro suction tape base holds securely without permanent adhesion, leaving the desk surface undamaged

What We Dislike

  • Silicone material collects lint and dust more readily than hard plastic alternatives
  • The LEGO-inspired visual style reads as playful and may not suit every desk aesthetic preference

The Best Desk Is One You Actually Thought About

A desk says something whether you intend it to or not. It communicates how seriously you take the hours you spend there, what kind of work you believe deserves a proper environment, and whether the objects around you were chosen or simply accumulated. The eight accessories above represent a different kind of accumulation, one where every item on the surface has a reason to be there, a story worth telling, or a function that genuinely improves how the day moves.

None of them require a complete overhaul. One rolling clock, one floating pen, one lamp that learns how you work — any single object from this list shifts the energy of a desk in a direction worth going. The corporate supply closet aesthetic isn’t inevitable. It just tends to win by default when no one pays attention. These eight are the case for paying attention.

The post 8 Best Desk Accessories for Men That Don’t Look Like They Came From a Corporate Supply Closet first appeared on Yanko Design.

My old monitor can't keep up with new PC games anymore — so it's time to upgrade with this 240Hz, 1440p monitor that won't break the bank

HP's OMEN 27qs gaming monitor is on sale at its namesake company's website with a generous 30% discount, giving PC gamers a chance to upgrade their rig with the ability to play games at 1440p and 240fps for under $350.

Image of the HP OMEN 27qs gaming monitor in use.

Budget-conscious PC players will want to take heed of the HP OMEN 27qs.

Hyperkin's retro Xbox controller is perfect for replaying Fable in anticipation of its reboot — it's got strong ergonomics and controls for dirt cheap

Amazon has procured a 32% bargain on the Hyperkin DuchesS, a wired Xbox controller modelled after the original Xbox S controller while incorporating modern tech to make it fit for retro and modern Xbox games.

AI-generated image of the Hyperkin DuchesS controller for Xbox visualized.

AI-generated image of the Hyperkin DuchesS controller

Even if this Xbox gaming headset wasn't on sale, we'd recommend it any day for its rich sound and features — it's simply one of Razer's best yet

The Razer BlackShark V3 Pro is an incredible gaming headset that took all criticisms of the BlackShark V2 Pro and ironed out all of them with richer sound and new useful features, and it's now on sale at Amazon.

Image of the Razer BlackShark V3 Pro wireless gaming headset.

All the content you&#039;ll get with the Razer BlackShark V3 Pro.

❌
❌