Récupérer le numéro de licence Windows10 en ligne de commande

vignette windows 10

Il existe plein d’utilitaires pour récupérer le numéro de licence de Windows10 sur internet mais :

  • on les trouve pour certains chez des éditeurs inconnus ou douteux
  • on n’a pas trop d’idée de ce qui est fait de la donnée (si elle est balancée chez l’éditeur du soft ou chez quelqu’un d’autre)
  • et surtout, on ne sait pas – à supposer que les données partent dans la nature – ce qui est envoyé en plus comme données.

Bref, à titre personnel, je n’ai presque aucune confiance en ces machins.

Alors, comment fait-on, du coup ? Eh ben on sort son vieil écran de ligne de commande (le même truc que vous vérifier l’état de sa batterie d’ordinateur portable) et on tapote gentiment à la mimine vu qu’on peut récupérer l’information propre au numéro de licence avec. Voyons comment faire :

Etape 1 : Ouvrir l’invite de commande en administrateur

  • Appuyez sur la touche windows (c’est le drapeau à gauche de la barre d’espace)
  • Tapez le mot « cmd » sans les guillemets
  • Faites un clic droit sur la mention en surbrillance « Invite de commande » pour le lancer en administrateur

A ce stade, vous aurez à valider le fait que vous acceptez d’ouvrir en administrateur. Dites oui. Ce qui vous fait arriver sur ça :

Etape 2 : Récupérer la clé d’activation Windows10

Une fois que vous êtes là, il vous suffit simplement de copier-coller ce bout de texte et d’appuyer sur Entrée :

wmic path softwarelicensingservice get OA3xOriginalProductKey

pour obtenir en 2 secondes votre numéro de série windows10

Facile, non ?

Fabriquez votre casque pour avoir des yeux d’Asgardien en colère

casque de thor diy

Si vous ne tenez pas trop à vos yeux, que vous êtes bricoleur et que vous êtes un méga super fan de Thor, le youtubeur KyleofAsgard a un truc pour vous.

Il propose, en effet, dans sa dernière vidéo de fabriquer le casque de Thor en mode vener, celui qui fait les yeux luisant bleus. Pour ce faire, il balance sur des lentilles (il faut acheter des lentilles aussi) une lumière UV. Le résultat est du plus bel effet…

… Bonjour les séquelles

Twitter victime d’une attaque par mèmes

homme a la pelle devant chateau de sable

Un mème est, je cite, « un élément ou un phénomène repris et décliné en masse sur internet« . Pour vous donner un exemple, c’est ce qu’on a pu trouver lors du célèbre slipgate :

Des mèmes, sur Twitter, je ne dirais pas qu’il n’y a que ça mais c’est pas loin.

Du coup, des hackers ont eu la bonne idée de croiser mèmes et stéganographie (mettre du texte dans une image) pour déclencher un joli malware sur le PC des imprudents qui récupèrent ces images.

Le lièvre a été levé par Trendmicro dans un article daté du 14 décembre 2018. Les chercheurs de cette boîte ont découvert qu’un compte désormais fermé postait des mèmes permettant de déclencher le troyen TROJAN.MSIL.BERBOMTHUM.AA qui lance entre autres la commande /print sur les machines infectées.

Du coup, non seulement ce trojan fait des copies d’écran qu’il balance aux hackers (sympa quand on tape son code bancaire ultra sécurisé) mais en plus, il fournit des indications système (un peu plus poilu que l’état de la batterie, je pense), ou le contenu du presse papier (bonjour les copier-coller) ou encore le compte du PC infecté. Sympa !

Actuellement, cette faille n’est pas corrigée, ce qui signifie que les machines infectées le sont toujours et que les antivirus ne feront rien dans l’immédiat. Le contournement est donc de bloquer au travers de votre firewall les demandes d’accès vers « twitter.com » étant donné que cette cochonnerie a besoin de cette accès pour balancer vos informations dans la nature.

Voir l’état de la batterie d’un portable sous windows 10

batterie portable pc conservation

Si vous avez des doutes sur l’état de santé de votre batterie de PC portable sous Windows 10, savez vous qu’il est possible de demander au système d’en sortir un état de santé très facilement ? Voici comment faire en 3 étapes :

