Archives de
Auteur : Dayo

Développeur depuis 2008, j’écris pour me souvenir et explorer de nouveau horizons.
for en JavaScript sur un tableau

for en JavaScript sur un tableau

Une grande partie viens de MDN.

for

for ([initialisation]; [condition]; [expression_finale]) {
   instruction
}

Permet d’initialiser des variables, de spécifier une condition pour finir la boucle, une expression final exécuté a la fin de chaque boucle et enfin les instructions a effectuer.

let str = "";

for (let i = 0; i < 9; i++) {
  str = str + i;
}

console.log(str);
// "012345678"

for…in

for (variable in objet) {
  instructions
}

Utile pour parcourir les propriété d’un objet. Attention avec les tableau car l’ordre de parcours n’est pas garantie.

var obj = {a:1, b:2, c:3};
    
for (var prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Affiche dans la console :
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

for…of

for (variable of iterable) {
  instruction
}

Permet de parcourir tout objet itérable et d’exécuter les instructions.

let iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);

for (let element of iterable) {
  console.log(element);
}
// ['a', 1]
// ['b', 2]
// ['c', 3]

for (let [clef, valeur] of iterable) {
  console.log(clef + ':' + valeur);
}
// a:1
// b:2
// c:3

Array.forEach

arr.forEach(callback);
arr.forEach(callback, thisArg);

Exécute la fonction callback sur chacun des éléments.

const array1 = ['a', 'b', 'c'];

array1.forEach(element => console.log(element));
// "a"
// "b"
// "c"

[2, 5, , 9].forEach(function(element, index, array) {
    console.log("a[" + index + "] = " + element);
});
// a[0] = 2
// a[1] = 5
// a[3] = 9

Sources:

  • https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/for
  • https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/for…in
  • https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/for…of
  • https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/forEach
GitLab et les badges de couverture de code

GitLab et les badges de couverture de code

Une fois GitLab CI configurer, une autre étape peut être l’ajout de badge sur le fichier readme du projet.

Pour cela rendez vous dans le partie Settings => CI /CD puis cliquez sur « Expand » en face de « General pipelines »:

En descendant vous trouverez une section « Test coverage parsing ». il faut utiliser « ^\slines[.]:\s*(\d+.\d+)\% » afin d’extraire la taux de couverture.

Vous pourrez alors rajouter un bagde montrant le taux de couverture de code.

Flutter et GitLabCI

Flutter et GitLabCI

Si vous souhaitez utiliser GitLabCI pour vos projet Flutter, voici la base du fichier .gitlab-ci.yml qu’il vous faudras:

Il faut commencer par spécifier une image docker a utiliser:

image: openjdk:8-jdk

Nous déclarons ensuite des variables afin de pouvoir mettre a jour plus facilement:

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.2"
  ANDROID_SDK_TOOLS:   "4333796"
  FLUTTER_VERSION: "https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.12.13+hotfix.5-stable.tar.xz"

Nous enchainons avec la description du test, les installtion de flutter, android sdk et autres

test:
  before_script:
    - apt-get -qq update --yes
    - apt-get -qq install --yes wget tar unzip lib32stdc++6 lib32z1 lcov
    - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
    - unzip -q -d android-sdk-linux android-sdk.zip
    - mkdir /root/.android
    - touch /root/.android/repositories.cfg
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
    - export ANDROID_HOME=$PWD/android-sdk-linux
    - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
    - export CI='true'
    # temporarily disable checking for EPIPE error and use yes to accept all licenses
    - set +o pipefail
    - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
    - set -o pipefail
    # flutter sdk setup
    - wget --quiet --output-document=flutter-sdk.tar.xz $FLUTTER_VERSION
    - tar -xf flutter-sdk.tar.xz
    - export PATH=$PATH:$PWD/flutter/bin
    - echo flutter.sdk=$PWD/flutter > android/local.properties
    - flutter packages get

Puis la partit test en elle même et la creation d’un artefact contenant les resultat de la couverture de code:

  script:
    - flutter test --coverage
    - genhtml coverage/lcov.info --output=coverage
  artifacts:
    paths:
      - coverage/
    expire_in: 5 days

Pour finir la partit publication de la couverture des tests dans les GitLab Pages:

pages:
  stage: .post
  script:
    - mkdir public
    - rm -Rf public/*
    - mv README.md public/README.md
    - mv -v coverage/* public/
  artifacts:
    paths:
      - public
  only:
    - master

Ce qui nous donne au final:

image: openjdk:8-jdk

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.2"
  ANDROID_SDK_TOOLS:   "4333796"
  FLUTTER_VERSION: "https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.12.13+hotfix.5-stable.tar.xz"

test:
  before_script:
    - apt-get -qq update --yes
    - apt-get -qq install --yes wget tar unzip lib32stdc++6 lib32z1 lcov
    - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
    - unzip -q -d android-sdk-linux android-sdk.zip
    - mkdir /root/.android
    - touch /root/.android/repositories.cfg
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
    - export ANDROID_HOME=$PWD/android-sdk-linux
    - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
    - export CI='true'
    # temporarily disable checking for EPIPE error and use yes to accept all licenses
    - set +o pipefail
    - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
    - set -o pipefail
    # flutter sdk setup
    - wget --quiet --output-document=flutter-sdk.tar.xz $FLUTTER_VERSION
    - tar -xf flutter-sdk.tar.xz
    - export PATH=$PATH:$PWD/flutter/bin
    - echo flutter.sdk=$PWD/flutter > android/local.properties
    - flutter packages get
  script:
    - flutter test --coverage
    - genhtml coverage/lcov.info --output=coverage
  artifacts:
    paths:
      - coverage/
    expire_in: 5 days

pages:
  stage: .post
  script:
    - mkdir public
    - rm -Rf public/*
    - mv README.md public/README.md
    - mv -v coverage/* public/
  artifacts:
    paths:
      - public
  only:
    - master

Un dépot git est disponible: https://gitlab.com/dayo/testgitlabciflutter/ et la couverture de code https://dayo.gitlab.io/testgitlabciflutter/

utf8_encode vs iconv

utf8_encode vs iconv

Attention, utf8_encode n’encode que depuis ISO-8859-1 pour tout autres encodage il faut utiliser iconv.

utf8_encode($text)

est la même chose que

 iconv('ISO-8859-1', 'UTF-8', $text)
Apache POI et le format comptabilité

Apache POI et le format comptabilité

Si vous devez formater une cellule au format compatibilité, voici comment faire.

Dans Excel sélectionner une cellule et formater la comme souhaité. Sélectionner alors « Autres format numériques » puis « Personnalisée ». Vous aurez alors la valeur copier dans votre code.

Vous devriez avoir un code comme ca:

DataFormat df = wb.createDataFormat();
dollarStyle = wb.createCellStyle();
dollarStyle.setDataFormat(df.getFormat("_-[$$-409]* # ##0,00_ ;_-[$$-409]* -# ##0,00\\ ;_-[$$-409]* \"-\"??_ ;_-@_ "));