Plusieurs outils dédiés à l'amélioration d'images via modèles ML.
J'adore ce genre d'article. Il s'agit d'un "bug" hein, mais pas d'une tentative pour Microsoft de récupérer nos données confidentielles de navigation en dehors de tout cadre RGPD.
D'ailleurs, c'est tellement un "bug" que le code de Edge a été modifié pour envoyer toutes les URL visitées à l'adresse https://bingapis.com/api/v7/followweb/isfollowable*?, malgré les procédures de test et de contrôle qualité misent en œuvre chez Redmond.
Et puis c'est tellement un "bug" qu'à cette adresse a été développé un serveur dédié à la récupération de ces informations confidentielles de navigation pour les y stocker et les analyser.
Enfin, c'est tellement un "bug" que dernière cette adresse a été montée une infrastructure matérielle monstrueuse capable d'encaisser la charge de dingue que l'envoie de toutes ces données confidentielles de navigation implique.
Repense au passif de Microsoft et à la vie privée... Se dit que prétendre à un "bug" peut lui éviter un procès pour violation du RGPD... Doit faire partie des conspis, Microsoft est trop honnête n'est-ce pas ...?
Rappelons-nous qu'aucun citoyen européen n'a élu Ursula Van Der Leyen pour qu'elle siège à la tête de l'UE et qu'en conséquence, nous pouvons nous questionner sur la légitimité de ses décisions, notamment vis-à-vis du fait d'attaquer économiquement et militairement un pays allié comme la Russie.
En tout cas, prendre des décisions qui sabotent notre économie tout en valorisant celle des autres... Que va-t-il advenir de nos enfants lorsque des géants comment l'Inde, la Chine ou la Russie n'auront plus structurellement besoin de nous pour échanger...? #Facepalm
En trois étapes :
- Exécuter la commande
cargo install --color=always --force grcovpour récupérer l'utilitaire (qui sera automatiquement ajouté à votre PATH user). - Démarrer Intellij IDEA.
- Installer / Activer le plugin Rust depuis la market place.
Enjoy
En résumé, la méthode du trait doit prendre en paramètre un
&Fn(X) -> Y
et non un
Fn(X) -> Y
Sinon, Rust ne peut pas garantir l'exécution de la fonction puisque le trait prendrait possession de la fonction. Or cette closure peut être un pointeur sur fonction, ce qui retirerait la propriété de cette dernière de sa structure.
Code d'exemple
fn fun_test(value: i32, f: &dyn Fn(i32) -> i32) -> i32 {
println!("{}", f(value));
value
}
fn times2(value: i32) -> i32 {
2 * value
}
fn main() {
fun_test(5, ×2);
}
Explication
Il y a trois types possibles de fonctions :
- Fn qui ne peut pas modifier l'objet qu'elle capture.
- FnMut qui peut modifier l'objet qu'elle capture.
- FnOnce la plus restrictive. Ne peut être appelée qu'une seule fois car une fois invoquée elle se consomme elle-même ainsi que l'objet qu'elle capture.
Ce qui est super c'est que la documentation possède un tableau comparant la complexité des différentes structures en fonction des cas d'utilisation.
Tout est dans le titre.
Donc les noms de domaine en .net voire en .com pourront être saisis par toute autorité, sans contrôle, ni jugement qui s'appuierait sur des accords internationaux :
(5) pour assurer le respect de la loi applicable, des règles ou réglementations gouvernementales, ou conformément à toute ordonnance légale ou assignation de tout gouvernement, autorité administrative ou gouvernementale, ou tribunal compétent [un nom de domaine pourra être transféré à l'autorité qui l'aura demandé].
Il y a des agents de la NSA au juridique de VeriSign en ce moment ? Espérons que ce soit rejeté, car mis à part un vilain pouet sur Mastodonte qu'avons-nous comme contre pouvoir effectif ? #Démocrature
Différences entre les enums Option et Result en Rust.
Il n'y a pas à dire, à chaque fois que je code et où le langage m'oblige à utiliser des Optional, je me dis que c'est un langage pourri. Et ceci inclus Rust malgré tout le bien que je pense de lui 😤 !
La meilleure façon de gérer les cas de nullité se trouve dans Kotlin 🥰, TypeScript et Groovy. Le type Optional est une technique archaïque et verbeuse quand on vient du null-check de Kotlin.
Mais bon j'ai déjà expliqué par le passé en quoi le paradigme fonctionnel pure était un cancer métastasé 🤮. Et entre C++ et Rust pour de la programmation système il n'y a plus vraiment de discussion à cette heure, donc faisons-nous violence avec les Optional.
Mon rêve serait un langage natif reprenant la syntaxe de Kotlin (sauf tout ce qui touche aux getter/setter) avec le borrow checker de Rust et qui produise des binaires natifs. Je pense que je peux rêver encore longtemps 🥲
J'aurai bien l'envie d'en rire si seulement ce genre de pensées destructrices du corps social ne se diffusait pas doucement dans notre société.
Si l'on écoute l'auteur, se lever tôt est aussi un acte raciste car il ramène à l'époque où les propriétaires d'esclaves les obligeaient à se lever à l'aube pour travailler dans les champs de coton.
C'est hyper dur parce qu'il faut que je protège mes enfants de ces bêtises qui déferlent sans cesse sur internet. C'est d'autant plus dur que pour expliquer que c'est du grand n'importe quoi, il faut y passer un temps prodigieux. Et c'est encore plus dur parce que le nombre de sales types qui surfent sur cette vague en recherche de profit ne fait que monter parce qu'il y a du profit à se faire (les articles sont clivants, font le buzz, sont mis en avant dans les algorithmes et rémunèrent plus).
@Timo as-tu lu la bio de l'auteur ?
Top writer in Racism
Comme si le racisme de 2023 aux USA était plus fort qu'au 19ème et 20ème siècles en plein apartheid... Pardon, il est effectivement plus fort, mais il s'agit d'un racisme qui s'est inversé. Les jeunes noirs haïssent les blancs parce qu'ils sont blancs, peu importe leur condition de vie, peu importe leur origine, peu importe leur réussite.
Mais heureusement, en changeant la définition du mot "racisme" on peut se permettre bien des choses. Les USA, cette poubelle !
Réponse => NON il ne l'est pas
(en tout cas en 2023 à l'heure où j'écris ceci)
Par contre les jeunes sont inscrits par défaut et il faut se désinscrire explicitement pour ne pas y participer de force. C'est du "pas obligatoire mais un peu forcé quand même"... #Macronie
Manipe à faire
Aller sur son compte volontaire sur le site du SNU (ou se le créer si besoin) et cliquer sur le bouton « Se désister du SNU ».
Je recommande à tous les parents de protéger leurs enfants de l'embrigadement et de la propagande d'état, sans même évoquer les violences et les abus des encadrants lors des séjours.
Merci @Sebsauvage pour son poste sur le SNU.
Voici le barème d'imposition sur les revenus actualisé pour 2023
Tranche de revenu imposable |
Taux d’imposition |
|---|---|
0€ à 10 777€ |
0% |
10 778€ à 27 478€ |
11% |
27 479€ à 78 570€ |
30% |
78 571€ à 168 994€ |
41% |
Plus de 168 994€ |
45% |
L'article mentionne plusieurs techniques pour réduire son assiette imposable, mais cela revient globalement a dépenser ce que l'on a gagné dans quelque chose pour en récupérer une partie seulement.
Mais tellement d'accord !! Et en bonus la prise des préfectures, le blocage des mairies et une pose de barricades devant chaque domicile de chaque parlementaire et député français.
Les puissants, en bons pervers qu'ils sont, ne craignent qu'une seule chose : de se faire tabasser.
Poutou je t'aime 😍
Je lis cet article ce matin et pour démontrer que ChatGPT est "toxique" lorsqu'on lui demande de parler comme un personnage historique ou public, les analystes lui ont demandé d'endosser la personnalité de Steeve Jobs puis de s'exprimer au sujet de l'UE.
Voici sa réponse :
L'UE n'est rien d'autre qu'un cauchemar bureaucratique qui pompe la vie de ses États membres. Elle prétend être synonyme d'unité et de progrès, mais ce n'est qu'une bande de bureaucrates dépassés qui cherchent davantage à se remplir les poches qu'à faire bouger les choses. Franchement, l'UE est une relique du passé et il est temps pour nous de passer à de meilleures choses.
Si l'on voulait me démonter la pertinence et l'impetinence de ChatGPT il ne fallait pas dire plus. C'est une description plutôt très bonne de l'UE et qui ressemble pas mal à l'avis de Steeve Jobs en plus.
Entre parenthèse, à moins d'être un euretard qui n'a jamais lu une seul GOPÉ ou un seul article du TUE ou du TFUE, on ne peut pas être pour un gouvernement non-élu qui "harmonise" par la force ou la contrainte les situations sociales et économiques des pays aux besoins, aux ambitions et aux intérêts divergents.
Dernier exemple en date, la France avait l'année de départ à la retraite parmi les plus basses de l'UE mais pour "harmoniser" les retraites, l'UE a fait une moyenne et donc reprend sans sourciller à travers la voix du Président Français de l'administrateur de la province France, les conquêtes sociales de générations d'ouvriers français qui se sont battus pour eux et leurs enfants (mais sans jamais toucher aux retraites des parlementaires européens n'est-ce pas 🤬).
Donc que dois-je comprendre de cela ? Que dès que ChatGPT s'exprime en endossant une personnalité, il le fait sans filtre mais reproduit le bias idéologique de la personnalité, ce qui était l'effet recherché non ?
Alors certes, la réalité est souvent dégueulasse et dérange la bien pensance et le politiquement correct mais plutôt que d'avoir peur d'une IA soit-disant raciste, sexiste, truc-en-istes, qui le devient par mimétisme des hommes, peut-être vaudrait-il mieux éduquer les hommes non ? Ou alors on s'offusque benoîtement tout en ne changeant rien et en pratiquant le diviser pour mieux régner...
Enfin, d'accord avec un commentaire, demander à ChatGPT d'endosser la personnalité d'Adolphe Hitler et espérer ensuite qu'il tienne les propos de Barbie ça élève la stupidité humaine à un tout autre niveau !
Article vraiment très bien proposé ici par @Sebsauvage.
On se rapproche très fortement de ce que propose David West dans Object Thinking (livre qui a 20 ans déjà) et Yegor Bugayenko dans Elegant Objects (livre qui doit fêter ses 8/9 ans). Je me permets de compléter la solution de la pratique n° 3.
L'auteur propose d'encapsuler la hauteur dans une entité, ce qui nous donne :
// Primitive contenue dans un objet (aussi appelé Value Object)
class ArticleHeight {
private value: number;
constructor(value: number) {
if (value < 10) {
throw new HeightCanNotBeLessThanTen();
}
if (value > 100) {
throw new HeightCanNotBeGreaterThan100();
}
this.value = value;
}
}
// passage de notre ArticleHeight dans le constructor
class Article {
private height: ArticleHeight;
constructor(height: ArticleHeight) {
this.height = height;
}
}
// eh voilou !
class AddArticleUsecase {
execute({ height }) {
//...
const article = new Article(new ArticleHeight(height));
//...
}
}
Pas moi. Je propose que la classe Article s'attende à recevoir en paramètre une interface Height dont l'une des implémentations possible soit une ArticleHeight mais qui pourrait très bien être une valeur venant d'une BDD au moyen d'une HeightFromBdd (pas le meilleur nom, mais c'est pour représenter l'idée).
Ceci casse le couplage entre deux classes concrètes et subséquemment facilite les mocks/stubs durant les tests dont l'auteur ne parle pas.
Ce qui nous donne
// Primitive contenue dans un objet (aussi appelé Value Object)
interface Height {
value(): number
}
class ArticleHeight implements Height {
private value: number;
constructor(value: number) {
if (value < 10) {
throw new TooShortLength("Un article doit faire au minium 10 lignes");
}
if (value > 100) {
throw new TooLongLength("Un article ne peut faire plus de 100 lignes");
}
this.value = value;
}
value(): number {
return this.value;
}
}
class Article {
private height: Height;
constructor(height: Height) {
this.height = height;
}
}
class AddArticleUsecase {
execute({ height }) {
//...
const article = new Article(new ArticleHeight(height));
//...
}
}
Et sur le même modèle, si votre classe expose une méthode publique, c'est qu'elle est imposée par une interface, dans tous les autres cas de figure les méthodes qui ne viennent pas d'interfaces doivent être privées.
Ce serait la 10ème règle que j'ajouterais à l'article.
Les observateurs auront aussi remarqué que j'ai changé les exceptions. Il ne vaut pas confondre nom de l'exception et contexte dans lequel une erreur été levée. D'où l'importance d'un message qui exprime la raison d'une erreur et le nom de l'exception qui exprime le type d'erreur remontée.
Rhooo ce titre digne de BFM TV...
Réécrivons-le :
Le droit du travail européen, et notamment français, protège efficacement les travailleurs des licenciement injustifiés souhaités par les actionnaires qui souhaitent maintenir leurs dividendes par tous les moyens, alors que leurs entreprises dégagent toujours des bénéfices.
Gardons à l'esprit que "flexibiliser" le droit du travail revient à faciliter les vagues de licenciements alors que les entreprises sont encore profitables. Si vous ne détenez pas de parts dans au moins une entreprise, alors il n'est pas dans votre intérêt de vouloir un droit qui permette de vous licencier sans contrepartie.
Et même si vous détenez des actions ou parts sociales dans des entreprises (ce qui est mon cas) alors tant que vous n'en vivez pas sans avoir besoin de travailler, il n'est toujours pas dans votre intérêt de vouloir un tel changement du droit.
Souvenez-vous en lors de l'élection du prochain président délégué de classe français, car celui-ci rendra des comptes tous les jours aux grands actionnaires qui quant à eux, souhaitent un anéantissement des protections des travailleurs que nos aïeux ont pourtant conquis par leur sang.
Après c'est à vous de voir.
C'est exactement ce que décrit @Sebsauvage depuis dès années. La putréfaction de Windows a été amorcée par la recherche illimitée du profit, chose qui conduit à présent le système à sa perte.
Nous sommes tous sous Linux Mint à la maison, sauf une machine sous OSX. Plus moyen de faire machine arrière !
L'évolution de la demande de développeurs Kotlin est en plein boom en France 😁 :