Etape 1 : Accéder à l’invite de commande

  • Appuyez sur la touche windows (c’est le drapeau à gauche de la barre d’espace)
  • Tapez le mot « cmd » sans les guillemets
  • Appuyez sur la touche « Entrée »

Etape 2 : Lancez votre rapport d’état de batterie Windows 10

Dans la fenêtre de l’invite de commande, tapez « powercfg /batteryreport » et appuyez la touche « Entrée ». Cela générera immédiatement le rapport au format HTML dans votre répertoire utilisateur, c’est à dire consultable au travers de votre navigateur préféré.

Etape 3 : Accédez à votre rapport

Cette étape est très simple puisqu’il suffit de vous rendre dans le répertoire indiqué et de double cliquer sur le fichier générer pour le consulter

Et le rapport (vous allez voir, il est très long) :

J’ai testé la trottinette TecTecTec TPRO2

trotinette tpro2

On vient de m’offrir la trottinette de marque TecTecTec TPRO2 nouvellement sortie qui se pose en concurrence directe de la Xiaomi M365 en terme de performance et de design, c’est à dire de la trottinette pour adulte.

Je ne vais pas m’étendre sur la Xiaomi, ça n’est pas le propos et internet regorge d’articles et de vidéo à son sujet, sauf sur deux points : La fabrication et le SAV.

TecTecTec est une boîte bretonne familiale française qui assemble ses produits en France (ce qui ne signifie pas forcément qu’ils sont de fabrication française). Cela implique que la livraison est hyper rapide (j’ai éprouvé à 2 jours), que le SAV est assuré sur le territoire – ce qui est vraiment très appréciable – et que les pièces détachées ne mettent pas 2 mois pour arriver en cas d’avarie. Quand on lit les commentaires des acquéreurs de Xiaomi en panne qui ne disposent plus de service après vente en France, ça donne à réfléchir.

Passons au produit maintenant. 

Le contenu du colis

Si vous vous faites livrer en point relais, prenez votre voiture ou un diable. Le colis contenant la trottinette est de bonne dimension et il pèse son poids (17kg). 

Il est composé de :

  • la trottinette
  • deux poignées dont une avec le frein
  • du chargeur
  • du feu avant (avec ses deux caoutchoucs de fixation)
  • de la visserie (va falloir bosser un peu)
  • de 3 caches câbles

L’assemblage de la TPRO2

La première chose à faire après avoir tout déballé est de fixer les poignées. Deux vis sont prévues à cet effet, une clé allen est fournie et la potence a un détrompeur pour insérer correctement sans se tromper.

Viennent ensuite les pièces de caoutchouc pour les passages de câbles. Ca, c’est chiant à mettre mais avec un peu de patience, ça se fait bien. Malgré tout, la mise en place est un peu embêtante, on peut doubler d’un chatertone pour assurer le maintien et l’étanchéité.

Puis enfin, le feu avant qui s’attache avec  deux pièces de caoutchouc autour de la potence. Pour cette pièce, Tectectec a pris le parti de désolidariser cet élément de la trottinette, certainement pour une raison de coût de fabrication. 

N’étant pas alimenté par la batterie principale, il dispose de sa propre batterie rechargeable par micro-USB.

Aspect général de la TPRO2

La TPRO2 est une trottinette éléctrique pour adulte et ça se voit puisqu’elle est d’allure robuste avec son large plancher, ses grandes et larges roues (une pleine à l’arrière de 10,5″ et une gonflable à l’avant de 10″) et son garde boue arrière qui n’est pas là que pour la représentation comme souvent sur ce genre d’appareil. L’ensemble est d’allure massive et équilibré.

En revanche, elle ne dispose pas d’afficheur de vitesse comme sur les modèles récents chinois type ES2 et suivants. Il faut se reporter à l’application pour visualiser sa vitesse. Encore un choix de coût de fabrication, je pense. Mais est-ce important ?

Malgré ses dimensions (taille dépliée : 118 x 37 x 114 cm / taille pliée : 118 x 37 x 39 cm), elle ne pèse « que » 12,4kg.

Le pliage de la potence se fait aisément en tournant la roue avant à fond à gauche pour pouvoir désenclencher le système de blocage et le dépliage / verrouillage en mettant la roue à fond à droite. Super simple !

Premier chargement de la TPRO2

Sur ce point, j’ai eu une petite frayeur, ce qui m’a permis d’éprouver le SAV.

