Si Charles Sannat dit vrai alors Donald Trump peut encore remporter l'élection états-unienne pour cause de non-constitutionnalité des votes par correspondances dans au moins quatre états ! (o_Ô)
Apparemment les votes par correspondance ont été mis en place par le pouvoir exécutif (c-à-d. le gouverneur de ces états) or seul le pouvoir législatif (c-à-d. parlements/chambre des représentants) a le droit de changer ce dispositif.
Bref, si la non-constitutionnalité est avérée par la Cours Suprême, alors deux cas de figure sont possibles :
- Soit les votes par correspondance sont annulés => et Trump gagne.
- Soit les voix des grands électeurs de ces états sont annulés => et Trump gagne.
Bref, je n'imagine même pas la pression qui doit peser sur les juges... En attendant, popcorn mes amis \(^__^)/
J'ai été très critique sur le code proposé par Collin Damon car en voulant montrer ce qu'est la OOP le seul exemple qu'il donne d'API à se fabriquer est entièrement statique.
Je reprends donc son exemple et je vais tenter de le rendre objet :
public final class Assert {
private Assert() {}
public static void notNull(String fieldName, Object input) {
if (input == null) {
throw MissingMandatoryValueException.forNullValue(fieldName);
}
}
public static void notBlank(String fieldName, String input) {
if (input == null) {
throw MissingMandatoryValueException.forNullValue(fieldName);
}
if (input.isBlank()) {
throw MissingMandatoryValueException.forBlankValue(fieldName);
}
}
public static StringAsserter field(String fieldName, String value) {
return new StringAsserter(fieldName, value);
}
public static class StringAsserter {
private final String fieldName;
private final String value;
private StringAsserter(String fieldName, String value) {
this.fieldName = fieldName;
this.value = value;
}
public StringAsserter notBlank() {
Assert.notBlank(fieldName, value);
return this;
}
public StringAsserter maxLength(int maxLength) {
if (value != null && value.length() > maxLength) {
throw StringSizeExceededException
.builder()
.field(fieldName)
.currentLength(value.length())
.maxLength(maxLength).build();
}
return this;
}
}
}
Étape 1 - Créer une interface qui va exprimer ce que l'on compte faire :
public interface Assertion {
boolean isValid();
}
Étape 2 - Fournir une implémentation pour chaque use case :
Cas de la chaîne de caractères null :
/**
* Cette classe prend un `Object` pour rendre générique le test de nullité.
*/
public final class NotNull implements Assertion {
private final Object value;
public NotNull(Object value) {
this.value = value;
}
@Override
public boolean isValid() {
return this.value != null;
}
}
Cas de la chaîne de caractères vide :
/**
* Il faudra fournir une implémentation de NotEmpty par type testé,
* ce qui peut sembler lourd mais qui a du sens puisque la notion de
* nullité peut changer en fonction du type. Par exemple, une String
* vide n'est pas la même chose qu'un tableau vide.
*/
public final class NotEmpty implements Assertion {
private final String value;
public NotEmpty(String value) {
this.value = value;
}
@Override
public boolean isValid() {
return !this.value.isEmpty();
}
}
Étape 3 - Ajout de la composition
L'assertion composée est elle aussi une implémentation de l'interface Assertion et ne prend que des Assertion en paramètre.
public final class Assertions implements Assertion {
private final Assertion[] assertions;
public Assertions(Assertion... assertions) {
this.assertions = assertions;
}
@Override
public boolean isValid() {
return Arrays.asList(this.assertions).stream().allMatch {
(Assertion it) -> is.isValid();
}
}
}
Étape 4 - Un exemple d'utilisation
public class Main {
public static void main(String... args) {
String toto = "titi";
new Assertions(
new NotNull(toto),
new NotEmpty(toto)
).isValid();
}
}
Dans cet exemple, aucun calcul n'est effectué dans le constructeur et tous les déclenchements sont joués uniquement au moment de l'invocation de la méthode isValid() (on est donc en lazy evaluation), chaque objet possède un à état, tous les attributs sont immutables et les classes aussi (car final), il y a zéro héritage et uniquement de la composition, tout a été codé en interface-first pour s'abstraire des implémentations, enfin les classes étant rikiki, elles sont ultra-simples à tester.
Edit : en Kotlin le mot-clef new disparait car le langage assume qu'un constructeur soit une fonction static à scope global (ce qui est le cas dans le bytecode de Java), du coup la chaîne d'instanciations apparaît comme une composition de fonctions (au sens f o g(x) ou f(g(x))) sans avoir besoin de passer par une fluent API et une monade.
Ce tweet me pose problème parce qu'il vise à susciter de l'émoi via un sous-texte que l'on peut caricaturer de la façon suivante : la LREM c'est le camp du mâââle (ce qui est vrai d'une manière générale, en tout cas de mon point de vue) et nous nous ne pensons pas pareil et puis nous, nous sommes dans le camp du bîîîen...
La question de la trêve hivernale - sur le sujet des expulsions locatives - est un problème complexe qu'on ne peut simplement synthétiser par : on la garde ou on la retire. Et une fois de plus, la LREM s'est plantée à fond ; car les députés LREM font toujours primer leur idéologie néo-libérale et capitaliste sur le réel et le niveau de vie de leurs citoyens mais bon, tant qu'il y a des gens pour les élire hein...
Je m'explique, prenons deux cas de figures :
-
Un ultra-riche propriétaire exclusif d'une SCI (Société Civile Immobilière) fondée sur un patrimoine d'une centaine d'appartements où 95 % d'entre-eux constituent un actif libéré de toute créance ou hypothèque.
-
Un jeune couple vivant en province avec un revenu un peu au-dessus de la moyenne, parents de deux enfants, ayant pris le risque avant la naissance de leurs petits d'acheter deux appartements, un pour y vivre et un pour louer afin d'assurer leur retraite pour le jour où la répartition sera morte et enterrée ; la location payant une partie du crédit, le reste étant à leur charge.
Dans le premier cas, même si 50% du parc immobilier du gérant de la SCI venait à lui faire défaut, il ne serait pas à la rue => le maintient de la trêve hivernale se justifie pour lui. Au pire du pire, et en s'appuyant sur une morale utilitariste, alors mieux vaut une seule personne ultra-riche à la rue que 30 familles de pauvres avec leurs enfants.
Dans le second cas, si la location faisait défaut, c'est le propriétaire qui va à la rue, sauf qu'il s'agit aussi d'une famille et au vue de l'endettement les conséquences peuvent être longues et douloureuses. À cet instant, l'arbitrage doit se faire au niveau des familles : laquelle "pèse" le plus, ou dit autrement laquelle est à prioriser par rapport à l'autre => le maintient de la trêve hivernale est à arbitrer.
Pour convaincre les aficionados de la trêve hivernale, imaginez maintenant que l'un des époux du couple propriétaire se retrouve paraplégique parce que renversé par un chauffard ? Que devons-nous lui dire à lui qui ne pourra plus exercer son job et où cette location se transforme en bien plus qu'un simple moyen de survie ? Que dire si le locataire qui a fait défaut a agressé un couple d'homos dans la rue parce qu'il ne supportait pas ça et que la justice préempte sur son salaire des dommages et intérêts qui auraient dû être son loyer ? Est-ce à la petite famille, certe propriétaire, de payer pour les crimes d'un fanatique ?
Car oui, tous les propriétaires ne sont pas riches, mais cela n'implique pas non plus qu'ils soient pauvres et tous les locataires ne sont pas honnêtes, mais cela n'implique pas non plus qu'ils soient malhonnêtes.
Et c'est ça mon problème avec la règle intransigeante de la trêve hivernale, c'est que façon "dictature communiste", elle considère que toutes les situations sont équivalentes et décide de manière manichéenne ce qui est bien ou mal alors que juste non, la vie ne fonctionne pas comme ça.
Bref, maintenir ou retirer la trêve hivernale n'est pas la bonne question à se poser car du point de vue des deux camps cette dernière n'est pas adaptée. D'ailleurs le fait qu'elle soit très mal adaptée aux petits propriétaires offre sur un plateau d'argent les arguments utiles à l'oligarchie pour la faire retirer, ce que s'est empressée de voter la LREM toujours à la solde du Grand Capital...
Les bonnes questions à se poser étaient : comment mieux gérer les cas de figure ? Comment accélérer les décisions de justices pour qu'il y ait des arbitrages qui ne prennent pas 2 à 3 ans ? Bref, fournir une réponse pragmatique et non idéologique à un problème humain.
Comme le dit l'image, pas plus de 6 à la maison, respect des distances sociales, port du masque obligatoire, limitation des déplacements et bientôt un couvre-feu... Mais quand il faut aller taffer pour les grands patronat et actionnariat, alors là il n'y a plus aucune contrainte.

S'il vous plaît, juste n'élisez plus un banquier d'affaire la prochaine fois, hein... Ses intérêts ne peuvent pas être les mêmes que les nôtres, nous les prolos...
Il y a quelques années, lorsque je passais un entretien dans une grosse banque pour intégrer dans une équipe de coachs crafts, deux coachs m'avaient demandé comment j'assurais ma veille technologique. J'avais alors énuméré tout un tas de sites web dont développez.com et là... Je les ai vu grincer des dents mais genre fort fort fort...
Aujourd'hui, je vois un article qui s'intitule : Tutoriel pour apprendre à développer des objets Java et pas simplement des classes de données et dès le second écran je peux lire ceci :
public final class Assert {
private Assert() {}
public static void notNull(String fieldName, Object input) {
if (input == null) {
throw MissingMandatoryValueException.forNullValue(fieldName);
}
}
public static void notBlank(String fieldName, String input) {
if (input == null) {
throw MissingMandatoryValueException.forNullValue(fieldName);
}
if (input.isBlank()) {
throw MissingMandatoryValueException.forBlankValue(fieldName);
}
}
public static StringAsserter field(String fieldName, String value) {
return new StringAsserter(fieldName, value);
}
public static class StringAsserter {
private final String fieldName;
private final String value;
private StringAsserter(String fieldName, String value) {
this.fieldName = fieldName;
this.value = value;
}
public StringAsserter notBlank() {
Assert.notBlank(fieldName, value);
return this;
}
public StringAsserter maxLength(int maxLength) {
if (value != null && value.length() > maxLength) {
throw StringSizeExceededException
.builder()
.field(fieldName)
.currentLength(value.length())
.maxLength(maxLength).build();
}
return this;
}
}
}
Que des méthodes statiques, un constructeur privé pour bien empêcher les instances, aucun état représenté... Donc sans critiquer l'auteur et son envie de bien faire (car il a le mérite d'avoir écrit quelque chose), cet article rappelle effectivement des principes de l'OOP mais sans jamais les comprendre ni même en illustrer ne serait-ce qu'un seul exemple valable.
L'objet est aux antipodes du static, si vous avez du code statique c'est foncièrement que vous ne codez pas en objet. Et là, le seul exemple de l'article est basé sur ça... Bref, article à mettre à la corbeille, navrée pour son auteur.
Incroyable, dès que j'ai un problème @Philou arrive avec une solution. Ici Maven Daemon qui propose ce que propose Gradle mais avec Maven (en rapport à mon post précédent).
Je teste ça dans la journée :D
Vous savez pourquoi Excel ou LibreOffice Calc c'est pourri et que ça ne devrait jamais être utilisé dans un cadre professionnel qui intervient après l'étape du PoC ?
Parce qu'on ne peut pas écrire de tests/TU avec une feuille de calcul !
Ce faisant il n'y a aucun moyen de prouver que les résultats obtenus soient justes. #AmateurismeSur20
D'où toutes ces erreurs récurrentes qui popent tous les mois dans les grands merdia comme le dernier qui de mémoire disant quelque chose du type : la feuille de calcul des britanniques ne gérait pas assez de lignes/colonnes pour encaisser la quantité de données nécessaires aux statistiques du COVID, du coup les chiffres sur lesquels le gouvernement s'appuyait étaient faux et ont eu une conséquence sur la gestion de la crise sanitaire....
Bref, il faut abandonner Excel et les tableurs d'une manière générale dès qu'ils sont utilisés après la phase d'expérimentation/idéation.
Ça doit faire 4-5 ans que je me remets régulièrement à Gradle dans l'espoir de trouver une solution à un problème pourtant trivial : comment, avec Gradle, mutualiser un processus de build qui doit s'appliquer sur plusieurs projets qui n'ont rien à voir ?
Gradle confond la notion de projets et de modules, donc je dois clarifier ces deux définitions pour la suite :
- Un module, c'est ce qui va produire un jar au sein de votre projet Git et votre projet est composé de modules.
- Donc yn projet, c'est un répo Git et qui en général va produire une application et les modules la composent.
Dans toutes les docs de Gradle, un projet est un module, donc pas besoin d'héritage puisque le build.gradle à la racine va injecter sa conf dans les build.gradle des modules positionnés dans les sous-répertoires.
Sauf que ce genre de bidouilles, ça marche bien dans une startup ne concevant qu'un seul produit, mais imaginez que vous deviez proposer un socle de build gérant Java, Kotlin, Groovy et Scala et qui soit utilisé par 2000 personnes, sur plus de 100 applications et 200 libs, comment faites-vous avec Gradle ?
Permettez-moi de détailler, le processus de build standard inclut :
- La compilation en mode dev (sans optim) et en mode prod (avec optim).
- Les analyses de sécurité.
- Les analyses de code.
- La signature des jars.
- La production des jars des docs et des sources.
- Les analyses des dépendances.
- Etc.
Tout ce processus qui est agnostique du code lui-même DOIT être factorisé pour devenir un standard de l'entreprise et se pose en tant que quality-gate/build-breaker en cas de manquement.
Avec Maven facile, il suffit que le pom parent de votre projet hérite du pom sachant faire tout ça, mais comment faire avec Gradle ? Ce build.gradle "commun" ne peut pas être hérité car Gradle ne permet pas l'héritage et il ne peut pas lancer lui-même le build des 300 répos dont les produits ont des cycles de vie totalement indépendants.
C'est une vraie question car j'aimerai vraiment abandonner Maven (puisqu'il est beaucoup trop lent) au profit de Gradle, mais sans la capacité de mutualiser le processus de build entre deux projets indépendants, cela fait de Gradle un outil pour "amateurs", or sa percée sur le marché me pousse à croire qu'il doit bien exister une astuce mais que je n'ai encore jamais vue. Bref si quelqu'un a l'info...
@Animal je ne sais pas si tu as vu, mais j'avais fait des descripteurs pour produire des packages tar.gz normalisés dans nos pom-bom. Voilà.
Ohhh 😲 mon 😰 dieu 😱 ?! #WTF
Je ne m'attendais pas DU TOUT à cette fin de underzap. J'avais vaguement entendu parler de cette loi visant à interdir de filmer la police mais là ! 🙊 #Vomis
Rappelons-nous que TOUTES les dictactures européennes ont pris le pouvoir légalement dans notre histoire (et a priori ça se vérifie avec presque toutes les dictactures de l'histoire). Le coup du grand méchant armé qui fait son putsch relève du fantasme.
Les gens qui ont voté Macron ont voté pour l'ordre et la discipline, ils n'avaient juste pas compris qu'il s'agirait de l'ordre décidé par un autre et que eux constitueraient le corp des disciplinés. Ne réïtérez pas cette erreur en 2022 par pitié !
Comment résister encore un an et surtout comment rendre une machine arrière possible ?
@Animal merci pour le lien.
@Autres vidéo à faire tourner s'il vous plaît et pensez à appeler le cabinet de votre député + mairie pour leur en parler. Sans pression sur les élus locaux, pas de changement possible.
"[...] et ceci s'appelle l'état de droit."
Pas tout à fait, l'état de droit est un concept allemand qui consite à dire qu'il existe un conseil de "sages" qui vont déterminer ensemble si une loi est conforme ou non à des principes, à une constitution ou à des traités (comme ceux de l'UE comme le TUE et le TFUE). Si la loi ne l'est pas, elle est rejetée. Si c'est un referendum qui ne l'est pas, il est rejeté #LePouvoirAuPeupleParaitIl
Typiquement, c'est le cas en France avec les pouvoir détenus par le Conseil Constitutionnel. L'état de droit, c'est de dire qu'il y a un juge de la loi, au-dessus de la volonté démocratique du peuple lui-même.
Rappel : le Sénat et le Parlement sont des organes anti-démocratiques par essence, donc qu'ils soient soumis à un Conseil Constitutionnel ne me dérange pas le cas échéant.
Je suis profondement démocrate, je ne crois pas en la tyrannie des foules, en tout cas telle que celle décrite par Tocqueville, et en conséquence, je suis profondément contre l'état de droit.
A contrario je suis favorable à la modification des lois de manière démocratique par l'unique voie du referendum via contrôle, organisation et mise en oeuvre par des Ecclesia dont les membres sont tirés au sort modulo certains filtres (âge légal, casier vierge, absence de problèmes psycho-pathologiques, être volontaire, etc).
Par contre, c'est extrêmement transformateur de la société civile et ça pose beaucoup d'autres questions.
Mais cet article est excellent !
Merci à @Sebsauvage pour sa doc et @Shikiryu pour le lien.
Si j''ai bien compris, toute la sécurité du DRM Widevine repose sur le fait que la clef privée permettant de déchiffrer les flux audio/vidéo ne soit pas volée côté client lorsqu'elle est envoyée au navigateur...
Redisons-le nous deux trois fois en décomposant bien les étapes afin d'identifier ce qui clocherait :
- Widevine envoie une clef privée aux navigateurs...
- Widevine envoie une clef privée...
- Une clef privée.
Si la clef qui doit restée privée est communiquée à toute la terre entière c'est qu'elle n'est plus privée bon-sang ! Je compte regarder dans le détail ce qu'il en retourne mais si c'est bien ce que je pense, alors le fait que Google n'emploierait que "les meilleurs des meilleurs des meilleurs Monsieur... Avec mention Monsieur" ne serait bel et bien qu'un mythe !
La petite citation qui va bien :
En plus de cette demande, nous avons déposé une demande distincte de retrait des données sensibles de ce fichier : /widevine-l3-decryptor, parce qu’il contient la clé privée secrète Widevine RSA, qui a été extraite du CDM de Widevine et peut être utilisée dans d'autres technologies de contournement.
@Neko ton post m'a vraiment faite tressaillir. C'est vrai que je fais partie des privilégiés puisque je suis travailleuse indépendante en IT, principalement en finance de marché (donc ce n'est pas vraiment les clients ni le salaire qui me font défaut par rapport à la majorité des gens) et je m'étais arrêtée au décompte "officiel" de 3 millions de chômeurs (mais dans les 2/3 fois plus lorsque l'on débunk les chiffres du gouvernement).
La France de 2020 avec ses 67 millions de citoyens aurait plus de 10 millions de pauvres. Ça fait 15% de la population ! Et les critères sont vraiment très bas pour être considéré comme pauvre !!
La France est un pays du tiers-monde qui vit à crédit ! Comme les USA en fait :( Et pourquoi cette masse incroyable de personnes continue-telle de soutenir des politiques contraires à ses intérêts ? De privilégier la néo-libéralisation à outrance et le dumping sociale institutionnalisé par l'UE ? Vraiment je ne comprends pas.
@Guigui : super je me le note. Merci !
C'est une bêtise que j'ai lu sur internet mais je la trouve amusante car elle fournit une explication à quelque chose qui n'en a pas besoin : pourquoi les vampires doivent-ils boire du sang à votre avis ?
Élémentaire mon cher Watson, c'est parce qu'ils ne peuvent pas s'exposer à la lumière et donc qu'ils ne peuvent pas produire de la vitamine D ; de fait ils sont contraints d'aspirer du sang humain pour en avoir. #Magique
Je vous ai déjà dit que j'adorais les gens sur internet ? J'adore les gens sur internet, voilà (^___^)
Comme le dit l'adage : l'absence de preuve ne constitue pas une preuve d'absence.
Certains états permettent de voter par courrier simple. Mieux encore certains états permettent le vote électronique. Animal me disait qu'il n'y avait pas de recensement de la population aux USA donc aucun état ne saurait précisément combien il possède d'électeurs. Comment vous dire... Même en supposant qu'une seule de ces affirmations soit vraie comment garantir l'absence de fraude ? "Garantir" au sens être capable de le déterminer a minima a posteriori.
Mais bon entre Trump qui est le parangon des misogynes et Biden qui a tous les attraits du prédateur pervers... Je les plains. Dès fois, même un suppôt de la finance comme Macron me semble être un meilleur choix... Oui ou pas en fait.
Je sais que je radote mais décider des lois nous-mêmes, ne pas remplacer le droit de voter par le droit d'élire, cela me semble être la meilleure des solutions pour nous épargner les traîtres, les corrompus ou les tyrans. Après il y a toujours le risque de la tyrannie de la majorité décrit par Tocqueville, mais en comparant ce risque au problème actuel d'une super-caste concentrant tous les pouvoirs et corrompant tout ce qu'elle touche, j'aimerais bien tenter l'autre expérience juste histoire de pouvoir comparer les deux.
Edit : correction de fautes.
@Lou : merci d'avoir pris le temps de me lire et me répondre.
Mon exemple était mal conçu car c'est moi qui y ait introduit un biais basé sur la couleur, mea maxima culpa. Aussi permet-moi d'amender légèrement ton résumé qui est très bien formulé :
Basiquement Antichesse dit « Ce n'est pas raciste, c'est juste que la chaîne de décision qui a mené au développement de cet algorithme considère les riches comme la population par défaut et n'en a rien à foutre des pauvres. »
Ce qui est la définition même des inégalités de classes en fait.
Après je ne connais pas la topologie des USA en termes de répartition des richesses en fonction de la couleur, de la religion ou encore du sexe et de l'âge, mais il y a fort à parier que les noirs ne fassent pas partie des plus riches en moyenne (outil des mathématiques qui écrase/déforme forcément le réel).
Je sais que je l'avais déjà dit mais je crois autant au "racisme systémique" qu'en "la main invisible du marché". Ce sont des leurres qui détournent le regard des "vrais" problèmes :
- Concentration de tout (pouvoir, richesse, célébrité, réseau, influence, etc).
- Absence totale de démocratie (le droit d'élire remplace le droit de voter les lois).
- Corruption partout où elle est nécessaire (pour pérenniser les deux points précédents).
Le prisme construit à partir de la notion de racisme systémique, dès qu'il s'appose devant notre regard, nous empêche de percevoir une caste cosmopolite dans laquelle couleur de peau, religion, orientations politique ou sexuelle n'ont pas d'importance et qui pourtant décide du sens du monde : celle qui se partage l'argent.
Les plus grandes avancées n'ont jamais été réalisées par des luttes blancs vs noirs mais bien par des luttes riches vs pauvres. Le combat doit être vertical et non horizontal et le comprendre collectivement fera la différence entre guerre civile et révolte AMHA.
Un exemple simple : admettons que l'algorithme dont nous parlions soit "raciste", admettons que l'organisation de l'entreprise était telle qu'elle ne pouvait mener qu'au développement d'un tel algorithme. Que se passerait-il alors si nous découvrions que chacune des personnes ayant contribué directement ou indirectement à ce logiciel était noire ? Ou à défaut que parmi ces personnes il existait un ensemble de "non-blancs" non négligeable voire majoritaire ? Dans ce cas de figure, la thèse du racisme systémique ne fonctionnement pas, par contre l'analyse marxiste/trotskiste fonctionne encore et toujours...
Le seul problème systémique en lequel je crois s'appelle le capitalisme, c'est-à-dire le droit d'accumulation illimité ; et si j'y crois c'est parce que ce dernier est inscrit noir sur blanc dans nos textes de loi.
J'interviens actuellement avec @Animal chez un client qui tire 200 Mo de jars pour exposer une simple API REST dont la principale activité se résume à de vulgaires CRUD operations... Comptez en plus 200 Mo de JVM + Tomcat pour la faire tourner et je ne sais combien de Go pour la base Oracle. Le bouzin met 1h40 à builder sur la CI pour vous donner un ordre de grandeur de l'immondice.
Mais pourquoi vous parler de cela ? Donnez-moi le code de l'application jugée "raciste" que je puisse l'analyser, car aucun logiciel ne se résume à "un simple algo". Les softs d'aujourd'hui sont des imbroglio de frameworks où des aspects (au sens Aspect Oriented Programming du terme) sont injectés au runtime en permanence.
Donc à moins que dans le code il y ait quelque chose du type :
if (person.isBlack()) {
treatment.rejected(person)
}
else {
treatment.granted(person)
}
cet algo soit disant raciste a très peu de chance d'être raciste.
Je subodore que comme toujours, l'horreur a été codée avec les pieds, que les tests ont été joués à la main sur des use-cases on ne peut plus standards du type "patient blanc, 50 ans, foie malade" et que les use-cases aux limites du type "patient noir, xxx" n'ont jamais été testés car a priori jugés trop chers et redondant, ou au motif que la population noire états-unienne n'est pas suffisamment importante aux USA pour justifier un investissement particulier (ô joie de cette saloperie de capitalisme).
Ajoutez des critères économiques parfaitement crédibles dans une anti-nation comme celle de l'oncle Sam comme un filtre du type "80% des noirs états-uniens n'ont pas l'assurance santé leur permettant de se faire soigner" et hop, tout un pan de la population est exclue sur un critère débile car les clients patients ne pourront jamais payer leur intervention ; donc pourquoi s'embêter avec eux alors, s'écrit un économiste néo-libéral au fin fond de l'open-space ?
J'affabule à votre avis ? Je divague ? Il y a 4 ans, chez Vidal, sur une application interne écrite en Java/Scala, les use-cases de tests pour identifier des maladies en fonction des symptômes étaient (accrochez-vous) : homme, 40 ans, enceinte, etc.
Oui oui vous avez bien lu : un homme enceinte, comme scenario standard... Mais comment est-ce possible vous dites-vous ? Évident pourtant, parce que c'était plus rapide à jouer, parce que pour chaque méthode/fonction cela représentait moins de valeurs à saisir, moins de variables à initialiser, moins de choses à mocker. Alors les non-développeurs qui crient au scandale, qui disent "l'algo est raciste" et mieux encore qui s'exclament "non c'est le développeur qui est raciste" vous êtes complètement à côté de la plaque je pense.
Nous sommes des plateaux entiers à écrire et modifier à l'arrache des centaines de milliers voire parfois des millions de lignes de code (c'est typiquement le cas où j'interviens avec @Animal en ce moment). Les "algos" comme vous dites commencent dans un endroit du code et souvent se terminent dans deux où trois autres applications qui ne sont même pas écrites avec les mêmes technos. On est trèèèèèès loin des petits scripts bash/python/PHP croquignolets comme tout que vous avez eu la chance de lire ou d'écrire.
En résumé nous savons que :
- Une application médicale buggait dès que le patient était noir.
- Des équipes ont identifié ce problème gravissime qui a certainement tué des milliers de personnes.
- Demain, les développeurs qu'ils soient blancs, noirs ou rose bonbon n'écriront pas plus de TU car ils s'en tapent.
- Aucune sanction pour mise en danger de la vie d'autrui ou assassinat par négligence caractérisée ne pèsera sur l'éditeur du logiciel (mais les SJW auront bien gueulé ce qu'il fallait sur Twitter, ouf l'honneur est sauf).
- Dans quelques temps, une autre "application raciste" fera à la fois la une et la joie des journaux dans un pays où la notion de race humaine existe (ce qui n'est pas le cas en France).
Bref, je note l'article à Torchon/20 et je pense être gentille.
En deux temps :
1) Installez le paquet webp :
sudo apt install webp
2) Ajoutez ce script à votre PATH (il parcourt récursivement une arborescence à la recherche de fichier .webp pour les convertir en .png en supprimant le .webp d'origine) :
#!/usr/bin/env bash
webp_to_png() {
local files fileName
files=$(find . -name "*.webp")
for file in ${files}
do
if [[ "${file}" == *.webp ]]; then
fileName="${file/webp/png}"
dwebp "${file}" -o "${fileName}"
rm "${file}"
fi
done
}
webp_to_png