@Sebsauvage je comprends ce que tu veux dire quand tu écris ceci :
La PMA a été votée au parlement: Elle sera enfin accessibles à toutes les femmes. Je vois les homophobes déchainer leur haine et leur dédain sur les réseaux sociaux. Il se trouve que ce sont généralement des croyants intégristes. Je sens que je n'ai pas fini de les troller avec ça: https://sebsauvage.net/galerie/photos/Bordel/mili/jesus-gpa.png
Mais c'est oublier qu'il y a des athées, des agnostiques et des gens bien de gauche qui se posent vraiment la question de la Procréation Médicalement Assistée (PMA) pour d'autres raisons que la simple caricature "GNé C'eST DiEu QuI VEuT PÂaaaaas".
Je vais essayer de résumer cet autre point de vue :
Si la Procréation Médicalement Assistée est autorisée pour les couples lesbiens, alors à cause principe d'égalité des traitements des couples mariés devant la Loi, il devient nécessaire de permettre aux couples gays de pouvoir avoir des enfants hors adoption ; et l'unique solution technique face à cela s'appelle la Grossesse Pour Autrui (GPA).
Or la GPA revient à ni plus ni moins que de commercialiser encore un peu plus le corps des femmes ; évidemment il s'agira des femmes les plus pauvres, les plus précaires et les plus démunies de notre société. A priori ce ne sont pas les filles Bettencourt, Arnaud ou Dassault qui vont sacrifier leur corps sur l'autel du bonheur des autres.
Et même si idéologiquement, l'on parvient à se dire que vendre son ventre c'est finalement quelque chose de normal, c'est ne pas prendre en considération les sentiments que nous développons envers l'enfant que nous portons durant notre grossesse ; mais je sais bien qu'il est difficile pour des hommes blancs-cis-valides homos ou hétéros de comprendre ça.
En ce sens, il s'agit bien là d'un combat féministe doublé d'un problème de lutte de classe : le souhait de protéger les femmes et les pauvres d'une exploitation encore plus grande de leur corps et de leurs vies.
Mais en sus, il y a un second problème : la posture idéologique qu'il est normal de faire commerce de nos organes et de nos gamètes.
Je m'explique, des différents projets de loi que j'ai suivi (mais d'assez loin par manque de temps, donc je peux me tromper), tous contenaient le même principe : l'impossibilité pour l'enfant de retrouver son père biologique. C'est-à-dire l'interdiction organisée par la Loi de retrouver ses origines. Ce n'est pas pareil que d'être un enfant illégitime issu d'un coup d'un soir et qui, par malchance, ne pourra pas savoir. Non, là il est tout à fait possible de le lui dire, mais pour ne pas blesser les sentiments des hyper-sensibles, l’État privera l'enfant d'un droit fondamentale : savoir qui on est et d'où l'on vient.
Je pense qu'il s'agit ici d'un projet politique qui vise à déconstruire le concept même de famille nucléaire pour lui substituer le concept de "famille choisie" ou "famille composée".
Et le capitalisme étant ce qu'il est, il va se développer un marché formidable des "meilleurs donneurs" ou les gamètes des meilleurs profils/papas seront vendus aux plus offrants, et où il ne sera plus du tout intéressant pour les hommes de se marier à des femmes, et où il ne leur sera plus nécessaire de s'occuper de leur progéniture.
C'est une toute autre société que celle que nous connaissons, et a première vue celle-ci me déplaît assez. Mais encore une fois, pour des hommes-cis-blancs-valides-hétéros ou gays ça n'est pas trop leur problème...
Aparté : Pour ceux qui pensent qu'il s'agit ici du sophisme de la pente savoneuse, je vous invite à découvrir (ou redécouvrir) le principe de la fenêtre d'Overton car la PMA va justement faire glisser cette fenêtre sur le moyen/long terme, et conséquemment modifier la posture de la société par rapport à ces questions.
Voici ma petite histoire de cette semaine...
Mes parents doivent venir en Île-de-France mais ils habitent loin et en ce moment je n'ai pas la place de les recevoir chez moi. Solution ? Go AirBnb, ça faisait longtemps (~ 2 ans) donc pourquoi ne pas réessayer.
Damned je regrette... Car les abus vont s'enchaîner au point où il est impossible de les refuser sans perdre une petite somme (j'insiste vous verrez).
Étape 1 - L'enregistrement obligatoire de mon numéro de carte bleue...
J'ai toujours trouvé cette démarche inadmissible, ça n'est pas plus pratique que ça sur un site où l'on effectue tout au plus une réservation dans l'année et surtout ça fait peur !
Pourquoi est-ce que ça fait peur ? Parce que AirBnb a une sécurité médiocre (de merde ?) et son site a déjà exposé des failles de sécurité décrites ici ou encore ici...
Étape 2 - L'obligation de saisir son code postal
Je veux réserver pour mes parents, je saisis mon numéro de carte bleue, sa date d'expiration, AirBnb ayant déjà mon nom elle ne me le redemande pas et là... Je dois indiquer mon code postal sauf que je mets lequel ? Celui où je vis ou celui où mes comptes sont domiciliés ? (il y a quelques centaines de kilomètres d'écart)
Étape 3 - L'obligation d'uploader sa photo
La vendeuse souhaite voir à quoi je ressemble, donc au moment de réserver, il faut uploader une photo... Sauf que je ne réserve pas pour moi mais pour mes parents qui sont incapables de le faire... Mais AirBnb est formel, pas de location si pas de photo car Miss K l'impose (et ça arrange bien AirBnb).
Je réalise après coup que ma photo est parfaitement inutile puisque nous allons nous rencontrer au moment de la remise des clefs, c'est donc une manière de filtrer les gens... Je suppose afin d'éviter les joies de la diversité (nous sommes à Paris faut pas rêver) et ce qui m'amuse d'autant plus c'est que la personne fait partie de cette belle diversité au regard de son nom et de sa propre photo de profil... #Stereotype
Étape 4 - Prouver encore son identité
AirBnb ayant mon nom, mon prénom, mon numéro de mobile, mon e-mail, mon code postal, mon numéro de carte bleu, le pictogramme de cette dernière et à présent ma photo à jour ça ne lui suffit pas ! Non la réservation vient d'être passée mais il faut que le site la valide et pour cela il faut que je leur envoie une photo d'une pièce d'identité (recto verso parce que pourquoi pas)...
Là je vous avoue que j'hésite, je suis fâchée et je souhaite annuler sauf que... Dans le cadre des conditions de vente de Miss K (la bailleuse), dès que la réservation est passée (ce qui est le cas en fin d'étape 3), je ne serai remboursée que de 50 % de la réservation si j'annule maintenant, soit 350 € sur 700 €... #EnjoyAgain
Je me sens prise au piège, c'est la stratégie du pieds dans la porte doublée de celle du coût irrécupérable je commence à haïr cette entreprise et j'upload mon permis de conduire à contre cœur :'(
Étape 5 - Installer l'application
Pour toute la démarche, je passais par le site mobile, or juste après l'étape 4, AirBnb me dit que ça ne leur suffit pas et qu'il faut que je prenne une photo depuis la caméra de mon mobile pour s'assurer que ce soit bien moi sur le permis... Sauf qu'il faut bien sûr installer leur application merdique avec l'octroie de touuuuuus les droits que cela implique...
La mort dans l'âme je le fais, car forcément, pas moyen d'uploader une image à cette étape, c'est forcément par la caméra histoire de prouver que c'est bien nous... (J'aurai dû photographier le chien du voisin)
Conclusion
Voilà, AirBnb c'est fini. J'attends patiemment que la résa soit passée pour pouvoir retirer mon numéro de carte bleue ; oui parce qu'on ne peut pas l'effacer tant qu'une réservation est en cours...
AirBnb se fiche de notre vie privée, AirBnb a un process et il faut se plier à ce process. Nous ne sommes rien, nous devons la fermer et consommer comme AirBnb nous permet de le faire. Je suis navrée pour les gens qui disent "oui mais tu comprends c'est pratique" bah non. Juste payer c'est voter comme le dis @Kysofer. Et c'est la dernière fois que je vote avec mon argent pour de telles pratiques. Je compte donc boycotter AirBnb pour au moins la décennie qui va suivre (à titre d'exemple ça fait maintenant 20 ans que je boycott SFR après leurs pratiques merdiques au tout début des années 2000).
Bref si quelqu'un connaît le moindre site concurrent à AirBnb je prends.
Un framework léger permettant d'inclure dynamiquement du HTML dans du HTML. A tester avec des SPA.
Je suis tombée dessus pas hasard. Très sympa !
Une interface graphique qui a l'air simple et sympa pour Ansible.
Merci à Riduidel pour le lien.
Et pendant ce temps-là, la CNIL tournait la manivelle et chantait dans les bois...
Une très bonne explication de ce qu'est un Design System (et subséquemment comment en créer un).
Coudifié.
Maven crash beaucoup de logs lorsqu'il build, ce qui peut le ralentir beaucoup. Pour ne garder que les warnings et erreur, il suffit de créer une fonction Bash qui remplace Maven et qui contient la ligne suivante :
mvn clean install -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
Remarque : d'intuition, je dirai que cela doit aussi marcher en mettant à jour la variable MAVEN_OPTS
Via cette commande :
sudo fuser -v /dev/snd/*Retour d'expérience d'une équipe d'Amazon Prime sur l'utilisation de Kotlin à la place de Java.
Overall : 75% de devs satisfaits de la transition.
Toujours lerci @Riduidel. Ça a l'air super cet outil de visualisation de base de données.
Excellent, je cherchais un moteur Kotlin 2D sympa pour un kata un peu gros. C'est top !
Merci @Riduidel
Merci à @Philou qui associe cette hypothèse tirée de la sociologie à la façon tristement commune de gérer les problèmes dans du code.
Charles Gave parlait il y a quelques années de cette théorie du complot appelée "l'état profond américain" : https://www.youtube.com/watch?v=RvxxBFldsf8
Le problème avec les complots, c'est quand on en voit partout ; mais aussi quand on en voit nulle part.
Franck Lepage (pendant une interview)
Je dirais que s'imaginer que des milliardaires n'essaient pas d'influencer les politiques nationales et inter-nationales est une erreur de jugement, mais ce n'est qu'un point de vue.
J'aimerais d'ailleurs rappeler cette très bonne vidéo de la chaîne Osons Causer qui explique pourquoi les milliardaires, en tant que "véritables capitaines d'industries", achètent les grands médias et acceptent de les faire tourner à perte.
Est-ce que de telles personnes, qui manœuvrent à influencer la vie de tous pour leurs intérêts privés ne pourraient pas être appelées "un état profond" surtout quand parfois il détiennent en plus quelques "dossiers" sur les personnalités politiques ?
Enfin, heureusement que Macron n'a pas été financé et promu par l'ensemble de la caste bancaire et financière en à peine deux ans juste avant les présidentielles et qu'il n'agit pas en permanence pour lui rendre la pareille depuis un peu comme si tout avait été décidé à l'avance, ouf !
Bref, heureusement qu'il n'y a pas de d'état profond en France ( #NuageDeTchernobyl ) et que ce concept est une pure fumisterie (>_<)
La polygot maven extension permet de produit des pom en Yaml (j'avais fait un tuto ici en son temps) et maintenant en Kotlin. Vous savez que j'adore Kotlin et pourtant je vois dans cette opportunité une immondice sans nom pour ne pas dire la plus grande des saloperies !
Pourquoi ?
Parce que le DSL Kotlin permet de coder dans le pom dont le but est qu'il soit pourtant 100 % déclaratif. Car du code dans un pom n'aura jamais de TU, a un probabilité très haute de ne pas être portable et surtout, chaque évolution du code ne profitera ni à la communauté (car pas de plugin) et deviendra un risque pour l'entreprise qui va accentuer l'effet "copier-coller".
Non vraiment, si c'était pour faire de Maven la même horreur de maintenance que l'est Gradle, mais les performances en moins, je pense qu'il valait mieux s'abstenir.
Voici l'exemple qui m'a fait vomir deux fois (vous saurez apprécier le code à copier-coller dans chaque projet d'entreprise en début de pom n'est-ce pas ?) :
import java.io.File
// define a comparable data class to simplify handling versions
data class Version(val major: Int, val minor: Int, val patch: Int) : Comparable<Version> {
override fun compareTo(other: Version): Int =
compareValuesBy(this, other, Version::major, Version::minor, Version::patch)
override fun toString(): String = "$major.$minor.$patch"
}
// define a function to execute the git command and return its standard output
fun git(vararg args: String): String {
// use the basedir of the project as the command's working dir if it contains a '.git' subdir
// otherwise use the current working directory of this script if it contains a '.git' subdir
// if both conditions are false the result will be null; the git command will probably fail
val workingDir = basedir.takeIf { it.resolve(".git").exists() }
?: File(".").takeIf { it.resolve(".git").exists() }
// run the git command with the provided arguments
val process = ProcessBuilder()
.directory(workingDir)
.redirectErrorStream(true)
.command(listOf("git") + args)
.start()
// read the standard output completely as a String
val output = process.inputStream.bufferedReader().readText().trim()
// return the output if the exit value is 0 or throw an exception otherwise
if (process.waitFor() == 0) return output
else throw IllegalStateException(output)
}
val gitVersions by lazy {
// run the `git tag` command
git("tag")
// the returned list of tags is separated by newlines
.split("\n")
// filter out only tags that are versions (such as 1.231.15)
.filter { it.matches(Regex("[0-9]+\\.[0-9]+\\.[0-9]")) }
// the separate parts of each version are separated by dots,
// also parse each part as an int
.map { it.split('.').map { it.toInt() } }
// map each triple of numbers to an instance of the `Version` class
.map { (major, minor, patch) -> Version(major, minor, patch) }
// sort the list of versions
.sorted()
}
// the last release is always the tag with the highest version number
val lastRelease by lazy {
gitVersions.max()
}
// the next version is determined based on the git commit log
val nextVersion by lazy {
// use the lsat released version as the base
val baseVersion = lastRelease
// if there are no releases yet, we use the version 0.0.1
if (baseVersion == null) Version(0, 0, 1)
else {
// split the base version in each separate part using destructuring
val (major, minor, patch) = baseVersion
// create a separator to split each log message on (log messages are multiline)
val separator = "-".repeat(5) + "commit" + "-".repeat(5)
// get all log messages from the last release tag until the current HEAD
// for each commit the separator is printed + the full commit message
val logMessages = git("log", "--pretty=format:$separator%n%B", "$baseVersion..HEAD")
// split the output on each separator generated earlier
.split(separator)
// trim each message, removing excess newlines
.map { it.trim() }
// only keep non-empty messages
.filter { it.isNotEmpty() }
when {
// increment the major and reset the minor + patch if any
// message contains the words 'BREAKING CHANGE'
logMessages.any { it.contains("BREAKING CHANGE") } -> Version(major + 1, 0, 0)
// increment the minor and reset the patch if any message starts with 'feat'
logMessages.any { it.startsWith("feat") } -> Version(major, minor + 1, 0)
// increment the patch in all other cases
else -> Version(major, minor, patch + 1)
}
}
}
project {
// use the next version calculated above when defining our project id
id("nl.craftsmen.blog.kotlin:kotlin-rest-service:${nextVersion}")
dependencies {
compile("org.glassfish.jersey.inject:jersey-hk2:2.29")
compile("org.glassfish.jersey.containers:jersey-container-netty-http:2.29")
compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.29")
runtime("ch.qos.logback:logback-classic:1.2.3")
}
properties {
"project.build.sourceEncoding" to "UTF-8"
"maven.compiler.source" to "11"
"maven.compiler.target" to "11"
}
distributionManagement {
repository("local") {
url(basedir.resolve("repo").toURI().toASCIIString())
}
}
build {
execute(id = "release", phase = "deploy") {
// create a new tag using the next version calculated above
git("tag", "-am", "Release $nextVersion", "$nextVersion")
// print some output
println("Tagged current HEAD as $nextVersion")
}
}
}C'était @Liwa qui m'avait fait lire les premiers tomes chez lui. Il était pété de rire en me voyant découvrir des images plus choquantes les unes que les autres lorsque je passais les après-midi à bouquiner tous ses mangas dans sa chambre.
Puis quelques années plus tard je décidais d'acheter les tomes sans trop vraiment savoir pourquoi mais je me souviens que nous partagions la même admiration des dessins avec @Sam & @Hani qui dessinaient à tous les deux à cette époque ; d'ailleurs c'est @Chlouchloutte qui s'y était mise dernièrement (à la lecture des Berserk).
Aujourd'hui, et même si ça fait quelque chose comme 3-4 ans que je n'ai pas lu un seul volume de Berserk (bien qu'ils soient tous achetés... Ah la vie de famille), le fait de savoir que l’œuvre restera inachevée et qu'un Artiste que j'admire autant soit parti me fait quelque chose au cœur.
Pour ceux qui n'ont jamais lu les tomes, les dessins de Berserk c'est ce niveau de détail là :





Très bon thread / Très bon résumé.
Merci à Riduidel pour le lien.
Un rappel en français et assez clair sur l'architecture hexagonale.
Je ne suis pas une fanatique des cleans architectures et dérivées puisque des dévs qui nomment leurs interfaces par des verbes produirons forcément des traitements techniques se faisant passer pour des traitements métiers.
Au final, le code métier se retrouvera polluer de code technique au pire et au moins de frameworks au mieux. Mais bon, pour comprendre les bases, l'article est clair et pertinent.
J'ai obtenu 58/115, du coup j'ai regardé et damned !! Il y a des balises comme <dfn> !? (oÔ) #Surprise
J'ai toujours pu faire sans mais c'est vrai que le web sémantique a ajouté plein d'éléments, je ferai plus attention au contenu la prochaine fois. Attention à la sur-ingénierie cependant.
Merci à @Ecyseo pour le lien.