Avant la première utilisation, il faut s’armer de patience et ne pas croire les indications de la batterie. Je m’explique :

Lorsque j’ai branché la trottinette, le chargeur s’est mis au vert et les 4 leds indiquant la charge étaient allumées. Cela correspond à la pleine charge. J’ai donc pensé innocemment que la TPRO2 étaient livrée chargée à bloc et qu’il suffisait de grimper dessus. Erreur !

En fait, il faut la brancher puis attendre 45 minutes avant que la batterie comprenne qu’on lui veut quelque chose, comme en atteste le mail reçu en 24h du SAV :

Lorsque vous branchez la trottinette pour la première fois, la LED du chargeur restera verte pendant environ 45 minutes, de même pour les 4 LED de la TPRO2. La LED du chargeur passera ensuite au rouge et une LED de la TPRO2 commencera à clignoter. Laissez charger 5 heures.


Voici également la procédure qui calibrera parfaitement votre TPRO2 et vous fera découvrir l’application TPRO2:


1/ Téléchargez l’application TPRO2 (uniquement disponible sur Android et bientôt sur iOs)
2/ Enclenchez le bluetooth de votre smartphone.
3/ Suite à cette action, ne sélectionnez aucun périphérique car c’est l’application qui se connectera à votre trottinette, pas votre smartphone.
4/ Ouvrez l’application TPRO2
5/ Allumez la trottinette
6/ « electronic scooter » apparaît sur l’application. Appuyez dessus.
7/Vous êtes maintenant connecté !
8/ Appuyez sur le mode confort (symbolisé par une plume, au milieu en bas de l’application) puis appuyez sur le mode sport.

Source : SAV Tectectec

Le chargement complet s’effectue en un peu plus de 5h.

L’application smartphone de la TPRO2

L’application smartphone de cette trottinette n’est disponible que pour Android. Il n’y a, à ce jour, aucune application iOS disponible. 

Disposant d’un Android, je n’y vois pas d’inconvénient mais je trouve ce positionnement surprenant au regard du nombre de possesseur d’iPhone. Cette absence doit en rebuter plus d’un.

Concernant l’application en elle-même, elle est purement moche. Le choix des couleurs est digne d’un mix revival années 70′ – 90′. C’est aux couleurs sous-pull nylon sous une veste en tergal. 

Passé l’aspect esthétique, elle permet de mettre à jour la trottinette, de sélectionner le mode de pilotage (débutant / confort / sport), d’afficher la vitesse, le nombre de kilomètres du dernier parcours et le kilométrage/heure moyen du dernier parcours mais

  • elle ne donne aucune indication lors de la mise à jour, ni sur le fait qu’il y a une mise à jour en cours (que se passe-t-il si on l’interrompt en cours de route ?)
  • elle ne propose pas la distance parcourue au global

Ces deux points mériteraient d’être ajoutés, surtout le dernier pour anticiper le moment où il faudra réaliser une maintenance.

Sur la route avec la TPRO2

Passons maintenant au point le plus important, le pilotage de l’engin.

Pour le dire simplement : C’est du pur kif !

Le confort

Sur le même parcours, j’ai eu l’occasion de tester une M365, une ES1 et une ES2, c’est à dire les modèles de Xiaomi.

Ce parcours est fait de route normale et de piste cyclable. Cette dernière est un peu défoncée avec un revêtement mal fait plein de bossettes par endroits. Avec les modèles cités, ce passage a toujours été un enfer pour le dos, les genoux et le cou en raison du ressenti des imperfections de la route et de la rigidité des modèles (y compris celui avec pneus gonflables).

Eh bien là, avec la TPRO2, rien, nada, que dalle ! Du velours. Ca passe comme une fleur. Un peu comme avec un vélo et le tout à fond la pédale.

Le pilotage

Parce que oui, la TPRO2 ne se commande pas à la poignée mais au pied. La bosse sur plancher est une pédale d’accélération.

Comme quelques commentateurs sur les sites d’achats, j’avais quelques craintes quant au dosage de la puissance avec un pied lourdement appuyé sur l’accélérateur. Ce n’est pas le cas. C’est même plutôt pratique, en fait puisqu’on a les mains libres pour s’occuper du guidon et du frein positionné sur la poignée gauche.

