Idée qui m'est venue à la lecture de cet article. J'ai ouïe dire que la bureaucratie de l'UE rêve d'une taxe carbone afin de résoudre les problèmes de pollution.
Oui parce que tout le monde sait bien qu'il vaut mieux taxer des pratiques polluantes plutôt que de les interdire par la loi et de lourdes peines...
Bref, ok pour la taxe carbone faute de mieux, mais dans ce cas, que le bilan carbone des allers-retours sur site imposés aux salariés, soit intégré au bilan carbone de l'entreprise qui aurait pu autoriser le télétravail, mais qui ne l'a pas fait, et non au bilan carbone des salariés...
Les retours sur site sont à présent motivés pour maintenir le contrôle et la soumission dans l'esprit des salariés, pas pour la productivité.
La grande bourgeoisie déteste savoir que le peuple, y compris la petite bourgeoisie, fasse ce qui lui plaît alors qu'on vient de leur interdire quelque chose.
Puisse IBM crever sous les refus.
Du coup je voudrais savoir. Est-ce que je peux télécharger des musiques et des Blu-Ray ? C'est pour l'apprentissage de mon IA...
ლ(ಠ_ಠ ლ) #DeuxPoidsDeuxMesures
C'est formidable ! Grâce à l'IA, les deepfakes, technique qui consiste à intégrer le visage de quelqu'un sur le corps d'une actrice X en pleine scène pornographique, existent depuis plusieurs années... Mais JA-MAIS le moindre gouvernement ne s'est inquiété du problème.
Par contre, là c'est l'hyper-bourgeoise Taylor Swift qui a été la victime. Certes pas de deepfake, mais d'une technique similaire : la génération par IA, d'images à caractère pornographique. Donc ça ne rigole plus ! On ne touche pas à la grande bourgeoisie ! Nous allons agir, et dans les plus brefs délais !
Cette caste d'individus de pharaons ne se préoccupe vraiment que d'elle-même, et ne légifère qu'à sa convenance et que pour défendre ses propres intérêts.
Essayons de voir le côte positif, cela permettra enfin de protéger nos gosses de potentielles humiliations publiques.
Ah oui, dans l'agacement j'ai failli oublier mes classiques :
Oh my god ! It's awful, it's totally disgusting... And where those pictures can be found ? :P
Je dois refaire du front depuis la semaine dernière et c'est bien moins facile que dans mon souvenir.
Ici, un post sur SOF qui explique comment séparer ses CSS de sorte à limiter les impacts lors des refactos, et faciliter la maintenance et évolutions (e.g. créer des composants multi-thèmes).
L'ostéopathie est une fausse médecine. Il n'y a pas d'étude clinique qui démontre ses effets au delà de l'effet placebo.
Pire encore, les études réalisées par de vrais médecins démontrent que l'ostéopathie ne marche pas et ici, un chirurgien relate les conséquences désastreuses de l'ostéopathie sur les enfants qu'il a dû soigner.
Une soirée de plus où j'entends raconter n'importe quoi en famille, ce qui me pousse à réagir. Là, mon neveu de quelques mois risque de subir des manipulations crâniennes parce que sa mère croît qu'un nerf se serait coincé entre les petits os pas encore consolidés sur le dessus de sa tête, et qu'une manipulation ostéopathique résoudra ses problèmes de déglutition.
J'étais sidérée de constater que son père ne se manifestait pas et qu'à aucun moment, l'idée de demander une radio ou une échographie, n'ait traversé leurs esprits avant d'aller tenter une manipulation à l'aveugle.
D'ailleurs, un praticien qui vous manipule sans observation clinique est pour moi est le marqueur catégorique du charlatanisme !
J'espère qu'il n'aura rien, le pauvre choux 😟
Le monsieur m'a fait rire. Il m'a fait pensé au souvenir que j'ai de mon Papa quand j'étais ado.
Si je reposte cette vidéo, sur laquelle je suis tombée purement par hasard, c'est parce qu'il y a plusieurs mois (années ?) j'avais lu un poste d'un shaarliste qui disait que la bourgeoisie prêtend que seuls les métiers à très haute valeur ajoutée, requièrent des compétences techniques ; c'est même un enjeu pour elle.
Ma capacité d'abstraction me permet certes de comprendre ce que dit le monsieur lorsqu'il le présente, mais à sa place, aurais-je réalisé une toiture aussi bien faite (résistance, étanchéité, etc) de façon spontanée, grâce à de la pure logique ?
Non, juste trop pas !
C'est parce que construire une toiture implique de posséder une multitude de savoirs techniques, allant des outils, en passant par les produits, et jusqu'aux principes de montage et d'assemblage.
Certes tout le monde ne parle pas quatre langues, n'écrit pas dans un français parfait, ou ne comprend pas les maths ; mais ce n'est pas pour autant que leur métier n'impose pas connaissance, maîtrise et expertise. Tout comme nous, leur domaine les a forcé à un apprentissage lent et rigoureux, les outils intellectuels sont simplement différents.
Je ne sais pas si je hais plus la petite bourgeoisie des cadres bobo parisiens qui méprise le peuple pour se sentir plus riche qu'elle ne l'est, ou la grande bourgeoisie qui n'a qu'elle-même en considération...
En tout cas, mes meilleurs vœux aux ouvriers travailleurs. Vous vous brisez le corps pour réparer ce qui casse et construire ce qui manque afin que nos sociétés survivent. Personne dans un bureau à l'abri des intempéries ne ressentira votre peine et vous méritez gloire et respect.
Je vous remercie et vous affectionne 😗🥰
Avec ma moitié, nous devons refaire l'isolation de la toiture de notre nouvelle maison. Mais comme nous avons trop dépensé ces dernières années, nous sommes partis réaliser cette isolation nous-mêmes.
Pour choisir les bons matériaux plusieurs critères ont été retenus :
-
Le coefficient lambda qui doit être le plus petit possible.
- Il représente la quantité d'énergie qui a réussi a traverser l'isolant pour une section d'une même taille. Donc un lambda hyper bas indique que très peu de chaleur s'échappe.
-
La durée de déphasage qui doit être la plus grande possible.
- Cela représente la durée au-delà de laquelle l'isolant ne peut plus accumuler de la chaleur et donc va la laisser passer. Si votre région est un vrai cagnard en été, alors un déphasage de 8h fait que le soleil de 10h ne se fera pas sentir avant 18h dans votre maison. Alors qu'un déphasage de 4h fait que dès 14h il faudra allumer la climatisation...
-
Le niveau d'affaiblissement au bruit qui doit être le plus élevé possible.
- Attention, les chiffres ci-après sont une moyenne pondéré mais comme le bruit s'étend sur tout une gamme de fréquences audibles, il faut privilégier l'isolant qui correspond à cette fréquence. Par exemple, la laine de roche est super pour les bruits de conversation ou de voiture mais la laine de verre est meilleure pour les bruits d'impacts ou d'objets qui tombent.
=> Lire le PDF en lien.
Bref, avant cette petite étude, je pensais que la laine de verre sortait grande championne mais j'avais tort !
Voici un résumé
Matériaux | Conductivité thermique lambda (- is better) |
Déphasage (+ is better) |
Atténuissement acoustique alpha pour 125 mm (+ is better) |
---|---|---|---|
Laine de Bois | 0,038 | 8 h | 0,60 |
Laine de Roche | 0,035 | 6 h | 0,74 |
Laine de Verre | 0,032 | 4 h | 0,29 |
Plaque de Polyuréthane | 0,020 | 4 h | 0,04 |
Remarque
La laine de bois dans sa version ultra-vraiment-très-haut-de-gamme, c'est-à-dire mélangée avec du chanvre et du polystyrène, parvient à augmenter son coefficient alpha à 0,8 et baisser son coefficient lambda à 0,032 ce qui fait de lui l'un des meilleurs isolants (mais il semble sa durée de déphasage diminue sans que j'ai pu récupérer les chiffres exacts, donc ne pas prendre cette information comme argent comptant).
Par contre, la résistance au feu, à l'eau et aux nuisibles de la laine de bois est proche de l'infime. Mais pour isoler une toiture à partir d'un 3ème voir un 4ème étage près d'un aéroport, pourquoi pas.
C'est bête mais les USA ne subiraient pas deux fusillades par semaine, ils pourraient très bien poser des brouilleurs 5G dans les écoles.
Mais il faut parvenir à appeler les secours quand ça arrive donc ça n'est pas possible.
La définition même d'un shit-hole.
Le rêve américain est une masquarade et il faut être en train de dormir pour ne pas s'en apercevoir.
Georges CARLIN
Nous sommes en 2024 et ça fait 30 ans que L'Union Européenne demande à la France de privatiser son système de retraite, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
Mais c'est pas finit !
Ça fait 30 ans que l'Union Européenne demande à la France de privatiser l'éducation nationale, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
Mais c'est pas finit !
Ça fait 30 ans que l'Union Européenne demande à la France de privatiser la santé publique, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
Mais c'est pas finit !
Ça fait 30 ans que l'Union Européenne demande à la France de privatiser les transports publics, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
Mais c'est pas finit !
Ça fait 30 ans que l'Union Européenne demande à la France de détruire son agriculture, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
Mais c'est pas finit !
Ça fait 30 ans que l'Union Européenne demande à la France de privatiser l'énergie, ça fait 30 ans que les français ne veulent pas, et ça fait 30 ans qu'ils élisent systématiquement des dirigeants en faveur de l'Union Européenne et de cette directive.
En fait, ça fait 30 ans que les français votent comme des cons. C'est agréable de savoir que certaines choses ne changent pas 🥳
Pour tout le reste, il y a les privatisations de l'Union Européenne 🫠
J'ai décidé de taper autant que je le pourrai sur Mozilla, ce fond d'investissement qui se fait passer pour une ONG au service du logiciel libre. Ce post est donc un hommage à @Sebsauvage et sa section Les trucs qui m'énervent.
Depuis quelques mois, l'un des trucs qui me font pester contre Firefox c'est que dès qu'il ouvre un PDF dans un nouvel onglet, cet imbécile l'enregistre systématiquement dans ~/Téléchargements
; et non plus dans /temp
.
Ce qui fait que ce répertoire qui était à moi est à présent blindé de centaines de fichiers inutiles que Firefox y a déposé sans me demander mon avis, et au milieu, j'ai mes quelques fichiers bien précieux que je souhaitais conserver mais qui deviennent très difficiles à retrouver parce que je ne sais pas forcément distinguer leurs noms.
Donc à chaque fois, c'est parti pour non seulement un quart d'heure d'ouverture / relecture, mais en plus pour un nettoyage manuel et régulier de ce répertoire. Comme si je n'avais que ça à faire... #FuckYouMozilla
Voilà Mozilla, dorénavant je te hais. Tu viens d'atteindre le niveau Macron/Soros.
Tout est dans le titre.
L'article propose une explication des éléments constitutifs de la lib Normalize.css
afin de comprendre les choix qui y ont été faits, leurs conséquences et la motivation à leur origine.
Dans la pratique, plutôt que d'annuler les CSS intégrés aux différents navigateurs, Normalize.css
tente de les faire converger vers un même rendu.
J'approuve la démarche !
Edit le sevrage brutal m'a permis de me rendre compte de trucs complément dingues ! 😱 Par exemple je lisais True Beauty et un passage m'a fait rire. Aussitôt, mon premier réflexe a été d'ouvrir un onglet pour me rendre sur mon réseau sociale préféré. Car oui, j'ai assimilé les pics de rire, et donc de dopamine, à ce site. Ainsi quand j'en ai un, je veux y retourner et c'est involontaire 😣
Cela fait 5 jours et je n'ai pas craqué, mais à présent, je suis rentrée dans la phase consciente du manque, ce qui fait que j'y pense plusieurs fois par jour, notamment à chaque fois que je m'ennuie.
Vidéo courte expliquant la boucle d'addiction engendrée par TikTok sur notre cerveau. On peut étendre cela a bien d'autres sites web : Instagram, Pinterest, Imgur, 9gag, Facebook, etc.
Ces réseaux de consommation de vidéos ou de textes courts ne sont pas des réseaux sociaux mais des systèmes d'addiction qui s'étendent à l'échelle mondiale. Ces sites distillent une drogue dure directement dans notre cerveau, la dopamine, ce qui nous empêchera de jouir pleinement de notre temps de vie une fois atteints 😨
Je me suis pris une claque pendant la vidéo car cela faisait plusieurs mois que je me voyais scroller comme une abrutie en sachant que cela ne m'apportait rien. Ce qui me met un stop à chaque fois, c'est de repenser à @Strawberry qui me disait qu'elle se voyait comme une zombie devant son mobile, et souvent, moi, c'est pareil 😥
Je me vais y mettre un terme ce soir même. Ce sera mon effort à tenir cette année et pour le restant de ma vie. Bonne chance à tous ceux qui s'en sont rendus compte et qui traverseront la même chose.
En quelques étapes :
-
Mettre à jour son système
sudo apt update && sudo apt upgrade
-
Cloner le projet
git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git
-
Exécuter le script d'installation présent à la racine du répo Git fraîchement cloné.
sudo ./retropie_setup.sh
-
Choisir les options d'installation dans l'utilitaire. Apparemment "Basic install" convient dans la plupart des cas.
La dysphorie de genre et la dysphorie d'une manière générale sont-elles des troubles mentaux ?
Très difficile d'aborder cette discussion en famille, tant le sujet est porté sur l'émotion et la morale.
Selon Wikipédia, ce sont des termes cliniques définis et utilisés en psychiatrie afin de caractériser un trouble chez un patient. Donc oui, pour l'instant la dysphorie est bien considérée par la médecine comme une pathologie, mais la question est : pour encore combien de temps ?
En effet, l'homosexualité était, elle-aussi, considérée comme un trouble mentale pendant des décennies avant que la psychiatrie ne se corrige. Quid de la dysphorie ?
Mon point de vue sur la question est pragmatique, pour peu qu'il intéresse quelqu'un :
-
Pour qu'un homosexuel puisse être homosexuel, il suffit que personne n'intervienne. Durant la vie du sujet, il n'y aura aucun effort à fournir pour maintenir sa état d'homosexuel. Être homosexuel est sa condition de base.
-
Pour qu'une personne puisse devenir trans, il faut qu'un médecin intervienne, d'abord via des traitements hormonaux et éventuellement via une ou plusieurs opérations chirurgicales. S'enchainera après des soins de santé toute la vie de la personne afin de maintenir son état à flot. La transexualité n'est pas sa condition de base.
C'est à cause cette intervention médicale, qui arrivera forcément à une étape ou une autre du processus de transition, que je pense que la dysphorie de genre restera considérée comme une pathologie; puisque impliquant un traitement... Enfin tant que l'idéologie de normalisation des minorités et d'anormalisation de la majorité n'y mettra pas son grain de sel.
Extrait de la page Wikipédia
Dysphorie de genre est une qualification médicale utilisée dans le manuel de l'Association américaine de psychiatrie (APA) pour décrire la détresse d'une personne transgenre face à un sentiment d'inadéquation entre son genre assigné et son identité de genre. Au fur et à mesure des révisions de ce manuel, les expressions transsexualisme, incongruence de genre puis dysphorie de genre ont été successivement utilisées. Depuis 2013, l'APA insiste sur le fait que « la non-conformité de genre elle-même n'est pas un trouble mental. La dysphorie de genre est caractérisée par la présence associée d'une souffrance clinique significative[1]. »
Ce trouble affecte de 0,005 à 0,014 % des personnes nées de sexe masculin, et de 0,002 à 0,003 % des personnes nées de sexe féminin[2].
Excellent !
Cela me donne envie de faire cette comparaison :
-
Les entreprises font ce qu'elles veulent, l'emprunte carbone, l'éco-conception, c'est du bullshit face au bénéfice perçu par le sacro-saint actionnariat même pas fiscalisé en France en plus (hein si encore ça finançait nos retraites et nos écoles).
-
Par contre, pour être éco-responsable, les citoyens quant à eux doivent éviter de manger de la viande, préférer les transports en commun ou le vélo, utiliser des pailles en carton recyclé qui s’effritent en 2 min et ne plus pouvoir séparer les bouteilles de leur bouchon... Sans parler des e-mails à effacer et toutes les autres banalités qui vont avec.
Peut-on parler des empruntes carbone et énergétique de ces lave-linges LG ? Peut-on parler d'une loi qui protégerait vraiment les humains de ces réels pollueurs ? Peut-on lancer un mouvement qui boycotterait des marques comme LG qui n'en ont rien à carrer de leur impact environnemental ? Peut-on demander aux députés "verts" ce qu'ils en pensent et ce qu'ils comptent faire pour empêcher cela ? Parce que ça fait 40 ans qu'on les attend...
Les masses prolétaires sont le carbone que l'élite veut réduire. Plus vite l'humanité le comprendra et mieux elle pourra se défendre.
C'est pourquoi je pense à présent qu'il faut polluer individuellement un maximum jusqu'à ce qu'une loi intransigeante soit rédigée. Une loi interdisant aux faibles comme aux puissants le moindre écart.
En attendant, l'éco-responsabilité n'est ni plus ni moins que de la propagande visant à laver les cervelles et éviter de regarder l'incendie au milieu de la forêt, nommons-le : l'hyper-bourgeoisie et les multi-nationales.
Cela peut se faire à partir de 2 ans. Le fait que l'État ne reconnaîtrait pas l'autisme avant les 10 ans du patient est une légende urbaine.
À ce jour, le diagnostic de l’autisme est clinique. Le plus souvent, le diagnostic peut être établi à partir de l’âge de 2 ans. Il repose sur un faisceau d’argument s cliniques recueillis dans des situations variées par différents professionnels. Il est associé à une évaluation des troubles et des capacités ainsi qu’à la recherche de maladies associées. Il se fait en collaboration avec la famille.
Edit comme j'avais des doutes sur le benchmark lancé depuis Intellij, j'ai recodé un comparatif complet qui aura tourné 4 heures sur ma machine
Avec Kotlin, sous Java 21, en utilisant JMH, j'obtiens des résultats en total contradiction avec ceux obtenus via IntelliJ. L'écart passe de 12% à 2,2% dans le pire des cas.
Pour mon benchmark, j'ai calculé la longueur d'une String
avec la fonction suivante : 2 * str.length + 1
. Le but étant d'illustrer quel type d'appel est le plus rapide pour effectuer ce calcul.
Voici mes tableaux de comparatifs :
Benchmark (Sorted by Worst) | Score | Error | Worst | Best | Units | Note Relative | Gain |
---|---|---|---|---|---|---|---|
ValueClass(str).size() | 2 252 | 34 | 2 218 | 2 287 | ops/us | 1,000 | 0,0 % |
build_lambda(str)() | 2 269 | 25 | 2 244 | 2 294 | ops/us | 1,012 | 1,2 % |
Class::size(str) | 2 282 | 37 | 2 245 | 2 320 | ops/us | 1,012 | 1,2 % |
OpenIntance(str).size() | 2 275 | 27 | 2 249 | 2 302 | ops/us | 1,014 | 1,4 % |
Instance(str).size() | 2 285 | 37 | 2 249 | 2 322 | ops/us | 1,014 | 1,4 % |
DataClass(str).size() | 2 273 | 22 | 2 251 | 2 295 | ops/us | 1,015 | 1,5 % |
object.method(str) | 2 272 | 19 | 2 253 | 2 291 | ops/us | 1,016 | 1,6 % |
this.size(str) | 2 282 | 28 | 2 254 | 2 310 | ops/us | 1,016 | 1,6 % |
build_anonymous_function(str)() | 2 266 | 5 | 2 261 | 2 271 | ops/us | 1,019 | 1,9 % |
Benchmark (Sorted by Best) | Score | Error | Worst | Best | Units | Note Relative | Gain |
---|---|---|---|---|---|---|---|
build_anonymous_function(str)() | 2 266 | 5 | 2 261 | 2 271 | ops/us | 1,000 | 0,0 % |
ValueClass(str).size() | 2 252 | 34 | 2 218 | 2 287 | ops/us | 1,007 | 0,7 % |
object.method(str) | 2 272 | 19 | 2 253 | 2 291 | ops/us | 1,009 | 0,9 % |
build_lambda(str)() | 2 269 | 25 | 2 244 | 2 294 | ops/us | 1,010 | 1,0 % |
DataClass(str).size() | 2 273 | 22 | 2 251 | 2 295 | ops/us | 1,011 | 1,1 % |
OpenIntance(str).size() | 2 275 | 27 | 2 249 | 2 302 | ops/us | 1,014 | 1,4 % |
this.size(str) | 2 282 | 28 | 2 254 | 2 310 | ops/us | 1,017 | 1,7 % |
Class::size(str) | 2 282 | 37 | 2 245 | 2 320 | ops/us | 1,021 | 2,1 % |
Instance(str).size() | 2 285 | 37 | 2 249 | 2 322 | ops/us | 1,022 | 2,2 % |
Benchmark (Sorted by Score) | Score | Error | Worst | Best | Units | Note Relative | Gain |
---|---|---|---|---|---|---|---|
ValueClass(str).size() | 2 252 | 34 | 2 218 | 2 287 | ops/us | 1,000 | 0,0 % |
build_anonymous_function(str)() | 2 266 | 5 | 2 261 | 2 271 | ops/us | 1,006 | 0,6 % |
build_lambda(str)() | 2 269 | 25 | 2 244 | 2 294 | ops/us | 1,007 | 0,7 % |
object.method(str) | 2 272 | 19 | 2 253 | 2 291 | ops/us | 1,009 | 0,9 % |
DataClass(str).size() | 2 273 | 22 | 2 251 | 2 295 | ops/us | 1,009 | 0,9 % |
OpenIntance(str).size() | 2 275 | 27 | 2 249 | 2 302 | ops/us | 1,010 | 1,0 % |
this.size(str) | 2 282 | 28 | 2 254 | 2 310 | ops/us | 1,013 | 1,3 % |
Class::size(str) | 2 282 | 37 | 2 245 | 2 320 | ops/us | 1,013 | 1,3 % |
Instance(str).size() | 2 285 | 37 | 2 249 | 2 322 | ops/us | 1,015 | 1,5 % |
Conclusion après benchmark
Créer des instances à la Yegor Bugayenko semble être globalemment l'une si ce n'est la meilleure des solutions lorsque l'on observe son positionnement qui est au pire moyen sinon deux fois premier.
J'ai passé le nouvel an avec @Kysofer & @Chlouloutte. Quand tous les enfants ont le même âge c'est vraiment sympa ; surtout quand ils se couchent tous en même temps :P
Mais passons, ce matin après ce qui sera déjà l'une des plus courtes nuit de cette nouvelle année, je discute avec @Kysofer de ces projets pour 2024, il me sort un truc improbable :
Je pense que je vais abandonner la programmation orientée objet pour la programmation fonctionnelle...
Là, je le regarde limite choquée... Il faut dire que lui et moi partageons - je devrais dire partagions - le même avis sur la programmation fonctionnelle, notamment depuis nos déboires en OCaml (merci le programme de MPSI).
Donc, avec le plus grand respect je lui réponds :
Nani the fuck !?
À ma décharge je n'ai pas bu un seul verre d'alcool depuis la grossesse de ma petite dernière. Et oui. :P
Là il m'explique tout un tas de trucs et je dois dire que je me sens déstabilisée. Je m'explique, j'ai vécu trop de fois le fait de devoir maintenir du Scala pour savoir à quel point, sur le temps long, la programmation fonctionnelle pure devient encore moins maintenable que du Java + Spring Boot.
D'autant que je m'attendais à ce qu'il m'annonce qu'il allait (enfin) se monter un Shaarli.
Bref son idée est dirigée par les contraintes suivantes :
- Avoir un code dirigé par des contrats (au sens interfaces Java) dont le respect du typage est prouvé lors de la compilation et garanti lors de l'exécution.
- Ne pas avoir besoin de créer des instances techniques qui implémentent ces contrats, afin d'encapsuler des données dedans.
- Parvenir quand même à encapsuler les données pour les protéger mais sans jamais créer de nouvelles instances (cf. le point précédent).
- Avoir les mêmes performance d'exécution que du chaînage d'appels de fonctions
static
; et donc l'eldorado du zero GC-time. - Permettre une exécution différée/lazy/paresseuse.
Quand on lit le truc, on se dit que la vie n'est plus à un paradoxe prêt, mais pourtant sa façon de faire fonctionne.
Je vais essayer de vous décrire ce qu'il m'a expliqué afin de mieux l'ingérer moi-même.
Exemple : Déterminer si deux trucs sont égaux
Dans tous les cas de figure, nous allons supposer que les données sont décorées par une implémentation de l'interface suivante qui permet de les représenter sous la forme d'un tableau d'octets.
interface RawData {
fun asBytes():ByteArray
}
Version OOP Pure
1) On exprime le concept de vérification via une interface :
interface Check {
fun status():Boolean
}
Ensuite on fournit une implémentation de l'interface Check
qui soit spécialisée dans la comparaison de deux RawData
:
class IsEqual(
private val left:RawData,
private val right:RawData
):Check {
override fun status():Boolean {
return this.isSameInstances() || this.haveSameBytes()
}
private fun haveSameBytes():Boolean {
return left.asBytes().contentEquals(right.asBytes())
}
private fun isSameInstances():Boolean {
return left === right
}
}
Et ça s'utilise comme ceci :
val left:RawData = StrAsData("same data")
val right:RawData = StrAsData("same data")
val comparison:Boolean = IsEqual(left, right).status()
Problème
Pour comparer deux objets on doit forcément créer une instance de IsEqual
puis invoquer une méthode dessus. Sur JRE, c'est ~12% de temps de calcul supplémentaire par rapport à un simple appel de méthode statiques !
Version PF pure
Avant toute chose, il faut comprendre ce qu'est un contrat pour @Kysofer. C'est un truc qui va prouver à la compilation que les types d'entrée et de sortie soient bien respectés, ce qui fait que l'implémentation A pourra se substituer à l'implémentation B sans problème lors du runtime.
Mais comment peut-on produire l'équivalent d'une interface en PF ?
=> On passe par des fonctions de premier ordre.
En effet, une méthode qui reçoit une fonction de premier ordre ne sait pas ce qu'elle va exécuter. Elle sait juste que la fonction prendra un certain type en entrée et un certain type en retour. Le reste, c'est le compilateur qui agit.
Si l'on reprend l'interface Check
cela nous donne le prototype suivant :
val prototype:() -> Boolean
C'est-à-dire un Predicat
sans paramètre.
Maintenant passons à l'implémentation naïve, ceci nous donne :
fun isEqual(left:RawData, right:RawData):() -> Boolean {
return {
isSameInstances(left, right) || haveSameBytes(left, right)
}
}
private inline fun haveSameBytes(left:RawData, right:RawData):Boolean {
return left.asBytes().contentEquals(right.asBytes())
}
private inline fun isSameInstances(left:RawData, right:RawData):Boolean {
return left === right
}
On voit bien que la fonction isEqual(..)
retourne une fonction de premier ordre qui elle-même retournera un Boolean
.
Rappel
En Kotlin, les lambda sont déclarées entre deux accolades { .. }
.
Sauf que cet exemple a un problème puisqu'une lambda, sur JRE tout du moins, c'est une instance de l'interface Function
ou l'un de ses équivalents. Bref, il n'y a pas de gain en terme de performance par rapport la version OOP.
Pour l'obtenir, il suffit de remplacer la création d'une lambda par un pointeur sur une fonction anonyme, ce qui nous donne :
fun isEqual(left:RawData, right:RawData) = fun():Boolean {
return isSameInstances(left, right) || haveSameBytes(left, right)
}
Et la ça devient magique car la fonction anonyme étant écrite directement dans le byte-code et épinglée une et une seule fois en mémoire, cela revient à avoir un pointeur sur fonction qui exécutera la-dite fonction.
=> Soit un gain de 12% en termes de performance, ce qui fait qu'on rattrape la vitesse d'exécution d'un chaînage de méthodes statiques.
Mieux que cela, @Kysofer s'appuie sur une variante de la Curryfication . En effet, la méthode isEqual(..)
sert à encapsuler les données dans la pile d'appel pour les rendre utilisables que par la fonction anonyme. Donc il devient impossible de savoir ce qui sera utilisé par la lambda qui sera retournée.
=> Les paramètres left
et right
sont bien encapsulés dans la lambda !
Si on résume
- Le fait que la fonction
isEqual(..)
retourne une lambda et non un résultat fait que l'on va déclarer un contrat et donc rendre les lambda interchangeables. - Le fait que l'on retourne une fonction et non un résultat permet un calcul différé/paresseux potentiellement dans un autre thread.
- Le fait que l'on passe par une fonction anonyme qui utilisera les paramètres de la fonction déclarée fait qu'on encapsulera bien les données avant d'exécuter quoi que ce soit dessus.
- Le fait que tout soit
fonction
garanti l'absence de création d'instances techniques.
Nous avons donc bien là une version fonctionnelle de l'encapsulation et des contrats de l'OOP.
Ça aura pris 15 ans mais je pense être réconciliée totalement avec la PF (O_O) ; sauf le récursif, ça jamais ! En tout cas pas avant une démonstration comme celle-ci :P
Arf, je commence l'année en lisant un article pareil...
Comment faire pour sauver Firefox alors qu'il n'est plus la priorité de Mozilla depuis quelques années ? Simple, ne l'installons plus chez personne. Firefox doit mourir au profit de ses petits frères comme Waterfox ou Librefox.
Comment le financer ? En donnant à ces forks et non plus à Mozilla.
Comment leur donner de la visibilité ? En assurant que chacun utilise un user-agent qui n'a plus rien à voir avec celui de Firefox du type "Bye bye Mozilla". Quand Mint avait abandonné le user-agent de Ubuntu, alors le rang de Ubuntu avait dégringolé en quelques mois sur Distrowatch.
Comment renforcer Waterfox et Librefox ? En veillant à ce que les communautés derrière ces deux projets fusionnent ou au moins se soutiennent, car on est plus forts à plusieurs.
Ma résolution de cette année sera de contribuer à la mise à mort définitive de Firefox afin qu'un nouvel élu puisse prendre sa place. Un élu qui ne sera structurellement pas noyautable par les GAFAM... 😌
L'UE qui risque de stopper net le logiciel libre en Europe sous le prétexte de la sécurité. En même temps supporter ces "communistes d'internet" comme dirait Balmer, alors que l'UE veut du business et rien d'autre que du business, quelle idée !
Sortons de ce piège à rats où des diplomates non-élus, votent des lois au profit des lobbyings, qui organiseront la société contre nous.
P.S : d'ailleurs l'UPR se présente aux Européennes, si c'est pas beau ça ! (Ce qu'il ne faut pas faire pour d'obtenir du financement et du temps de parole).
La balise <slot>
de HTML5 permet de variabiliser la balise <template>
de HTML5, ce qui représente la moitié des besoins d'une SPA.
À cette heure, les <slot>
sont pris en charge à 96% selon caniuse.