Téléchargement progressif avec fetch ()

Fetch est une API propre aux navigateurs qui permet de présenter des requêtes à un serveur HTTP par voie de programmation, autrement dit depuis du code JavaScript.
Fetch remplace XMLHttpRequest, dont elle est une version plus moderne. En particulier :
  • XMLHttpRequest est bien une API asynchrone, mais elle repose sur le recours à des callbacks. Or ECMAScript 2015 a introduit les promesses pour faciliter la programmation asynchrone en échappant au "callback hell", mais XMLHttpRequest n'en tient pas compte.
  • Du fait de Same-Origin Policy (SOP), XMLHttpRequest ne permet pas de récupérer une ressource dont l'origine est différente de celle de la page. Or SOP a été tempérée en introduisant Cross-Origin Resource Sharing (CORS), mais XMLHttpRequest n'en tient pas compte.
Pour se familiariser avec Fetch, l'on se propose d'écrire une API qui permet de récupérer une série de ressources tout en étant tenu informé de la progression du téléchargement de chacune.
Suivi de la progression de téléchargements simultanés avec fetch ()
Le code JavaScript devra être aussi simple que possible, mais on n'échappera pas à la mobilisation de quelques concepts fondamentaux : les promesses, la récursivité, les closures, etc. Pas d'affolement, tout est expliqué en détail !
Continuer la lecture de "Téléchargement progressif avec fetch ()"
Téléchargement progressif avec fetch ()

CORS avec Node.js

Pour faire face à la montée des menaces sur leurs utilisateurs, les navigateurs se sont au fil du temps enrichis de mécanismes qui visent à contrôler le contenu d'une page Web. En particulier, il faut évoquer :
CORS avec Node.js
Du fait qu'il ne fallait pas casser le Web en instaurant ces mécanismes, ces derniers ne changent pas grand-chose pour le développeur d'une application Web standard, au sens d'un ensemble de pages servies par un même serveur, qui n'affichent jamais que du contenu qui en provient.
C'est tout particulièrement vrai pour CSP, qui ne vient pas limiter des pratiques telles comme par exemple du script inline dans une balise <script>, tant que le développeur ne met pas lui-même en place CSP en accompagnant ses pages d'un header Content-Security-Policy.
Il est va autrement pour SOP et CORS, qui d'emblée limitent des pratiques. En particulier, il est impossible depuis le script d'une page Web de formuler une requête via l'API Fetch pour récupérer du contenu dont l'origine, entendue comme la composition du nom de domaine et du numéro de port, n'est pas celle de la page en question.
Or cela peut être nécessaire. Illustration avec une application Web où l'utilisateur accède à une page servie par un serveur Node.js (module http) à l'écoute sur le port 3000 de localhost, dans laquelle un script récupère du contenu en appelant un service exposé par un autre serveur Node.js (module http) à l'écoute sur le port 3001 du même localhost.
Continuer la lecture de "CORS avec Node.js"
CORS avec Node.js

Hackflash #7 : Extraire les PNG et les JPEG d’un binaire (même partiels)

Lors d'un challenge de forensics, il arrive souvent d'avoir à extraire des informations d'un dump de la mémoire, un gros fichier binaire.
Evidemment, il existe des outils pour cela, et le plus simple est sans doute d'utiliser un bon vieux binwalk. Toutefois, il peut être nécessaire d'avoir le faire soi-même.
Extraire les PNG et les JPEG d'un binaire (même partiels)
La solution la plus simple est alors encore de rédiger un programme en Python.
Continuer la lecture de "Hackflash #7 : Extraire les PNG et les JPEG d’un binaire (même partiels)"
Hackflash #7 : Extraire les PNG et les JPEG d’un binaire (même partiels)

Hackflash #6 : Extraire les mots d’un dictionnaire d’un binaire

Lors d'un challenge de forensics, il arrive souvent d'avoir à extraire des informations d'un dump de la mémoire, un gros fichier binaire. En particulier des mots issus d'un dictionnaire.
Evidemment, il existe des outils pour cela, et le plus simple est sans doute d'utiliser un bon vieux grep -a. Toutefois, il peut être nécessaire d'avoir le faire soi-même.
Extraire le mots d'un dictionnaire d'un binaire en Python 3
La solution la plus simple est alors encore de rédiger un programme en Python.
Continuer la lecture de "Hackflash #6 : Extraire les mots d’un dictionnaire d’un binaire"
Hackflash #6 : Extraire les mots d’un dictionnaire d’un binaire

Chronique de l’IA #6