Le freinage

Tiens, parlons en du freinage. La TPRO2 embarque sur sa roue arrière un frein à disque qui fait le job doublé d’un frein magnétique e-ABS progressif avec récupération d’énergie. Du coup, après l’avoir réglé correctement (il y a un tuto sur tectectec.fr pour ça), on se sent vraiment en sécurité sans craindre de faire un soleil (ce qui a failli m’arriver sur une ES2).

Par ailleurs, l’enclenchement du freinage désactive l’accélération – et récupère de l’énergie – même si on a le pied à fond sur la pédale. Ca aussi, c’était ma crainte de ne pas pouvoir freiner à temps avant une voiture qui coupe la route. 

La position de conduite

Comme vu plus haut, la taille de la potence dépliée est à 114cm sans possibilité de réglage. 

Pour vous donner un ordre d’idée, pour quelqu’un comme moi qui mesure 1m81, le guidon m’arrive un peu plus haut que la ceinture, soit un bon positionnement bien droit sur l’engin.

Les performances

Pour ce qui est des performances, il est indiqué que la TPRO2 supporte jusqu’à 100kg avec une propulsion optimale jusque 80kg. Perso, je pèse 79kg + 2 à 3 kg de poids dans le sac dos et ça passe largement.

Au premier parcours, j’ai un peu peiné à atteindre les 25km/h annoncés mais ça s’est réglé dès le second. Sans doute comme pour la première charge, fallait-il que la batterie comprenne qu’on va lui vouloir du mal.

En tout cas, ça fonctionne sans problème. Il faut dire qu’il y en a sous la pédale. Le moteur embarque 350W nominal et 700W au max. Il permet de se lancer sans donner de poussée et – selon le descriptif technique – de gravir des côtes de 15 degrés sans difficulté. En fait, ça se mange des côtes de 25% sans défaillir (mais avec un léger ralentissement (c’est pas un scooter non plus)).

Bilan d’utilisation de la Tectectec TPRO2

En résumé, je suis extrêmement satisfait de cette trottinette Tectectec pour plusieurs raisons :

  1. elle est vraiment robuste
  2. on se sent en sécurité sur la route
  3. le pliage / dépliage est hyper facile
  4. il y a un vrai SAV 

Faudra juste revoir l’application 🙂

La trottinette TPRO2 est au prix de 599€ livré en 2 à 8 jours. Commandez la votre :

Ceci n’est pas un article sponsorisé

Comment craquer le mot de passe d’un fichier zip ou rar

image password
Besoin d’éclater sa tronche au mot de passe récalcitrant d’un fichier .zip ou .rar ?
Allez jeter un oeil sur github, il y a un petit utilitaire python 3.x sympa pour ça qui fonctionne simplement :
python crack.py -i INPUT [rules [rules ...]]

positional arguments:
  rules                 <min> <max> <character>

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        Insert the file path of compressed file
Le script est directement téléchargeable ou récupérable via git.

Le système d’immatriculation des véhicules vend vos données

a quoi sert rgpd

Lorsque vous achetez un véhicule, la première chose que vous faites après le chèque au vendeur est de remplir votre formulaire cerfa n°13750*05 intitulé « Demande de certificat d’immatriculation d’un véhicule » que l’on trouve aisément sur le site service-public.fr

Sa validation par les autorités compétentes après avoir été complété par le vendeur et l’acheteur / loueur permet la délivrance de la carte grise. Mais pas que !

En effet, si vous ne prenez pas garde à sa lecture lorsque vous le complétez, vous vous exposez à vous faire pourrir la boîte aux lettres, la boîte mail et possiblement vos fils de réseaux sociaux par des publicités agressives vous proposant véhicules et accessoires en lien avec votre achat.

Comment ? Simplement parce que vous auriez oublié, lors de la vente, de cocher une case. Celle de tout en bas, juste en dessous des signatures. Celle qui est tout sauf conforme au RGPD (Réglement Général de Protection des Données) avec lequel on nous a bassiné en mai 2018.

Car ce bas de formulaire propose  un opt-out, c’est à dire une acceptation tacite de recevoir de la pub SAUF si vous déclarez que vous n’êtes pas d’accord en cochant la case. Puis il précise grâce à la petite astérisque qui renvoie vers le texte écrit en tout petit que cela ne s’applique qu’aux personnes physiques, c’est à dire aux particulier.

