Soyons lucide, plus d'énergie, température qui va devenir insupportable, plus de ressources en minerais bientôt, je pense que le mieux est d'anticiper la barbarie qui va débarquer, je ne me fais aucune illusion. Cherchons dès maintenant le meilleur moyen de mettre fin à nos vie quand celle-ci deviendra insupportable.
Le cuiseur à œuf a changé ma vie, pas cher (~ 10 balles), rapide, économe en eau, très pratique (pas de casserole à laver), et sur le mien on peut mettre 6 œufs à la fois.
Sur ce sujet, et a mon humble avis, c'est la bienveillance qui te manque.
C'est clairement contre-productif.
Mais bon, ça fait des années qu'on le dit et il continue avec son ton méprisant, son utilisation du "vous" qui lui permet de faire des hommes de paille à combattre, ses procès d'intention, etc.
Si son but est de polariser des gens contre lui, c'est plutôt réussi.
Tu as raison, je ne demande même pourquoi les browsers se permettent d'afficher des images, ça n'a rien à voir avec les prérogatives d'un navigateur web, ils devraient nous inciter à lancer notre viewer d'images favori.
Ok, du coup, quel scénario alternatif proposes-tu pour pouvoir facilement lire des audios/vidéos par internet, de pouvoir les commenter, les partager, etc ?
Le code côté serveur n'est pas le problème de Mozilla. Si qqn a envie de faire tourner un serveur FTP sur un PC sous MS DOS, en quoi est-ce le problème de Mozilla ?
Je ne dis pas que tu as tort, mais je précise juste que la mission de Mozilla n'est pas juste d'être l'éditeur de Firefox.
Et qu'en 2021, sa suppression dans un browser fasse débat me dépasse complètement…
Y'a rien de surprenant, ça s'appelle l'inertie, beaucoup de gens ont un serveur FTP quelque part et n'ont pas envie de passer du temps à basculer sur autre chose, c'est aussi bête que ça…
Yep, ça plus une utilisation savante de la boite "Ajuster le style d'affichage de la vue" et de l'option "Utiliser comme configuration de l'affichage par défaut".
Dans un grand élan schizophrénique, je me répond à moi-même : il suffit d'invoquer le menu contextuel de la vue, de choisir "Trier par" -> "Modifié" et HOP, ça trie la vue et ça reste persistent.
Seul bémol (et qui est de taille), ce trie s'applique maintenant à tous les dossiers :(
Est-ce que Dolphin propose une vue par date de dernière modification ? Pour browser le répertoire de download de son navigateur et retrouver un fichier récemment téléchargé, je trouve ça ultra pratique sur l'explorer de windows par exemple.
Je te recommande également de te pencher sur Elixir et Erlang qui proposent de puissants outils pour faire de la programmation concurrente (et fonctionnelle).
Le plus pitoyable dans ta démarche, c'est encore de catégoriser l'ensemble des intervenants de linuxfr, comme s'ils étaient faits du même moule.
Y'a plein de gens d'horizons différents ici, mais manifestement, malgré leurs désaccords, ils arrivent globalement à voir que ton journal c'est de la merde, ainsi que l'article pointé.
Mais j'imagine que comme on est tous des clones, on a tous tord et toi tu as raison.
Et puis excuse-moi, mais un compte créé dans la foulée ici pour troller et pointer un article de fbezies, faut vraiment nous prendre pour des imbéciles : tu penses réellement qu'on ne sait pas qui tu es ?
Est-il préférable d'ajouter des éléments dans le dom depuis le html, ou de les créer par javascript ? Pourquoi ? (performances ou autres) Quelles règles à respecter à ce niveau ?
On va partir de l'hypothèse qu'on parle d'une application comme la tienne qui tourne entièrement sur le navigateur ou au moins qui délègue entièrement son rendu au navigateur.
Dans ce cas là, la modification du DOM via JavaScript répond essentiellement à des besoins "dynamiques", par exemple, si je veux créer un ensemble de sprites qui correspondent à l'ensemble des objets que j'ai défini en interne dans mon programme JavaScript. Le bon sens veut en effet qu'on automatise le plus de choses pour éviter de se répéter un peu partout dans son programme et dans ce cas là, la page html de base ne devra pas contenir grand chose.
C'est la tendance actuelle pour les "Web Single App" : on définit grosso modo une structure générale statique en HTML et on laisse ensuite le programme gérer le DOM de façon dynamique.
Dans ton cas, tout l'"univers" de ton jeu devrait idéalement être généré par JavaScript, surtout que comme ça, on a pas à faire constamment l'aller/retour entre le code et la page pour avoir une idée de comment tout ça s'articule.
Lorsque l'on utilise fréquemment une référence à un élément du DOM, est-il préférable de faire un appel à la fonction javascript lors de chaque appel, ou de créer une variable globale avec cette référence ?
L'utilisation de variable pour stocker des résultats d'appels de fonction répond principalement à deux besoins :
1/ avoir un cache pour le résultat d'appel de fonction (optimisation)
2/ éviter de se répéter dans le code (maintenabilité)
Dans la plupart des cas, la maintenabilité d'un code est pour moi plus important que son optimisation, et en tout cas, on ne devrait pas se soucier trop tôt de l'optimisation de son programme. Comme dirait Donald Knuth, "Premature optimization is the root of all evil (or at least most of it) in programming."
Dans ton cas, récupérer un élément par son id est quelque chose d'ultra optimisé, surtout par les navigateurs actuels, cela dit, ça reste un appel de fonction.
Dans une boucle de 1 000 000 itérations, utiliser getElementById avoir le même id ne serait probablement pas très malin.
Cependant, dans la grosse majorité des cas, c'est l'élégance du code, la concision et le soucis de ne pas se répéter qui devrait primer, et c'est parfois aussi une question de goût.
En gros, pour moi, dans ton contexte, il n'y a aucun soucis à utiliser getElementById() à chaque fois qu'on a besoin de travailler sur l'élément, si ce n'est que de voir 4 getElementById('toto') au sein du même bloc d'instructions sera pénible à relire/maintenir.
localement, let est limité au bloque tandis que var est limité à la fonction (globalement, il n’y a pas de différence)
J'essaye au possible d'écrire des fonctions courtes donc effectivement, re-déclarer deux fois la même variable dans une même fonction ne m'arrive pas souvent. Mais il est possible que ça soit intéressant dans d'autres cadres. En tout cas, ça ne permet plus d'écrire ce genre d'horreur :
Non, en mode strict, ce qu'on ne peut pas faire, c'est redéclarer la même variable deux fois dans un même scope.
Pour faire une "constante" (*), il faut utiliser const.
Je parlais de "hoisting" plus haut, le var peut être piégeux à cause de ça, let et const ne te permettent pas d'utiliser les variables avant leur déclaration (oui ça semble idiot de faire ça, mais pas mal de développeurs JavaScript usaient et abusaient de ça), et donc, n'avaient pas forcément conscience qu'en déclarant un var toto en plein milieu d'une fonction, toto était en fait remonté en haut de la fonction par l'interpréteur. let est ce que var aurait dû être dès le départ.
Comme === est ce que == aurait dû être dès le départ.
On constate que de nombreuses améliorations des différentes moutures de JavaScript ont pour objectif de corriger les erreurs de jeunesses du langage.
(*) en réalité, seule la valeur de variable est constante, on ne peut pas utiliser const pour faire réellement de l'immutabilité, par exemple.
constobj={a:4};obj.a=5;// parfaitement autorisé
En pratique, la "fausse" immutabilité de const fait que ce dernier est largement plus utilisé que let dans les programmes depuis ES6. A vue de pif, je dirais que j'utilise 15 fois plus de const que de let. (et plus aucun var)
Ca pique un peu de voir autant de variables globales et aussi destructurées, je recommande vivement d'en faire le bilan et de distinguer celles dont tu as besoin pendant toute la vie de ton application (comme difficulte) de celles qui ont une durée de vie courte et localisée (comme PositionX) et qui pourront donc être déclarées au plus proches de l'endroit où elles sont utilisées. Tu peux organiser tes variables de façon hiérarchisée et en partant d'une seule variable globale etat et qui contiendrait l'ensemble des paramètres de ton application.
De manière générale, ne pas hésiter à écrire le plus possible de fonction "pures", c'est plus facile de raisonner dessus quand on relit le code par exemple : la plupart de tes fonctions lisent et écrivent des variables extérieures à elles, c'est difficile de suivre le fil quand on se plonge dedans => ne pas hésiter à utiliser des arguments dans les fonctions pour éviter ce phénomène. Si tu réorganises les variables de ton programme dans un "etat", tu pourrais passer cet "etat" en argument des fonctions pures.
Pas mal de variables sont déclinées en 4 catégories, si j'ai bien compris, ces catégories correspondent à la fois à des index de séries d'objets mais aussi au niveau de difficulté courant. Pour mieux s'y retrouver, je regrouperai toutes ces données de manière plus sémantique (c'est juste une façon d'organiser, y'en a plusieurs possibles) :
Je ne sais pas pourquoi tu n'as pas utilisé le même système de déclaration statique des masses dans le jeu, au lieu d'écrire cette horrible fonction creeMassesBase() :-), ca permettrait de réduire pas mal le nombre de lignes de code et l'expressivité
la fonction estPresent est à la fois dans balance.js et dans outils.js
Cela dit, tu peux la remplacer par monTableau.indexOf(monElement) >= 0 ou bien monTableau.includes(monElement) si tu peux t'en ficher d'internet explorer.
Se tenir à une nomenclature cohérente au niveau du nommage : par exemple, en JavaScript, l'usage veut qu'on commence le nom d'une variable en minuscule (camelCase)
Tu utilises des var et des let, je te recommande de laisser tomber var et d'adopter const, tu éviteras le problème d'hoisting et bénéficieras également de la vérification de mutabilité de la constante
Je recommande l'usage de noms anglais dans le code source si tu souhaites partager ce code en dehors de la francosphere
Y'aurait encore plein d'autres trucs à dire, mais j'arrête là.
En tout cas, beau projet, et ça marche plutôt pas mal sur mon ordi. Je pense qu'une amélioration fonctionnelle serait de guider un peu plus le joueur lorsqu'il souhaite déposer des poids, en mettant par exemple en surbrillance la zone de dépôt, pendant le drag'n'drop.
Je suis franchement plus partagé. Au moment de la mort de Jobs, ça faisait longtemps que son "oeuvre" (selon Stallman) était achevée. Est-ce que Stallman pense vraiment que la disparition de Jobs rendra le monde du logiciel meilleur ? Est-ce que ça n'était pas trop tard de toute façon ? C'est en cela que je trouve la sortie de Stallman assez mesquine et petite.
# Foutu
Posté par Guillaume Denry (site web personnel) . En réponse au journal Changement climatique, que faire ?. Évalué à 2.
Soyons lucide, plus d'énergie, température qui va devenir insupportable, plus de ressources en minerais bientôt, je pense que le mieux est d'anticiper la barbarie qui va débarquer, je ne me fais aucune illusion. Cherchons dès maintenant le meilleur moyen de mettre fin à nos vie quand celle-ci deviendra insupportable.
[^] # Re: Frotter le plat avec de l'ail
Posté par Guillaume Denry (site web personnel) . En réponse au journal Réponse à toutes les recettes de tartiflette. Évalué à 3.
Le cuiseur à œuf a changé ma vie, pas cher (~ 10 balles), rapide, économe en eau, très pratique (pas de casserole à laver), et sur le mien on peut mettre 6 œufs à la fois.
Ça va de l’œuf coque à l’œuf dur.
[^] # Re: Pas plus libre que les autres (Casio/HP) + ho l'excuse...
Posté par Guillaume Denry (site web personnel) . En réponse au journal NumWorks change de licence. Évalué à 9.
C'est clairement contre-productif.
Mais bon, ça fait des années qu'on le dit et il continue avec son ton méprisant, son utilisation du "vous" qui lui permet de faire des hommes de paille à combattre, ses procès d'intention, etc.
Si son but est de polariser des gens contre lui, c'est plutôt réussi.
[^] # Re: Pas plus libre que les autres (Casio/HP) + ho l'excuse...
Posté par Guillaume Denry (site web personnel) . En réponse au journal NumWorks change de licence. Évalué à 8.
Ca dépend ce qu'on entend par "sujets afférents" mais moi ça m'intéresse car le code source du firmware de la calculatrice était disponible.
[^] # Re: FTP aurait dû disparaitre il y a déjà bien longtemps...
Posté par Guillaume Denry (site web personnel) . En réponse au journal Firefox met fin au FTP. Évalué à 7.
Tu as raison, je ne demande même pourquoi les browsers se permettent d'afficher des images, ça n'a rien à voir avec les prérogatives d'un navigateur web, ils devraient nous inciter à lancer notre viewer d'images favori.
[^] # Re: FTP aurait dû disparaitre il y a déjà bien longtemps...
Posté par Guillaume Denry (site web personnel) . En réponse au journal Firefox met fin au FTP. Évalué à 5.
Ok, du coup, quel scénario alternatif proposes-tu pour pouvoir facilement lire des audios/vidéos par internet, de pouvoir les commenter, les partager, etc ?
[^] # Re: FTP aurait dû disparaitre il y a déjà bien longtemps...
Posté par Guillaume Denry (site web personnel) . En réponse au journal Firefox met fin au FTP. Évalué à 3.
Je ne dis pas que tu as tort, mais je précise juste que la mission de Mozilla n'est pas juste d'être l'éditeur de Firefox.
[^] # Re: FTP aurait dû disparaitre il y a déjà bien longtemps...
Posté par Guillaume Denry (site web personnel) . En réponse au journal Firefox met fin au FTP. Évalué à 8.
Y'a rien de surprenant, ça s'appelle l'inertie, beaucoup de gens ont un serveur FTP quelque part et n'ont pas envie de passer du temps à basculer sur autre chose, c'est aussi bête que ça…
[^] # Re: Dolphin est top.
Posté par Guillaume Denry (site web personnel) . En réponse à la dépêche Sortie de Plasma 5.21 . Évalué à 3.
Yep, ça plus une utilisation savante de la boite "Ajuster le style d'affichage de la vue" et de l'option "Utiliser comme configuration de l'affichage par défaut".
[^] # Re: Dolphin est top.
Posté par Guillaume Denry (site web personnel) . En réponse à la dépêche Sortie de Plasma 5.21 . Évalué à 3.
Trouvé !
C'était pas hyper-hyper-trivial mais bon, ça marche impec.
[^] # Re: Dolphin est top.
Posté par Guillaume Denry (site web personnel) . En réponse à la dépêche Sortie de Plasma 5.21 . Évalué à 2.
Dans un grand élan schizophrénique, je me répond à moi-même : il suffit d'invoquer le menu contextuel de la vue, de choisir "Trier par" -> "Modifié" et HOP, ça trie la vue et ça reste persistent.
Seul bémol (et qui est de taille), ce trie s'applique maintenant à tous les dossiers :(
[^] # Re: Dolphin est top.
Posté par Guillaume Denry (site web personnel) . En réponse à la dépêche Sortie de Plasma 5.21 . Évalué à 2.
Est-ce que Dolphin propose une vue par date de dernière modification ? Pour browser le répertoire de download de son navigateur et retrouver un fichier récemment téléchargé, je trouve ça ultra pratique sur l'explorer de windows par exemple.
[^] # Re: micro
Posté par Guillaume Denry (site web personnel) . En réponse au journal [bookmark] GNU nano 5.5 est sorti malgré le couvre-feu. Évalué à 3.
C'est-à-dire ?
[^] # Re: Et aussi varier les adresses
Posté par Guillaume Denry (site web personnel) . En réponse au journal Résolution de l'année 2021 : changez votre mot de passe !. Évalué à 2.
Pas de tv, c'est facile, mais pas de téléphone, chapeau bas
# Erlang/Elixir
Posté par Guillaume Denry (site web personnel) . En réponse au journal Retour d'expérience sur les langages de programmation. Évalué à 7.
Je te recommande également de te pencher sur Elixir et Erlang qui proposent de puissants outils pour faire de la programmation concurrente (et fonctionnelle).
# C'est bon, je sais pas me servir d'un moteur de recherche mais c'est pas grave
Posté par Guillaume Denry (site web personnel) . En réponse au message raccourcis de commandes sous KDE. Évalué à 8.
https://www.reddit.com/r/kde/comments/f3fftj/missing_custom_shortcuts/
=> installer
khotkeys
[^] # Re: Note du journal
Posté par Guillaume Denry (site web personnel) . En réponse au journal Les distributions GNU/Linux, un petit monde en voie d’extinction ?. Évalué à 6.
Le plus pitoyable dans ta démarche, c'est encore de catégoriser l'ensemble des intervenants de linuxfr, comme s'ils étaient faits du même moule.
Y'a plein de gens d'horizons différents ici, mais manifestement, malgré leurs désaccords, ils arrivent globalement à voir que ton journal c'est de la merde, ainsi que l'article pointé.
Mais j'imagine que comme on est tous des clones, on a tous tord et toi tu as raison.
Et puis excuse-moi, mais un compte créé dans la foulée ici pour troller et pointer un article de fbezies, faut vraiment nous prendre pour des imbéciles : tu penses réellement qu'on ne sait pas qui tu es ?
[^] # Re: Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 2. Dernière modification le 08 octobre 2019 à 11:22.
[^] # Re: Et toi, quel est ton avis ?
Posté par Guillaume Denry (site web personnel) . En réponse au journal Python pour la rentrée 2019 - Hors Série - Python revient dans la course face à Node.js. Évalué à 3.
C'est-à-dire ? A part un peu de sucre syntaxique (le mot-clef
class
), je vois pas bien.[^] # Re: Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 2. Dernière modification le 04 octobre 2019 à 13:09.
On va partir de l'hypothèse qu'on parle d'une application comme la tienne qui tourne entièrement sur le navigateur ou au moins qui délègue entièrement son rendu au navigateur.
Dans ce cas là, la modification du DOM via JavaScript répond essentiellement à des besoins "dynamiques", par exemple, si je veux créer un ensemble de sprites qui correspondent à l'ensemble des objets que j'ai défini en interne dans mon programme JavaScript. Le bon sens veut en effet qu'on automatise le plus de choses pour éviter de se répéter un peu partout dans son programme et dans ce cas là, la page html de base ne devra pas contenir grand chose.
C'est la tendance actuelle pour les "Web Single App" : on définit grosso modo une structure générale statique en HTML et on laisse ensuite le programme gérer le DOM de façon dynamique.
Dans ton cas, tout l'"univers" de ton jeu devrait idéalement être généré par JavaScript, surtout que comme ça, on a pas à faire constamment l'aller/retour entre le code et la page pour avoir une idée de comment tout ça s'articule.
L'utilisation de variable pour stocker des résultats d'appels de fonction répond principalement à deux besoins :
1/ avoir un cache pour le résultat d'appel de fonction (optimisation)
2/ éviter de se répéter dans le code (maintenabilité)
Dans la plupart des cas, la maintenabilité d'un code est pour moi plus important que son optimisation, et en tout cas, on ne devrait pas se soucier trop tôt de l'optimisation de son programme. Comme dirait Donald Knuth, "Premature optimization is the root of all evil (or at least most of it) in programming."
Dans ton cas, récupérer un élément par son id est quelque chose d'ultra optimisé, surtout par les navigateurs actuels, cela dit, ça reste un appel de fonction.
Dans une boucle de 1 000 000 itérations, utiliser
getElementById
avoir le même id ne serait probablement pas très malin.Cependant, dans la grosse majorité des cas, c'est l'élégance du code, la concision et le soucis de ne pas se répéter qui devrait primer, et c'est parfois aussi une question de goût.
En gros, pour moi, dans ton contexte, il n'y a aucun soucis à utiliser
getElementById()
à chaque fois qu'on a besoin de travailler sur l'élément, si ce n'est que de voir 4getElementById('toto')
au sein du même bloc d'instructions sera pénible à relire/maintenir.[^] # Re: Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 2.
Bien sûr, aucun soucis
[^] # Re: Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 4.
Si ça t'intéresse, je peux te proposer un patch ou pull request.
[^] # Re: Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 2. Dernière modification le 10 septembre 2019 à 16:22.
J'essaye au possible d'écrire des fonctions courtes donc effectivement, re-déclarer deux fois la même variable dans une même fonction ne m'arrive pas souvent. Mais il est possible que ça soit intéressant dans d'autres cadres. En tout cas, ça ne permet plus d'écrire ce genre d'horreur :
Avec
let
, ça ne passe pas.Non, en mode strict, ce qu'on ne peut pas faire, c'est redéclarer la même variable deux fois dans un même scope.
Pour faire une "constante" (*), il faut utiliser
const
.Je parlais de "hoisting" plus haut, le
var
peut être piégeux à cause de ça,let
etconst
ne te permettent pas d'utiliser les variables avant leur déclaration (oui ça semble idiot de faire ça, mais pas mal de développeurs JavaScript usaient et abusaient de ça), et donc, n'avaient pas forcément conscience qu'en déclarant unvar toto
en plein milieu d'une fonction, toto était en fait remonté en haut de la fonction par l'interpréteur.let
est ce quevar
aurait dû être dès le départ.Comme
===
est ce que==
aurait dû être dès le départ.On constate que de nombreuses améliorations des différentes moutures de JavaScript ont pour objectif de corriger les erreurs de jeunesses du langage.
(*) en réalité, seule la valeur de variable est constante, on ne peut pas utiliser
const
pour faire réellement de l'immutabilité, par exemple.En pratique, la "fausse" immutabilité de
const
fait que ce dernier est largement plus utilisé quelet
dans les programmes depuis ES6. A vue de pif, je dirais que j'utilise 15 fois plus deconst
que delet
. (et plus aucunvar
)# Sur le code
Posté par Guillaume Denry (site web personnel) . En réponse au journal Balance virtuelle, application éducative javascript. Évalué à 10. Dernière modification le 09 septembre 2019 à 17:40.
Quelques remarques en vrac (sur le code) :
difficulte
) de celles qui ont une durée de vie courte et localisée (commePositionX
) et qui pourront donc être déclarées au plus proches de l'endroit où elles sont utilisées. Tu peux organiser tes variables de façon hiérarchisée et en partant d'une seule variable globaleetat
et qui contiendrait l'ensemble des paramètres de ton application.Exemple :
De manière générale, ne pas hésiter à écrire le plus possible de fonction "pures", c'est plus facile de raisonner dessus quand on relit le code par exemple : la plupart de tes fonctions lisent et écrivent des variables extérieures à elles, c'est difficile de suivre le fil quand on se plonge dedans => ne pas hésiter à utiliser des arguments dans les fonctions pour éviter ce phénomène. Si tu réorganises les variables de ton programme dans un "etat", tu pourrais passer cet "etat" en argument des fonctions pures.
Pas mal de variables sont déclinées en 4 catégories, si j'ai bien compris, ces catégories correspondent à la fois à des index de séries d'objets mais aussi au niveau de difficulté courant. Pour mieux s'y retrouver, je regrouperai toutes ces données de manière plus sémantique (c'est juste une façon d'organiser, y'en a plusieurs possibles) :
creeMassesBase()
:-), ca permettrait de réduire pas mal le nombre de lignes de code et l'expressivitéestPresent
est à la fois dansbalance.js
et dansoutils.js
monTableau.indexOf(monElement) >= 0
ou bienmonTableau.includes(monElement)
si tu peux t'en ficher d'internet explorer.camelCase
)var
et deslet
, je te recommande de laisser tombervar
et d'adopterconst
, tu éviteras le problème d'hoisting et bénéficieras également de la vérification de mutabilité de la constanteY'aurait encore plein d'autres trucs à dire, mais j'arrête là.
En tout cas, beau projet, et ça marche plutôt pas mal sur mon ordi. Je pense qu'une amélioration fonctionnelle serait de guider un peu plus le joueur lorsqu'il souhaite déposer des poids, en mettant par exemple en surbrillance la zone de dépôt, pendant le drag'n'drop.
[^] # Re: Bien fait!
Posté par Guillaume Denry (site web personnel) . En réponse au journal [HS][Nécrologie] Ariane, du Club Dorothée, est décédée/bronsonisée à 61 ans. Évalué à 5. Dernière modification le 05 septembre 2019 à 11:29.
Je suis franchement plus partagé. Au moment de la mort de Jobs, ça faisait longtemps que son "oeuvre" (selon Stallman) était achevée. Est-ce que Stallman pense vraiment que la disparition de Jobs rendra le monde du logiciel meilleur ? Est-ce que ça n'était pas trop tard de toute façon ? C'est en cela que je trouve la sortie de Stallman assez mesquine et petite.