Anecdote : Pour appeler un job local, le step s'appelle "build", mais pour appeler un job distant c'est triggerRemoteJob... C'est quand même pas très homogène...
Ce job appelle un autre job en passant des paramètres :
pipeline {
stages {
...
stage('TRIGGER OTHER JOB') {
steps {
script {
println " ========== TRIGGER NEXT JOB ========== "
build job: 'other-job/master', parameters: [[$class: 'StringParameterValue', name: 'PROUT', value: "TRUC" ]]
}
}
}
}
}
Ce job récupère des paramètres :
pipeline {
parameters {
string(name: 'PROUT', defaultValue: 'VALUE', description: 'Received from previous job')
}
stages {
stage('HELLO WORLD') {
steps {
script {
println " ========== HELLO WORLD II WITH ${PROUT} ========== "
}
}
}
}
}
Allez, je me permet de donner mon avis sur la gestion du COVID et l'efficacité des mesures prises.
Ne pas confondre Confinement et Quarantaine
Si la quarantaine est efficace pour limiter la contagiosité, le confinement est complètement inefficace pour y arriver.
La quarantaine consiste à retirer d'un système les individus identifiés comme suspicieux et à les placer dans un espace clos limitant les risques de transmettre la maladie. Ensuite, sous supervision de personnes formées et compétentes, l'évaluation de l'état de santé des personnes infectées permettra de décider si oui ou non, elles sont aptes à se réintégrer au système sans risque.
Le confinement consiste à demander à tout le monde de limiter ses contacts avec l'extérieur, sans savoir qui est porteur sain, malade, en rémission ou non touché. Du coup, c'est à l'estimation de chacun, sans test, sans supervision, d'estimer si elles sont "capables" de sortir acheter leur baguette de pain.
Bullshit numéro 1: penser que le confinement est efficace ou sert à quelque chose. Le plus probable c'est que tout le monde l'attrape, en étalant les malades sur la durée, en priant qu'une immunité se créé, ce qui est encore largement à démontrer.
Autant remettre tout le monde dehors, ça ira plus vite. Si le souhait est de ne rien gérer, ça sera plus efficace. On meurt libre et entouré, c'est quand même plus humain que les enterrements par Skype.
Le calcul du taux de mortalité - mais sans tester la population
X% de mortalité sans tester personne, mais ça veut dire quoi ?!
Les gens sont uniquement testés en hôpital, suite à leur propre prise de décision de se déplacer, en supposant que l'appel au médecin traitant et la médicamentation ne suffisaient pas.
Je pose la question, et là pour le coup, ça me semble pertinent : Par rapport aux autres virus, pour ceux qui se déplacent parce que l'appel au médecin et la médicamentation ne suffisent pas, combien décèdent ?
Bullshit numéro 2 : un taux de mortalité basé sur finalement pas grand monde et comparable avec rien du tout mais qu'on étale au visage à longueur de temps
Le taux de mortalité - mais sans savoir les critères nécessaires pour y être comptabilisé
Prenons un cas très spécifique : Jean, qui a un cancer des poumons, mais qui a la chance d'être porteur asymptomatique du COVID19. Il se rend à l’hôpital car il souffre de détresse respiratoire suite à une complication de son cancer. Le test au COVID 19 se révèle positif, puisqu'il est porteur sain. Il décède quelques jours plus tard de son cancer (RIP Jean).
Sera-t-il comptabilisé dans la mortalité COVID19 ? Impossible de trouver l'info.
Bullshit numéro 3 : Pas d'explication du protocole médical ou scientifique des calculs de comptabilisation
Penser que le confinement limite les déplacements des individus
Certes, une bonne partie de la population ne se rend plus sur son lieu de travail. Mais puisqu'une bonne partie des commerces sont fermés, et que les employés ont le droit de poser leur droit de retrait, les confinés sont parfois obligées de prendre les transports en commun ou d'aller plus loin pour accéder à un besoin disponible à côté de chez eux auparavant. <a href="?addtag=NoPQ" title="Hashtag NoPQ">#NoPQ</a>
Bullshit numéro 4 : Puisque tout le monde doit se démerder pour envoyer sa paperasse administrative à temps et que beaucoup de postes ont fermé, les gens se déplacent plus loin !
Finalement, la limitation de la contagion ne fait uniquement parce que les employés profitent de leur télétravail pour ré-organiser leur agenda et ne sortent pas tous au même moment, le samedi ou le dimanche.
Hi hi !
Le racisme aujourd'hui
Je lisais ce post d'Antichesse, un peu plus tôt, et je me suis dit que j'allais dire quelque chose. allez, comme ça, c'est gratuit (donc c'est vous le produit ;) )
Je suis très intéressée par cette idée du "racisme systémique", et l'idée selon laquelle insulter quelqu'un de "sale blanc" serait une agression décorrélée du racisme.
Quand on parle de personnes de couleur
Alors déjà, et avant de commencer, je dois dire que l'idée de "personne de couleur", me laisse un peu perplexe. J'ai beaucoup de difficulté à mettre les gens dans des cases de couleur... Est-ce que machin est noir ou est-ce qu'il est pas trop noir ? Est-ce qu'il est chocolat... Peut-être parce que je suis une fille, et que les vendeuses de chez Sephora m'ont expliqué très tôt que le fond de teint se distinguait selon deux axes : teint beige - rosé - olive - doré d'un côté, pigmentation de la peau d'un autre côté. Et attention n'achetez pas votre fond de teint en mars pour septembre, vous risqueriez de bronzer et la couleur ne vous irait plus !
Donc ce que j'ai retenu :
- Ben quand tu bronzes, tu changes de couleur. (waow ! incroyable ! such innovation ! such nouveauté ! Amazing !)
- Le fond de teint en base beige ne va pas aux personnes en base rose. Donc on peut être blanc rose ou blanc beige, et on a pas la même couleur.
La marque Sephora s'est même vantée de proposer 57 teintes différentes de fond de teint ! Et c'est nécessaire ! Parce que sinon ça change la couleur de la peau !
Donc partons de la base que répartir les gens en "couleur", ça revient à prendre les 57 teintes et à faire des catégories, ce que je trouve légèrement contre-intuitif. Donc j'aime pas trop la notion de "personne de couleur", parce que Sephora a l'air de dire qu'on a au moins 57 couleurs différentes minimum, et les fonds de teint blanc ou noir, ça existe pas. Ca va être un 23 beige naturel ou 23.5 naturel rosé, un 44 praline doré ou un 45 café latté...
Paye ton insulte... "hé espèce de sale praline doré !"... Ça va en faire des gens qui se haïssent sur le critère de la couleur...
Quand on parle de racisme systémique
Le racisme comme oppression systémique est l'idée selon laquelle les personnes répondant à un stéréotype de couleur subissent une distinction de considération issue du système. Je ne sais pas si je l'ai bien écrit. Ok, soit, admettons, je peux l'entendre. Par exemple, dans un pays dont la loi est différente en fonction de critères arbitraires (couleur - religion - sexe), on a en effet une oppression systémique.
__ Remarquez que je dis sexe et pas genre. En effet, il semblerait que les français aient oublié que le sens premier de "genre" est "catégorie", exactement comme un genre littéraire ou un genre d'individu. A l'inverse, aux USA, Gender se traduit littéralement par "Sexe". Les faux amis ont encore frappé...__
Maintenant, ce qui me gène c'est l'idée que le racisme ne soit que l'expression d'une oppression systémique, et donc que le fait de dire "sale blanc" ne soit pas raciste.
Pourquoi le fait de traiter quelqu'un de "sale blanc" ne serait pas du racisme ? Hé bien, si j'ai bien compris, parce que ce racisme ne serait pas l'expression d'une oppression systémique, nouvelle définition du racisme.
Donc devant deux situations similaires : une personne qui en insulte une autre de "sale noir" - une personne qui en insulte une autre de "sale blanc" = Devant ce même délit, le jugement n'est pas le même. Dans un cas, c'est du racisme, et dans l'autre une agression, et la justice assigne des peines différentes aux deux cas.
Il en ressort un système où les individus sont traités différemment selon des critères arbitraires (couleur - religion - sexe), c'est donc un système paradoxal.
Cela risque d'entretenir la haine de l'autre pour sa différence, et d'accentuer les différences de jugement. Donc en plus, il s'entretient.
J'en connais quelques uns, des systèmes construits sur des paradoxes :
- Le communismes, mais avec une oligarchie qui centralise les richesses
- Le capitalisme libéral, mais avec un renflouement de certains business par l’État
- Le fait que tu aies besoin d'un Kadabra pour compléter ton pokédex, mais qu'après l'échange, tu reçoives un Alakazam
En général, les lois qui ne sont pas valides avec elle-mêmes sont fausses. Elles contiennent un mensonge.
Donc oui, bien sûr, l'oppression systémique c'est mal ! Juger quelqu'un pour quelque chose qu'il n'a pas choisi comme sa couleur, son sexe ou sa religion, c'est nul !
Mais se créer un système qui re-créer une distinction de droits en fonction de ces critères arbitraire, ça ne peut pas être la solution.
En faisant ça, on entretient la haine le l'autre, et quand on fait croire aux gens que droite = racisme, on joue le jeu du Rassemblement National.
Mais heureusement, il y aura toujours un candidat dont personne ne veut pour se lever face au racisme et à l’extrême droite ! Mais ça vous coûtera vos congés ! ;D
Hello Antichesse, tu m'as dit que tu allais peut-être t'intéresser à la remontée du coverage côté Front vers Sonar, donc je te met des infos sur ce que j'ai fait, pour t'aider.
Infos préalables (mais je sais que ça marche avec Angular et depuis Karma 4.1.0) :
Package.json
"devDependencies": {
"@angular-devkit/build-angular": "0.901.0",
"@angular/cli": "9.1.0",
"@angular/compiler-cli": "9.1.0",
"@angular/language-service": "9.1.0",
"@types/jasmine": "3.5.10",
"@types/jasminewd2": "2.0.8",
"@types/node": "12.12.34",
"codelyzer": "5.2.2",
"jasmine-core": "3.5.0",
"jasmine-spec-reporter": "4.2.1",
"karma": "4.4.1",
"karma-coverage-istanbul-reporter": "2.1.1",
"karma-firefox-launcher": "1.3.0",
"karma-jasmine": "3.0.3",
"karma-jasmine-html-reporter": "1.5.3",
"protractor": "5.4.3",
"ts-node": "8.3.0",
"tslint": "6.1.1",
"typescript": "3.8.3"
},
Alors déjà, je lance mes tests en Firefox Headless.
Extrait de mon fichier Karma.conf.js :
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-firefox-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
...
browsers: ['FirefoxHeadless'],
captureTimeout: 600000,
browserDisconnectTolerance: 3,
browserDisconnectTimeout: 600000,
browserNoActivityTimeout: 600000,
customLaunchers: {
FirefoxHeadless: {
base: 'Firefox',
flags: ['-headless', '--no-sandbox']
}
}
...
});
};
Mais surtout, dans le fichier Karma, il y a un élément super important, l'emplacement de stockage de ton coverage :
Karma.conf.js
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/project-name'), **<---- ICI**
reports: ['html', 'lcovonly', 'text-summary'], <--- Lcov doit être inclu aussi !
fixWebpackSourcePaths: true
},
Le dir indique ou le coverage sera stocké. Tu en auras besoin dans ton fichier JenkinsFile. Pour moi, à la racine de mon WORKSPACE, j'aurais un dossier "coverage", qui contient un autre dossier "project-name" contenant le résultat de l'analyse Istanbul-reporter, incluant le coverage.
Voici quelques extraits de mon fichier JenkinsFile, pour montrer les modifs que j'ai du faire :
pipeline {
agent { label 'trololo-pouetpouet' }
stages {
stage('Clone source code') {
steps {
git branch:'${BRANCH_NAME}', credentialsId: gitCredentialsId, url: gitSshUrl
}
}
stage('Test') {
steps {
println " ========== START PLAYING TESTS ========== "
configFileProvider([configFile(fileId: 'npm-npmrc', targetLocation: '/root/.npmrc')]) {
sh "export SASS_BINARY_PATH=${sassBinaryLocation}/${bindingNodeFileName} ; npm run test-prod"
}
stash includes: 'coverage/**/*', name: 'COVERAGE' **<---- Ici, c'est parce que je change d'agent, donc je garde l'output de mon coverage **
}
}
stage('Build') {
steps {
println " ========== START BUILDING DELIVERABLE ========== "
...
}
}
stage('Sonarqube analysis') {
agent {
label 'sonar-scanner-agent-de-ouf'
}
steps {
git branch:'${BRANCH_NAME}', credentialsId: gitCredentialsId, url: gitSshUrl
script {
configFileProvider([configFile(fileId: 'npm-npmrc', targetLocation: '/root/.npmrc')]) {
...
unstash 'COVERAGE' ** <----- je récupère mon output d'analyse incluant mon coverage **
withSonarQubeEnv(sonarEnvName) {
sh "sonar-scanner "+
"-Dsonar.verbose=true "+
"-Dsonar.projectBaseDir=${WORKSPACE} "+
"-Dsonar.projectVersion=${taggedVersion} "+
"-Dsonar.sources=. "+
"-Dsonar.exclusions='**/*.spec.ts, **/*.js, src/test/*'"+ **<---- Ici, j'exclue les tests et le js du coverage et de l'analyse **
"-Dsonar.projectName='${binaryName}' "+
"-Dsonar.projectKey=${binaryName} "+
"-Dsonar.typescript.lcov.reportPaths=${env.WORKSPACE}/coverage/project-name/lcov.info "+ <---- Ici, il faut indiquer le path récupéré depuis le fichier Karma.conf.js, et pointer vers le fichier lcov.info
(env.BRANCH_NAME != 'master' ? "-Dsonar.branch.name=${env.BRANCH_NAME} -X " : "")
}
}
}
}
}
...
}
...
}
Et last, but not least, une petite indication supplémentaire à préciser quand on fait de l'angular :
package.json
"scripts": {
"ng": "ng",
...
"test": "ng test --watch --code-coverage", ** <---- Indiquer que l'on veut l'emission du coverage !**
"test-prod": "npm install && ng test --code-coverage",
"lint": "ng lint",
"e2e": "ng e2e"
},
Note : l'option de script "--code-coverage" peut également être remplacée par l'option de build:
"test": { ** <---- En phase test **
"builder": ...
"options": {
....
"codeCoverage": true, ** <---- Indiquer codeCoverage true **
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.scss",
....
}
},
Et voilà, ton coverage est dispo sur SONAR !
Si quelque n'est pas clair, n'hésite pas à me le dire !
A tester ! :)
Hello Animal,
Autant j’aime l’idée que le Dr.Raoult soit en lutte contre, d’une part un délit de faciès (depuis quand appeler quelqu’un Gandalf parce qu’il a un style personnel est quelque chose de correct ?!), mais aussi des magouilles du gouvernement.
Autant il faut admettre que son protocole expérimental est un peu léger, et qu’il a exclu des résultats les individus qui répondaient mal au traitement. Notamment celui qui est mort (anecdotique ?).
Parmi ses sponsors privés se trouve le groupe pharmaceutique qui distribue la chloroquine.
Encore une histoire en nuances de gris...
Aujourd'hui j'ai appris comment combiner des observables pour attendre que tous les traitements s'exécutent.
Et c'est surtout grâce au lien.
En même temps, la doc RXJS est pas mal non plus : https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
A lire plus tard
Ou alors, Animal, ADP a un plan d'investissement de 6 milliards qui est prévu : https://www.capital.fr/entreprises-marches/adp-propose-un-plan-dinvestissement-de-6-milliards-deuros-sur-5-ans-1334030
Et le gouvernement souhaite le financer avant de le vendre, afin de soulager un peu les investisseurs ou de leur faire peur : https://francais.rt.com/economie/60698-adp-va-investir-6-milliards-euros-avant-sa-privatisation
Et le coronavirus est un bon pretexte ;)
Voici comment déclarer un cron via Ansible :
- name: 'backup chron is declared'
cron:
name: 'Backup Database'
backup: 'yes'
cron_file: '{{ application }}-data-backup'
job: '{{ PATH_TO_SH_FILE_TO_BE_EXECUTED }}'
state: 'present'
minute: '0'
hour: '*/12'
day: '*'
month: '*'
weekday: '*'
user: '{{ VM_USER }}'
Quelques infos :
- Si la propriété cron_file n'est pas renseigné, alors le cron sera déclaré dans crontab (cron en mémoire), s'il est renseigné, un fichier sera créé dans /etc/cron.d/ pour être relancé au reboot
- job : Le chemin vers le script qui doit être lancé
- name : le nom du cron
- state : 'present' ou 'absent'
- minute, jour... : valeur par défaut : "*"
- au lieu de minute, hour,... on peut mettre special_time. Valeurs acceptées : annually, daily, hourly, monthly, reboot, weekly, yearly
Exemples depuis la doc :
Job au moment du reboot
- name: Creates an entry like "@reboot /some/job.sh"
cron:
name: "a job for reboot"
special_time: reboot
job: "/some/job.sh"
Créer une variable d'environnement :
- name: Creates an entry like "PATH=/opt/bin" on top of crontab
cron:
name: PATH
env: yes
job: /opt/bin
Un site qui montre le format d'un cron selon le contenu de l'url.
Example :
https://crontab.guru/every-12-hours
https://crontab.guru/every-1-minute
Le man page est très complet.
A tester ! Ça peut m’être très utile :3
un bon paquet de postes de dépense peuvent être déduits des revenus locatifs :
-
Les frais de financement de votre investissement
Tous les frais de financement qui ont servi à l’acquisition, la conservation (par exemple, un prêt contracté pour payer des droits de succession), la construction, la réparation ou l’amélioration du bien sont déductibles des revenus fonciers bruts (ligne 250 et 410 du formulaire 2044).
Cela signifie que vous pouvez déduire sur les loyers bruts perçus au cours de l’année N tous les frais que vous aurez payés cette même année pour un financement : -
Les intérêts d’un crédit immobilier ou d’un prêt pour des travaux
-
Les frais de dossier
-
Les frais de garantie
-
Les cotisations d’assurance emprunteur
-
Etc.
C’est pour cela que vous avez fortement intérêt à emprunter plutôt que de payer cash pour un investissement immobilier. -
Les frais d’entretien et de réparation
Vous pouvez déduire le coût des travaux que vous engagez pour entretenir ou réparer votre logement. Ces travaux doivent avoir pour but de conserver ou de remettre en étant votre bien immobilier sans en modifier l’usage, l’agencement ou les équipements principaux. Vous pouvez par exemple prendre en compte vos frais de remise aux normes de l’installation électrique, le traitement du bois, une rénovation de la toiture, etc. -
Les dépenses pour améliorer le logement
Certaines dépenses engagées afin d’apporter un équipement ou un confort supplémentaire aux locataires sont également prises en compte. Elles ne doivent pas pour cela modifier la structure du logement. Vous pourrez, par exemple, déduire des frais pour des améliorations de ce type : -
Changement des fenêtres ou des volets
-
Isolation thermique du bâtiment
-
Installation d’une cuisine équipée
-
Ajout d’un digicode ou d’un autre élément de sécurité
-
Installation d’équipements pour personnes handicapées,
-
Changement du système d’évacuation des eaux usées
-
Etc.
-
Le coût des impôts et des taxes
Une partie des impôts et des taxes que vous devez payer par rapport aux appartements que vous louez peuvent également être déduits de vos loyers. Il s’agit principalement de la taxe foncière, de la taxe d’équipement, des éventuelles taxes sur les bureaux, etc.
En revanche, les impôts payés par le locataire (taxe d’ordures ménagères, taxe d’habitation), ainsi que les impôts sur le revenu, la TVA, les frais de notaire, etc. ne sont pas déductibles. -
Les charges de copropriété
Pour ce qui concerne les charges de copropriété, tout propriétaire bailleur peut répercuter le coût des charges qui ne sont pas répercutées au locataire. Vous devez déduire les provisions pour charges de copropriété de l’année qui correspond aux loyers sur lesquels vous êtes imposés. Vous devez également prendre en compte la régularisation des charges réellement actées pour l’année précédente par rapport aux provisions qui avaient été faites. -
Les cotisations d’assurance
Toutes vos cotisations d’assurances liées à vos biens immobiliers sont entièrement déductibles de vos revenus fonciers (ligne 223 de l’imprimé 2044). Cela concerne tout type d’assurance que vous pouvez souscrire dans le cadre d’un placement de ce type : -
Votre assurance habitation
-
Votre assurance loyer impayé
-
Votre assurance contre la vacance locative
-
Vos assurances de prêt (comme vu ci-dessus dans les frais de financement)
-
Etc.
Vous avez ainsi la possibilité de vous assurer contre les différents risques liés à l’investissement locatif et cela est bien pris en compte dans le calcul de vos impôts fonciers puisque c’est le montant réel de vos primes d’assurance qui est comptabilisé. -
Les charges de gestion
Lorsque vous confiez la gestion locative de vos logements à un tiers (agence immobilière, administrateur de biens, etc.), vous pouvez retrancher ces frais de vos revenus locatifs. Il en est de même pour tous les frais de gardiennage ou de conciergerie qui concernent le logement loué. Dans les charges de gestion déductibles, vous pourrez également soustraire de vos loyers perçus tous les honoraires (avocat, notaire, huissier, etc.) liés à des frais de procédure pour régler des différends. Pour tous les petits frais administratifs de gestion (achat de souches de quittance de loyer, frais de téléphone ou de courrier, achat d’un modèle de contrat de location) l’administration fiscale autorise une déduction forfaitaire de 20 € par an et par logement.
Pour conclure, cette liste des charges déductibles de vos revenus fonciers pour les impôts sur les revenus n’est pas exhaustive. Le Code Général des Impôts prévoit également que toutes les "dépenses effectuées en vue de l’acquisition et de la conservation de son revenu" sont également concernées. Il peut donc y avoir d’autres frais que vous pouvez intégrer afin de réduire l’imposition sur vos revenus locatifs (voir l’infographie ci-dessous qui reprend les détails de ce texte)
Hi hi pour ne pas oublier ce lien !
Apparemment c’est faux :/
De l’écriture inclusive...
Il est rare que j’utilise ce moyen d’expression qu’est le shaarli pour exprimer une opinion personnelle politique. Cela étant dit, il me semble qu’il n’existe pas d’autre espace de partage qui permette correctement l’exercice : l’opinion en 240 caractères ne saurait être qu’une réaction tronquée qui manque fondamentalement de substance. Et le blog, c’est pour raconter sa vie, et elle regarde que moi.
Je vais donc coucher mes idées comme elles me viennent et nous verrons ce que cela donne.
Le sujet de l’écriture inclusive m’est revenue encore récemment et je ne peux pas m’empêcher d’être gênée par l’expression qu’elle prend.
Pour faire court : Afin d’être le plus égalitaire, inclusif possible, il faudrait préciser le genre de toutes les personnes concernées. Donc ne plus dire :
Ils ont voté pour
Mais
Ils.elles ont voté pour
Plusieurs problèmes à cela :
- « Il » s’emploie pour un homme avec un penis, « elle » pour une femme avec un vagin. Car l’on exprime le sexe et non le genre. Le genre en grammaire et orthographe française ne fait pas référence aux stéréotypes autour des sexes, mais bel et bien à l’emploi d’un pronom. C’est pour cela que l’on parle de LA chaise, et croyez moi, la chaise ne se maquille pas et ne porte pas de jupe. Erreur de semantique donc.
- en exprimant plus de genres que nécessaire, on exclue les non genrés et non binaires, donc on est pas inclusifs. D’ailleurs, les enfants sont-il genrés dans ce cas ? Je rappelle que lorsque l’on parle de genre, on ne parle pas de sexe, on parle bien de stéréotypes et attributs autour des-dits sexes.
- La distinction genrée homme-femme amène finalement la triste vérité : il faut séparer les deux catégories de population, elles ne sont pas égales et doivent être distinguées. Quelque chose d’inclusif aurait pu être d’inventer un nouveau pronom, équivalent du ‘it’ anglais comme eil (contraction du il et du elle) ou alors de supprimer un des deux genre, pour ne garder que le neutre (masculin), par exemple.
- A vouloir faire de l’égalité, on crée des inégalités. Supposons que vous indiquez sur votre plaque - site - cv : D. Truc, Doctoresse, alors vous permettez aux individus ayant un biais de genre (ex : les femmes sont nulles) de vous exclure de leur panel de docteur à consulter. Vous permettez aux autres de vous exclure sur le critère du genre. C’est l’inverse de l’égalitarisme et de l’inclusion.
Mais surtout, au delà de la pertinence du débat, cette polémique évoque chez moi trois pendants que je considère plus graves :
- ces luttes hommes - femmes crééent des camps en confrontation, exactement comme les luttes de racisme créent des confrontations entre personnes de couleurs différentes, retraites à privilèges ou régimes généraux... je ne vois que des moyens de diviser les populations sur des sujets de société qui manquent finalement un peu d’enjeux... lutter contre le sexisme c’est important, lutter contre le racisme c’est important, garantir des retraites pour tous c’est important. Faut-il utiliser il ou elle pour parler d’un groupe de personnes... bof bof bof... ça fait pas avancer le bateau et ça crée des tensions et des divisons, il me semble qu’on obtient moins d’inclusion non ? Garantissons dans la loi des sanctions pour ceux qui y dérogent, faisons appliquer les sanctions et garantissons la même justice pour tous.
- Ce genre de sujet sociétal prend énormément d’espace, au moins sur internet (je ne regarde pas la télé), occultant des sujets qui pourraient sembler prioritaire comme le fait que... je sais pas... l’Australie brule ?
- Enfin, la tyrannie des foules, telle que décrite par Tocqueville présente la description d’une société accordant toujours plus de pouvoirs à l’Etat pour mettre en place de l’égalitarisme, et ce, au détriment de la liberté. Par liberté, il faut entendre l’inverse de la tyrannie d’un despote, ce que redoute le plus Tocqueville, c’est un roi ou un gouvernement autoritaire. J’ai aussi l’impression que notre gouvernement joue la carte du « gauchisme societal » pour obtenir de la légitimité d’agir. En se faisant annonciateur d’égalité, il prend plus de pouvoir qu’il ne devrait et devient autoritaire, au point où le peuple, pour un peu d’égalité, perd beaucoup de liberté...
La question de la liberté et de l’égalité est centrale en ce moment. Revendiquer l’égalité devant la loi me semble pertinent, mais il devient difficile de soutenir que l’on peut aller plus loin.
Je n’ai pas les jambes d’Usain Bolt, le QI d’Enstein, le visage de Brad Pitt, et mes parents ne me transmettront pas plusieurs millions d’euros.
En quoi suis-je égal avec mon voisin ? Le prétendre reviendrait à nier le handicap, la maladie, la génétique et l’épi-génétique...
Mais cela reviendrait à admettre que tout le monde ne peut pas devenir millionnaire, et donc que les millionnaires ont profité d’un avantage inégal devant la vie. Cela revient à admettre qu’un chômeur n’est pas un profiteur mais un défavorisé devant la vie. Cela revient à admettre les plus riches ne sont pas plus méritants, ils ont profité d’un avantage inégal, et appelle un autre partage des richesses... Cela ramène une autre forme d’égalité, celle d’avoir le droit de vivre avec sa différence : cela s’appelle l’équité. Si on a trop d’égalité, on manque d’équité.
Aujourd’hui, dans la médecine psychiatrique, lorsque l’on parle des patients, on parle de personnes qui ont pété un plomb, incapables de rentrer dans un cadre. Ces gens dysfonctionnels, on passe plus de temps à les medicamenter, qu’à les écouter, de toutes façons on a plus de moyens pour ça. Un individu inadapté est plus commode qu’un cadre de vie inadapté, qui suppose de revoir tout le système.
Pour résumer, le débat sur l’écriture inclusive me semble être le fait d’une occupation de l’espace médiatique, à grands coups d’interprétations libres et de manipulations basiques (non le masculin ne l’emporte pas sur le féminin ! Non nous ne sommes pas tous égaux.) afin de nous orienter vers des divergences et des clivages sociaux. Arrivent alors des partis qui profitent de cette tyrannie des foules et, se prônant pour « un égalitarisme de gauche », en profitent pour récupérer plus de pouvoir qu’ils ne le devraient.
Bref, l’écriture inclusive, je trouve pas ça très intéressant.
Aaaah ! Cette page vient de me sauver la vie. J'en avais un peu marre de l'integration Maven d'intellij.
Maintenant je n'ai plus aucun doute sur ma compilation !
Pour rappel :
Configuration
Perform these steps:
- Run -> Edit configurations -> Defaults -> JUnit
- Enter this as a post-Make step:
- Run Maven Goal : org.javalite:activejdbc-instrumentation:2.3:instrument
stage("Sonar Analysis") {
steps {
println " ========== START SONAR ANALYSIS ON SOURCES ========== "
// Prepare SonarQube scanner environment
withSonarQubeEnv(sonarqubeEnvName) {
sh "mvn -B -U -Dproject.version=${version} " +
(env.BRANCH_NAME != 'master' ? "-Dsonar.branch.name=${env.BRANCH_NAME} " : "") +
" -Dsonar.value.url=${sonarqubeserver}" +
" sonar:sonar"
}
}
}
Apparemment, faire simple c'est compliqué.
Comme j'ai pas envie de le faire plusieurs fois, je le met ici, en flat :
println " ========== START PREPARATION STEP ========== "
pom = readMavenPom file: 'pom.xml'
binaryName = pom.artifactId
version = pom.version
groupId = pom.groupId
artifactoryserver = Artifactory.newServer url: 'myURL/', credentialsId: artifactoryCredentials
artifactoryserver.bypassProxy = true
println " ========== START PREPARING RELEASING ========== "
version = version.replace("-SNAPSHOT", "")
println " release version is now ${version} "
println " ========== CLONE REPO ========== "
checkout scm
def sshFolderLocation = '/root/.ssh'
def sshBitbucketKeyTargetLocation = sshFolderLocation + '/id_rsa'
configFileProvider([configFile(fileId: 'bitbucket-ssh-key', targetLocation: sshBitbucketKeyTargetLocation)]) {
withCredentials([sshUserPrivateKey(credentialsId: gitCredentialsId, keyFileVariable: 'KEYFILEVARIABLE', passphraseVariable: '', usernameVariable: gitCredentialsId)]) {
sh "git config --global user.email \"jenkins@localhost\""
sh "git config --global user.name \"jenkins\""
sh "chmod 700 ${sshFolderLocation}"
sh "chmod 600 ${sshBitbucketKeyTargetLocation}"
def current_branch = sh(script: 'git rev-parse --abbrev-ref HEAD', returnStdout: true)
sh "git pull origin ${current_branch}"
println " ========== BUILD PACKAGE ========== "
configFileProvider([configFile(fileId: 'MAVEN_SETTINGS_FILE', variable: 'MAVEN_SETTINGS')]) {
sh "mvn -B -U org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$version"
sh "mvn -B -U clean install -Dmaven.test.skip=true"
}
println " ========== START PUBLISHING IN DEV SPACE ========== "
publishBinaryInDevSpace(version, groupId, mavenlocaldev, binaryName, artifactoryserver, buildInfo)
sh "git add ."
sh "git commit -m \"Release version $version\""
sh "git tag $version"
def newSnapshotVersion = upgradeVersionToSnapshot(version)
configFileProvider([configFile(fileId: 'MAVEN_SETTINGS_FILE', variable: 'MAVEN_SETTINGS')]) {
sh "mvn -B -U org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$newSnapshotVersion"
}
sh "git add ."
sh "git commit -m \"Back to Snapshot version\""
sh "git push -u origin ${current_branch}"
sh "git push --tag"
println " ========== START PROMOTING STAGE ========== "
promoteArtifact(artifactoryserver, buildInfo, mavenlocaldev, mavenlocalrelease)
}
}
Avec les méthodes :
def upgradeVersionToSnapshot(currentVersion) {
println currentVersion
String[] numbersInVersion = currentVersion.split("\\.")
String minorVersion = numbersInVersion[2]
int newMinorNumber = Integer.parseInt(minorVersion) + 1
return numbersInVersion[0] + "." + numbersInVersion[1] + "." + newMinorNumber + "-SNAPSHOT"
}
def publishBinaryInDevSpace(mavenVersion, groupId, artifactoryDevSpaceName, binaryName, artifactoryserver, buildInfo) {
def packageName = groupId.replace(".", "/")
def uploadSpec = """{
"files": [{
"pattern": "target/${binaryName}-${mavenVersion}.jar",
"target":"${artifactoryDevSpaceName}/${packageName}/${binaryName}/${mavenVersion}/${binaryName}-${mavenVersion}.jar"
},{
"pattern": "pom.xml",
"target":"${artifactoryDevSpaceName}/${packageName}/${binaryName}/${mavenVersion}/${binaryName}-${mavenVersion}.pom"
}]
}"""
buildInfo = artifactoryserver.upload uploadSpec
artifactoryserver.publishBuildInfo buildInfo
}
def promoteArtifact(artifactoryserver, buildInfo, artifactoryDevSpaceName, artifactoryReleaseSpaceName) {
def promotionConfig = [
// Mandatory parameters
'buildName' : buildInfo.name,
'buildNumber' : buildInfo.number,
'targetRepo' : artifactoryReleaseSpaceName,
// Optional parameters
'comment' : 'XXXxxxXXX is promoted',
'sourceRepo' : artifactoryDevSpaceName,
'status' : 'Released',
'includeDependencies': false,
'copy' : true,
// 'failFast' is true by default.
// Set it to false, if you don't want the promotion to abort upon receiving the first error.
'failFast' : true
]
// Promote build
artifactoryserver.promote promotionConfig
}