Ce qu’il faut savoir, c’est qu’en l’état actuel de la réglementation, la CNIL admet le recours à l’opt-out sur un site internet à l’adresse de professionnels dans le cadre de relations commerciales B2B

En bon français, B2B signifie « Business To Business » et donc entreprise à entreprise. En aucun cas B2C (Business To Client), c’est à dire le contraire de la règle imposée dans le cadre de la mise en conformité au réglement européen.

Tout doser en cuisine avec une tasse et deux cuillères

cuillere emplie de farine

Quand on se lance dans la popote, le dosage est primordial, surtout quand on suit une recette pour la première fois.

Pour se repérer dans les doses de liquide, voici quelques astuces très utiles quand on n’a rien sous la main pour mesurer excepté ce que l’on trouve dans toute cuisine, c’est à dire une cuillère à soupe, une cuillère à café et une tasse.

En préambule, et surtout s’il vous prend l’envie de suivre une recette d’un site anglais, il faut que vous sachiez que le mot « cup » n’est pas à proprement une tasse de chez nous. Dans le système de mesure nord-américain (USA et Canada), une tasse représente 240ml.

Chez nous, en revanche, la mesure d’une tasse est de 150ml. C’est le mug standard qui fait 240ml. Ne vous faites donc pas avoir !

Pour nos deux autres ustensiles, le dosage est inchangé. La cuillère à soupe rase contient 15ml et la cuillère à café, 5ml.

 

Du coup, la table de conversion donne :

  • 1 mug = 1 tasse et 1/2 = 16 cuillères à soupe = 48 cuillères à café = 240ml = 24cl
  • 3/4 mug = 1 tasse + 2 cuillères à soupe = 180ml = 18cl
  • 1 tasse = 10 cuillères à soupe = 150ml = 15cl
  • 1/2 tasse = 5 cuillères à soupe = 75ml = 7,5 cl
  • 4 cuillères à soupe = 12 cuillères à café = 60ml = 6cl
  • 2 cuillères à soupe = 6 cuillères à café  =30ml = 3cl
  • 1 cuillère à soupe = 3 cuillères à café = 15ml = 1,5cl
  • 1 cuillère à café = 5ml

 

 

Pagination de checkbox complétée depuis la BDD sous codeigniter

logo codeigniter

Je fais une petite fixette sur codeigniter dans le cadre de l’écriture d’une application en ce moment. Ce billet est un aide mémoire (ou un tuto de bout en bout pour ceux que ça intéresse).

Contexte :

L’application a comme groupes de rôles l’administrateur puis quelques milliers d’autres groupes destinés à restreindre en visibilité les utilisateurs (environ 10000) dès la connexion sur leurs groupes utilisateurs respectifs. Pour schématiser, c’est un peu le fonctionnement de consultation de N comptes bancaires qui seraient consultés chacun par X utilisateurs.

Problème :

Pour initier le projet, j’ai pris le parti de ne pas me casser la tête à créer la librairie d’authentification de toute pièce. Mon choix s’est donc porté sur Codeigniter ion_auth library qui est complète et simple d’utilisation MAIS qui présente un très gros inconvénient : il n’y a pas de système de pagination des groupes utilisateurs.
Dans son fonctionnement, la librairie ion auth propose d’assigner les groupes aux utilisateurs (ce qui m’arrangeait). C’est pratique quand on a 4 ou 5 rôles à distribuer mais avec plus de 3000 rôles (correspondant à des groupes de consultation), ça devient totalement ingérable. Il est impensable de devoir chercher, depuis une fiche utilisateur, quelles sont les cases à cocher parmi 3000 groupes portant approximativement le même nom.

Solution :

Pour résoudre ce désagrément sans tout exploser, j’ai sorti le combo JSON + jQuery + datatables pour résoudre ce problème de pagination de checkboxes en utilisant ce que j’ai trouvé sur internet. Le moteur de recherche m’a guidé vers :

C’est parti !

Etape 1 : Création du fichier JSON

Ce fichier est utilisé par le script de génération des groupes. Il est utilisé pour afficher l’intégralité des groupes utilisateurs de ion auth sur lesquels ont va jouer avec les cases à cocher.

