- Ce dépôt est une expérimentation de code simple inspirée du travail de Björn Staal, avec un lien fournissant plus d’informations sur l’idée d’origine
- Pour l’exécuter en local, il faut lancer
npm i, puis ouvrir 2 terminaux : l’un pour le serveur, l’autre pour le serveur statique du client - Le serveur se lance avec
node server/server.js, et le client aveccd client && http-server - Pour voir l’expérience, ouvrez
localhost:8080?b=1etlocalhost:8080?b=2dans deux onglets de navigateur distincts - Les projets à venir incluent un mode uniquement localStorage, la prise en charge d’un nombre infini de fenêtres avec suppression des paramètres d’URL, et une migration vers WebRTC
Aperçu du projet
Momciloo/fun-with-socketsest un projet de simple exploration de code inspiré du travail de Björn Staal- Plus d’informations sur l’idée d’origine sont disponibles dans cette publication LinkedIn
- Le README contient une capture vidéo de l’expérience
Exécution en local
- Commencez par installer les dépendances
npm i
- Ouvrez ensuite un second terminal pour en utiliser 2 au total
- Dans le premier terminal, lancez le serveur
node server/server.js
- Dans le deuxième terminal, placez-vous dans le répertoire client, puis lancez le serveur statique
cd client && http-server
- Dans le navigateur, ouvrez deux onglets avec des paramètres de requête différents
localhost:8080?b=1localhost:8080?b=2
Idées pour la suite
- Ajout prévu d’un flag permettant d’exécuter uniquement le mode localStorage
- Option prévue pour prendre en charge un nombre infini de fenêtres et supprimer le besoin de paramètres dans l’URL
- Une migration de l’implémentation vers WebRTC est envisagée
1 commentaires
Avis sur Hacker News
Super démo. Je me demande comment ça fonctionnerait avec plusieurs écrans.
J’apprécie aussi qu’il ait spontanément indiqué s’être directement inspiré de quelqu’un d’autre et qu’il ait cité sa source. J’aimerais voir davantage de personnes comme ça dans le monde du logiciel.
Ce genre d’approche, ou une approche similaire, pourrait être utile pour la gestion des calques dans des programmes de dessin comme Krita, Inkscape ou Gimp.
On pourrait l’implémenter simplement sous forme de panneau à onglets dans toute la fenêtre de l’application, et faire en sorte que le calque de l’onglet sélectionné devienne le calque actif pour l’édition.
Je me souviens qu’il y avait déjà pas mal de démos utilisant la position et la taille des fenêtres. Il y avait aussi une démo de simulation physique ; je ne me rappelle plus si c’était un liquide ou plusieurs solides, mais on pouvait faire tomber des objets d’une fenêtre à une autre.
Il ne devrait même pas y avoir besoin de sockets : un simple canal de messages entre fenêtres pourrait suffire. Quand une fenêtre ouvre une fenêtre enfant, elle dispose généralement de droits d’accès particuliers, contrairement à des onglets/fenêtres normalement isolés entre eux, donc une version uniquement locale semble facile à faire.
Si vous aimez ce genre de choses, WindowKill pourrait aussi vous amuser. C’est un jeu vidéo proche d’Asteroids qui utilise intelligemment plusieurs fenêtres qui se superposent et interagissent.
Il faut aussi tirer sur les bords des fenêtres, sinon elles rétrécissent. Plus tard dans la partie, des fenêtres supplémentaires contenant des boss ennemis apparaissent aussi.
Vidéo de gameplay : https://youtu.be/7iP68FZWVxM
Le lien vers le tweet original de Bjorn Staal a disparu ; je me demande s’il existe un lien permettant de voir ce que c’était.
Ça me rappelle une démo sympa où l’on jouait à Pong avec des fenêtres de navigateur : http://stewd.io/pong/
Je me demande si quelqu’un peut expliquer ce que ça signifie. Je ne suis pas sûr d’avoir bien compris le GIF sur la page GitHub non plus ; on dirait simplement que les fenêtres partagent des données.
C’est chouette. Il me semblerait plus naturel que le rectangle de la fenêtre active soit dessiné au-dessus.
Mais je ne comprends pas pourquoi il y a de la latence. À ce niveau, ça devrait être assez simple pour être traité instantanément, non ?
Même en natif, faire bouger deux fenêtres différentes exactement en même temps et instantanément n’est pas toujours trivial. Par exemple, il y avait un article expliquant que certains toolkits GUI rendent impossible un redimensionnement fluide des fenêtres. Même si vous construisez tout vous-même, il faut espérer que le système soit assez performant pour prévenir rapidement la fenêtre et pousser le bitmap à l’écran. Une meilleure approche consiste à utiliser le compositeur logiciel/matériel global du système, à ajouter des calques par objet, puis à ne modifier que les coordonnées ; mais même là, il faut que le compositeur soit assez bon pour gérer, quand c’est nécessaire, plus de 60/120/144 rafraîchissements par seconde.
C’est un usage amusant de LocalStorage.
J’ai déjà utilisé la même technique de partage via LocalStorage pour mettre à jour une fenêtre cible lorsque des paramètres changeaient dans une autre fenêtre du navigateur. Pour la mise à jour, il suffit d’écouter l’événement
storage.onChanged.