L'IA générative n'en finit pas de générer des initiatives dans tous les domaines, ce qui conduit les entrepreneurs à tester des limites qui ne sont pas seulement techniques, mais aussi éthiques.
Chronique de l'IA #6
Ainsi, est-il vraiment possible d'espérer que l'Artificial General Intelligence (AGI) surgisse sous le seul effet du gigantisme poussé toujours plus loin ? Est-il possible de mettre toujours plus prématurément sur le marché des produits qui intègrent l'IA en misant sur les retours des utilisateurs pour les finaliser ? Est-il raisonnable d'entreprendre de créer des robots toujours plus sophistiqués, pilotés par des IA qui restent encore à ce jour des boîtes noires ? Faut-il accepter que nos systèmes d'armement intègrent des IA toujours plus autonomes, au point que l'humain sorte de la boucle ?
NB : Ce billet a été rédigé début juin par un humain et non une boîte de conserve, et sera publié dans le numéro #264 de Programmez! de juin 2024.
Continuer la lecture de "Chronique de l’IA #6"
Chronique de l’IA #6

Chronique de l’IA #5

Avec l'IA, le show n'en finit pas, au rythme d'évolutions par palier qui, de ce fait, prennent toujours au dépourvu. Ainsi, à peine venait-on de s'épousseter le derrière sur lequel l'on était tombé au visionnage des vidéos générées par Sora, que l'on est retombé dessus à l'écoute des musiques générées par Suno v3, Udio et autres Stable Audio 2.0.
Chronique de l'IA #5
Parallèlement, l'on assiste à l'explosion des infrastructures requises pour élaborer cette offre et faire face à la demande qu'elle suscite, au rythme d'annonces qui ne sont pas moins spectaculaires.
Bienvenue dans une nouvelle édition de la chronique qui s'efforce de suivre, où l'humain tient la plume, et l'IA tient le pinceau.
NB : Ce billet a été rédigé début mars par un humain et non une boîte de conserve, et publié dans le numéro #263 de Programmez! de mai 2024.
Continuer la lecture de "Chronique de l’IA #5"
Chronique de l’IA #5

Chronique de l’IA #4

Après la période des fêtes qu'il faut bien qualifier d'assez calme, le rythme des annonces dans le domaine de l'IA générative a repris.
Chronique de l'IA #4
Clairement, celui qui suit un tant soit peu ces dernières est désormais moins surpris par ce qui déboule : l'IA générative est rentrée dans ses moeurs ; ce n'est plus l'ébahissement qu'il a connu en se confrontant pour la première fois à ChatGPT. Toutefois, il reste à cette IA bien des domaines où elle peut se déployer et s'améliorer, et cela n'a pas manqué de créer des surprises...
NB : Ce billet a été rédigé début mars par un humain et non une boîte de conserve, et publié dans le numéro spécial IA de Programmez! d'avril 2024.
Continuer la lecture de "Chronique de l’IA #4"
Chronique de l’IA #4

Chronique de l’IA #3

Tandis que les scénaristes et les acteurs faisaient grève outre-Atlantique, le feuilleton de l'IA a continué comme jamais, nous assurant une distraction quotidienne à défaut de nouvelles séries de science-fiction.
Chronique de l'IA #3
Comme le lecteur pourra le constater, ces derniers mois ont apporté leur lot d'innovations techniques, mais aussi réglementaires. Plus que jamais, l'informatique devient un univers compliqué, où il est n'est plus seulement nécessaire de maîtriser la technique ; il faut de plus maîtriser les règles qui en contraignent l'emploi : celles relatives à la protection des données personnelles, à la sécurité, aux impacts environnementaux, et donc désormais aussi à l'intelligence artificielle.
NB : Ce billet a été rédigé mi-décembre par un humain et non une boîte de conserve, et publié dans Programmez! #261 de janvier 2024.
Continuer la lecture de "Chronique de l’IA #3"
Chronique de l’IA #3

Chronique de l’IA #2

Tout un été a passé depuis la dernière chronique de l'IA, mais sans trêve estivale ! En effet, l'actualité du domaine n'a qu'à peine marqué le pas, si bien qu'il faut de nouveau faire des choix déchirants pour retenir ce qu'il convient de mentionner sans fatiguer le lecteur.
Toutefois, puisque votre serviteur y a consacré un temps, il n'en réservera pas moins quelques lignes finales pour vous présenter une sélection draconienne de ressources si, comme lui, loin de vous contenter de regarder le DL se déployer partout, vous souhaitez comprendre un peu comment ça marche...
NB : Ce billet a été rédigé début octobre par un humain et non une boîte de conserve, et une version publiée dans Programmez! #260 de novembre 2023.
Continuer la lecture de "Chronique de l’IA #2"
Chronique de l’IA #2

Chronique de l’IA #1

Si un sujet occupe bien le devant de l'actualité technique, voire de l'actualité tout court, ce sont les progrès accomplis dans l'univers de l'IA, constellation ML, système DL, planète LLM notamment.
Difficile de s'y retrouver pour qui y pose le pied après à un premier contact avec ChatGPT. C'est que ladite planète est en ébullition ; le paysage y change du jour au lendemain. Dès lors, se refaire le film ne pourrait-il pas permettre de se donner quelques points de repère ? Cette petite chronique de temps récents tâchera de s'y employer.
NB : Ce billet a été rédigé en juin par un humain et non une boîte de conserve, et publié dans Programmez! #258 de juillet 2023.
Continuer la lecture de "Chronique de l’IA #1"
Chronique de l’IA #1