Il est formé de cette manière :
{« data »:[[« 1″, »admin »],[« 2″, »members »],[« 6″, »GROUPE1 »],[« 7″, »GROUPE2 »],[« 8″, »GROUPE3 »]]}

Comme ce n’est pas la construction par défaut de ce que ion auth propose pour la création de notre json sous codeigniter, on va exploiter une méthode du modèle Ion_auth_model.php

$this->data['groups'] = $this->ion_auth->groups()->result();

// CREATION DU JSON
$longueur = count($this->data['groups']);
$contenu_json = '{"data":[';
for ($i=0; $i < $longueur; $i++)
{
  $contenu_json .= '["'.$this->data['groups'][$i]->id.'","'.$this->data['groups'][$i]->name.'"]';
  if ($i != $longueur-1)
  {
    $contenu_json .= ',';
  }
}
$contenu_json .= ']}';
// FIN CREATION JSON

    //echo '{"data":[["'.$this->data['groups'][0]->id.'","'.$this->data['groups'][0]->name.'"]]}';
//$contenu_json = json_encode($this->data['groups']);
//var_dump($contenu_json);

// Nom du fichier à créer
$nom_du_fichier = 'fichier.json';

// Ouverture du fichier
$fichier = fopen($nom_du_fichier, 'w+');

// Ecriture dans le fichier
fwrite($fichier, $contenu_json);

// Fermeture du fichier
fclose($fichier);

C’est fait. Notre fichier fichier.json est dorénavant à la racine -> http://localhost/fichier.json (qu’il faudra placer ailleurs en situation réelle, bien sûr).

On peut du coup passer à la suite.

Etape n°2 : Préparation du tableau de cases à cocher datatables

Dans la vue users/edit_user_view.php virer

  <div class="form-group">
    <?php
    if(isset($groups))
    {
      echo form_label('Groupes','groups[]');
      foreach($groups as $group)
      {
        echo '<div class="checkbox">';
        echo '<label>';
        echo form_checkbox('groups[]', $group->id, set_checkbox('groups[]', $group->id, in_array($group->id,$usergroups)));
        echo ' '.$group->name;
        echo '</label>';
        echo '</div>';
      }
    }
    ?>
  </div>
  <?php echo form_hidden('user_id',$user->id);?>
  <?php echo form_submit('submit', 'Modifier l\'utilisateur', 'class="btn btn-primary btn-lg btn-block"');?>
<?php echo form_close();?>

et remplacer par  :

<div class="form-group">
<table id="example" class="display select" cellspacing="0" width="100%">
   <thead>
      <tr>
         <th><input name="select_all" value="1" type="checkbox"></th>
         <th>Noms Groupes</th>
      </tr>
   </thead>
</table>
<?php echo form_hidden('user_id',$user->id);?>
<p><button class="btn btn-primary btn-lg btn-block">Modifier les données</button></p>
</form>

L’absence de balise <td></td> est normale. Elle vont apparaître à la lecture du JSON.

Etape 3 : JQuery de génération des cases à cocher datatables, coche des cases de la BDD et soumission du formulaire

a/ Traiter le contrôleur pour que la vue repeuple le formulaire des cases déjà cochées (en base)

Dans Users.php qui envoie les données à la vue, il faut charger $this->data['votrevariable'] avec les groupes déjà assignés à l’utilisateur pour recocher les cases :

$this->data['groupes_utilisateur'] = $usergroups = $this->ion_auth->get_users_groups($user->id)->result();

b/ Positionner le script Jquery de génération / lecture des cases à cocher

Et $groupes_utilisateur est exploité par le javascript (cf. ci-dessous « boucle de récupération des groupes ») :

<script type="text/javascript">
// DEBUT SCRIPT JSON
function updateDataTableSelectAllCtrl(table){
   var $table             = table.table().node();
   var $chkbox_all        = $('tbody input[type="checkbox"]', $table);
   var $chkbox_checked    = $('tbody input[type="checkbox"]:checked', $table);
   var chkbox_select_all  = $('thead input[name="select_all"]', $table).get(0);

   // Si aucune des checkbox n'est cochée
   if($chkbox_checked.length === 0){
      chkbox_select_all.checked = false;
      if('indeterminate' in chkbox_select_all){
         chkbox_select_all.indeterminate = false;
      }

   // Si toutes les checkbox sont cochées
   } else if ($chkbox_checked.length === $chkbox_all.length){
      chkbox_select_all.checked = true;
      if('indeterminate' in chkbox_select_all){
         chkbox_select_all.indeterminate = false;
      }

   // Si quelques checkbox sont cochées
   } else {
      chkbox_select_all.checked = true;
      if('indeterminate' in chkbox_select_all){
         chkbox_select_all.indeterminate = true;
      }
   }
}

