Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
Hier — 25 mars 2026Flux principal

Quand 10 000 bots volent 8 millions aux artistes sur Spotify

Par : Korben
25 mars 2026 à 16: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 à 15: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 à 14: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

La version surpuissante d’Ariane 6 s’apprête déjà à revoler très bientôt

25 mars 2026 à 10:25

ariane 6 leo kuiper amazon

C'est reparti pour un tour. Après le succès de son vol inaugural mi-février 2026, la configuration la plus musclée du lanceur européen Ariane 6 s'apprête à reprendre le chemin de l'espace. Il s'agira là encore de déployer une nouvelle grappe de satellites pour la constellation Amazon Leo.

Offre de lancement, prix, caractéristiques : tout savoir la SolarVault 3 Pro Max, la nouvelle batterie de Jackery [Sponso]

Par : humanoid xp
25 mars 2026 à 10:19

Cet article a été réalisé en collaboration avec Jackery

Réduire sa facture d’électricité, mieux gérer sa consommation d’énergie et viser l’indépendance énergétique : voilà le pari de Jackery avec sa nouvelle génération de batterie, dont la SolarVault 3 Pro Max est actuellement disponible à la précommande.

Cet article a été réalisé en collaboration avec Jackery

Il s’agit d’un contenu créé par des rédacteurs indépendants au sein de l’entité Humanoid xp. L’équipe éditoriale de Numerama n’a pas participé à sa création. Nous nous engageons auprès de nos lecteurs pour que ces contenus soient intéressants, qualitatifs et correspondent à leurs intérêts.

En savoir plus

Télécharger l’ISO de Windows 11 : le réflexe à avoir avant qu’un PC ne tombe en panne

25 mars 2026 à 10:07

Windows 11- Image ISOL’image ISO de Windows 11 est l'outil le plus utile pour réinstaller le système, réparer son PC endommagé ou créer une clé USB d’installation. Microsoft propose toujours le téléchargement officiel de Windows 11.

Cet article Télécharger l’ISO de Windows 11 : le réflexe à avoir avant qu’un PC ne tombe en panne a été publié en premier par GinjFo.

« Nous sortons enfin la propulsion nucléaire des labos » : le pari renversant du futur vaisseau spatial de la NASA

24 mars 2026 à 20:05

nucléaire fusée

Promis il y a un an par Jared Isaacman, le grand virage nucléaire de la NASA est officiel. Avec le projet Space Reactor-1 Freedom prévu pour 2028, l'agence spatiale américaine compte réduire drastiquement le temps de trajet vers Mars. Une révolution technologique décisive pour protéger la santé des futurs astronautes, et qui s'appuie sur des décennies de recherches théoriques.

À partir d’avant-hierFlux principal

Objectif Mars : la NASA relance la propulsion nucléaire pour accélérer l’exploration de l’espace lointain

24 mars 2026 à 16:15

nucléaire fusée

Promis il y a un an par Jared Isaacman, le grand virage nucléaire de la NASA est officiel. Avec le projet Space Reactor-1 Freedom prévu pour 2028, l'agence spatiale américaine compte réduire drastiquement le temps de trajet vers Mars. Une révolution technologique décisive pour protéger la santé des futurs astronautes, et qui s'appuie sur des décennies de recherches théoriques.

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

Par : Korben
24 mars 2026 à 10: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

Des kilomètres de panneaux solaires sur la Lune. Bonne idée ou projet fou ?

Par : Hugo Ruher
24 mars 2026 à 11:06

Le concept de Luna Ring

Une entreprise japonaise propose de déployer des milliers de kilomètres de panneaux solaires le long de l'équateur lunaire, afin de fournir une énorme quantité d'énergie à la Terre. Un projet qui déploie de grands espoirs, mais qui a toutes les chances de rester hypothétique.

Mission Proba-3 de l’ESA : la sonde spatiale donne de nouveaux signes de vie

23 mars 2026 à 19:12

proba Une

L'Agence spatiale européenne (ESA) a sans doute poussé un sacré soupir de soulagement : la sonde Proba-3, qui ne donnait plus de nouvelles depuis des semaines, a repris contact avec la Terre. De quoi espérer une reprise de ses activités scientifiques.

274 tirs de Starship par jour : le plan Terafab d’Elon Musk face à un mur totalement infranchissable aujourd’hui

23 mars 2026 à 15:59

elon musk terafab starship

Elon Musk voit grand pour TERAFAB, son projet de puces IA déployées dans l'espace. Trop grand ? Pour atteindre les objectifs du milliardaire, SpaceX devrait lancer des centaines de fusées Starship chaque jour. Décryptage d'une équation qui est, pour l'heure, impossible à résoudre.

Tout n’est pas fichu : on la croyait perdue, mais la sonde européenne Proba-3 a donné des signes de vie

23 mars 2026 à 15:33

proba Une

L'Agence spatiale européenne (ESA) a sans doute poussé un sacré soupir de soulagement : la sonde Proba-3, qui ne donnait plus de nouvelles depuis des semaines, a repris contact avec la Terre. De quoi espérer une reprise de ses activités scientifiques.

274 tirs de Starship par jour : le plan Terafab d’Elon Musk face à un mur totalement infranchissable aujourd’hui

23 mars 2026 à 14:37

elon musk terafab starship

Elon Musk voit grand pour TERAFAB, son projet de puces IA déployées dans l'espace. Trop grand ? Pour atteindre les objectifs du milliardaire, SpaceX devrait lancer des centaines de fusées Starship chaque jour. Décryptage d'une équation qui est, pour l'heure, impossible à résoudre.

Un cargo en route pour l’ISS a dû mal à arriver à destination

Par : Hugo Ruher
23 mars 2026 à 11:09

Le cargo Progress 94

Le cargo Progress 94 mis en orbite par une fusée Soyouz est en difficulté pour arriver jusqu'à l'ISS. Il s'agirait d'un bug lié à une antenne, ce qui pourrait obliger les astronautes à bord de la station à prendre les commandes à distance.

C’est quoi TERAFAB, le nouveau projet d’Elon Musk qui réunit Tesla et SpaceX pour la première fois ?

23 mars 2026 à 09:46

Quelques semaines après avoir annoncé la fusion de SpaceX et xAI, Elon Musk dévoile TERAFAB, un projet de méga-usine de semi-conducteurs pour rendre ses entreprises indépendantes en puces. La promesse est ahurissante… mais semble difficilement tenable en l'état.

C’est quoi TERAFAB, le nouveau projet d’Elon Musk qui réunit Tesla et SpaceX pour la première fois ?

23 mars 2026 à 09:46

Quelques semaines après avoir annoncé la fusion de SpaceX et xAI, Elon Musk dévoile TERAFAB, un projet de méga-usine de semi-conducteurs pour rendre ses entreprises indépendantes en puces. La promesse est ahurissante… mais semble difficilement tenable en l'état.

❌
❌