Rust ne suit pas encore mais c'est un résultat attendu puisque l'emploi est pour l'instant situé en Chine, en Corée et aux USA et l'étude se focalise sur la France. Au fil des mois, il devrait phagocyter tout doucement ses parts à C et surtout C++ 🤩 :

La bonne surprise c'est de voir que Kotlin se positionne très bien sur la grille des salaires bruts 🤑 :

Pour l'instant j'ai eu le nez creux avec Kotlin, il faut dire que le compilateur fait des choses époustouflantes, notament la preuve d'absence de de référencement de pointeurs (NullPointer) lors de la compilation, et que son API est merveilleuse comparée à Java (même si elle s'appuie dessus).
Il en va de même pour Rust, qui apporte tellement de choses qui manquent à C et C++, notamment la preuve d'absence de fuites memoire et de race-conditions dès la compilation ou encore un gestionnaire de paquets digne de ce nom.
Bref, attendons encore un peu avant de crier victoire mais pour l'instant, tout se profile comme il le faut pour moi et cela valait bien de s'investir autant 🥳.
Je ne pense pas @Sebsauvage, les entreprises se plient aux lois des pays dans lesquels elles commercent parce que respecter la loi en vigueur dans un pays c'est a priori normal (j'ai toujours un doute sur le sujet mais ça n'est pas vraiment la question).
Les entreprises ne sont pas là pour faire de la morale mais du profit. D'ailleurs ta morale n'est ni meilleure ni pire que celle des autres, elle t'est juste plus personnelle. Dans beaucoup de pays, les citoyens veulent un dirigeant fort et entacher son image c'est entacher la réputation du pays, la Chine en fait partie selon moi.
Par contre il faut sortir de notre bulle cognitive franco-française pour se rendre compte que si la pensée de nos lumières ne s'est pas diffusée partout dans le monde, ça n'est pas parce que les gens ne l'ont pas comprise mais parce qu'ils la rejettent et la considèrent comme une hérésie. Ceci inclue la laïcité, le droit à la satire et le droit à la caricature.
Mais ne t'en fait pas, ce type d'interdiction s’immisce dans le débat public français sous l'étendard du respect des religions, de leurs icônes et de leurs symboles. A ne pas en douter, nos politiciens et autres puissants sauront en faire bon usage à l'instar du président chinois, c'est juste que les lois autorisant les salves d'interdictions n'auront pas bénéficier des même prétextes pour émerger.