$(document).ready(function (){
   
   <?php 
   // boucle de récupération des groupes de l'utilisateur pour 
   // repeupler le tableau
   $lignes_a_cocher = "";
   foreach ($groupes_utilisateur as $guser) {
      $lignes_a_cocher .= '"'.$guser->id.'",';
   } 
   $lignes_a_cocher = rtrim($lignes_a_cocher,',');


   ?>
   // Tableau contenant les ID sélectionnés
   var rows_selected = [<?php echo $lignes_a_cocher?>];
   var table = $('#example').DataTable({
      'ajax': 'http://localhost/fichier.json',
      'columnDefs': [{
         'targets': 0,
         'searchable':false,
         'orderable':false,
         'width':'1%',
         'className': 'dt-body-center',
         'render': function (data, type, full, meta){
             return '<input type="checkbox">';
         }
      }],
      'order': [1, 'asc'],
      'rowCallback': function(row, data, dataIndex){
         // Récupération du row ID
         var rowId = data[0];

         // SI le row ID est dans la liste des row ID sélectionnés
         if($.inArray(rowId, rows_selected) !== -1){
            $(row).find('input[type="checkbox"]').prop('checked', true);
            $(row).addClass('selected');
         }
      }
   });

   // Tient le clic sur la checkbox
   $('#example tbody').on('click', 'input[type="checkbox"]', function(e){
      var $row = $(this).closest('tr');

      // Récupère le row data
      var data = table.row($row).data();

      // Récupère le row ID
      var rowId = data[0];

      // Determine whether row ID is in the list of selected row IDs 
      var index = $.inArray(rowId, rows_selected);

      // Si la checkbox est cochée et que le row ID n'est pas
      // dans la liste des row ID
      if(this.checked && index === -1){
         rows_selected.push(rowId);

      // Sinon, si la checkbox n'est pas cochée et 
      // que le rowID est dans la liste des row ID sélectionnés
      } else if (!this.checked && index !== -1){
         rows_selected.splice(index, 1);
      }

      if(this.checked){
         $row.addClass('selected');
      } else {
         $row.removeClass('selected');
      }

      // Met à jour le contrôle SELECT ALL
      updateDataTableSelectAllCtrl(table);

      // Evite que le clic se propage au parent
      e.stopPropagation();
   });

   // Gère le clic sur les cellules en lien avec les checkboxes
   $('#example').on('click', 'tbody td, thead th:first-child', function(e){
      $(this).parent().find('input[type="checkbox"]').trigger('click');
   });

   // Gère le clic select all
   $('thead input[name="select_all"]', table.table().container()).on('click', function(e){
      if(this.checked){
         $('#example tbody input[type="checkbox"]:not(:checked)').trigger('click');
      } else {
         $('#example tbody input[type="checkbox"]:checked').trigger('click');
      }

      // Evite que le clic se propage au parent
      e.stopPropagation();
   });

   // Récupère les évènements du draw de la table
   table.on('draw', function(){
      // Mets à jour en cas de "select all"
      updateDataTableSelectAllCtrl(table);
   });
    
   // Récupère l'évènement de soumission de formulaire 
    $('#frm-example').submit(function(e) {
      var form = this;

      // Itère en fonction des checkboxes cochées
      $.each(rows_selected, function(index, rowId){
         // Constitution du formulaire
         $(form).append(
             $('<input>')
                .attr('type', 'hidden')
                .attr('name', 'groups[]')
                .val(rowId)
         );
      });

   });
});
// FIN SCRIPT JSON

Youhou ! Ca marche !

 

PS : A ajouter dans le header (en plus de jquery)

<script src="https://cdn.datatables.net/select/1.2.7/js/dataTables.select.min.js"></script>
<link type="text/css" href="https://cdn.datatables.net/select/1.2.7/css/select.dataTables.min.css" rel="stylesheet" >