Cacher le SSID Public d’une Fonera 2100 avec le firmware FrancoFON

Voilà un titre de billet très spécifique… Mais si vous avez une vieille Fonera comme moi, vous avez peut-être installé FrancoFON et donc vous avez un accès SSH.

Une fois connecté en SSH, pour cacher le SSID Public de la Fonera, il suffit d’entrer la commande :
iwpriv ath0 hide_ssid 1

Android Lollipop – problème de microphone qui ne fonctionne plus

J’ai un Sony Xperia Z3 Compact et, soudainement, le micro s’est arrêté de fonctionner. Je suis passé sous Lollipop il y a quelques jours. Après investigation, cela est peut-être dû à l’utilisation de mon casque pour écouter de la musique… J’ai donc effectué quelques recherches pour trouver un correctif, et c’est finalement venu du Issue Tracker d’Android. Voici la marche à suivre :

  • Activer le mode Développeur en allant dans Paramètres > A propos du téléphone > puis tapoter plusieurs fois sur Numéro de build jusqu’à ce qu’un message apparaisse disant que le mode développeur est activé
  • Ensuite dans Paramètres > Options pour les développeurs > il faut décocher, dans multimédia, l’option qui s’appelle NuPlayer (expérimental)
  • Redémarrer le téléphone

Pour moi cette méthode a fonctionné. N’hésitez pas à cliquer sur l’étoile sur le Tracker d’Android concernant ce problème afin que Google s’occupe de publier un correctif.

Win32_Processor : invalide classe

J’ai eu un certain nombre d’erreurs qui m’ont amené à chercher comment fixer wmi concernant le message : « Win32_Processor : invalide classe »

J’ai finalement trouvé comment faire grâce à https://katyscode.wordpress.com/2007/02/03/tutorial-how-to-fix-wmi-corruption/ — il suffit de faire :

C:\Windows\System32\wbem>mofcomp cimwin32.mof
Compilateur MOF Microsoft (R) - Version 6.3.9600.16384
Copyright (c) Microsoft Corp. 1997-2006. Tous droits réservés.
Analyse du fichier MOF : cimwin32.mof
Analyse du fichier MOF effectuée
Stockage des données...
Terminé !

Et un autre lien utile : http://blogs.technet.com/b/askperf/archive/2009/04/13/wmi-rebuilding-the-wmi-repository.aspx

Utiliser un email alias avec GMail [Astuce]

Vous possédez une adresse GMail ? Et vous avez un autre email qui est redirigé vers votre boite GMail ? Et vous voulez envoyer des emails avec cet alias ? Par exemple, mon GMail est aymeric@gmail.com et je redirige aymeric@example.com vers cette même boite. Alors pour pouvoir envoyer des emails en aymeric@example.com depuis GMail c’est assez simple.

Tout d’abord il faut aller dans la partie configuration de GMail (en cliquant sur la roue dentée, puis sur « Afficher tous les paramètres ») :
Image pour montrer où cliquer

Se rendre dans Comptes et Importations puis cliquer sur Ajouter une autre adresse email :
Image pour montrer où cliquer
(cliquer pour agrandir)

Une fenêtre s’ouvre où vous devez entrer votre nom (qui apparaitra quand vous enverrez l’email) ainsi que l’email à utiliser. Décochez la case « Traiter comme un alias » :
démonstration en image

A l’étape suivant il va falloir entrer les coordonnées des serveurs de GMail qu’on utilisera pour envoyer nos messages. Pour cela on entre :

  • Serveur SMTP : smtp.gmail.com
  • Port : 587
  • Nom d’utilisateur : aymeric@gmail.com (votre adresse GMail donc)
  • Mot de passe : votre mot de pass GMail (si vous utilisez la validation par 2 étapes, alors il faudra utiliser un password générer via votre compte Google)
  • Connexion sécurisée TLS

Et en image :
Illustration en image des directives

Si vous avez une erreur (GMail indisponible, refaites la même opération … ça m’est arrivé quelques fois), sinon GMail va vous envoyer un email (sur l’alias, donc ici aymeric@example.com) et va vous demander de rentrer le code de sécurité envoyé dans cet email. Entrez ce code, et valider :
Image pour illustrer cette étape

C’est terminé ! Vous pouvez désormais envoyer des emails avec ce nouvel alias en cliquant simplement sur votre email principal à partir d’un nouveau message :
On montre où cliquer

Détecter la version d’IE [JavaScript]

Via http://tanalin.com/en/articles/ie-version-js/ on trouve un moyen simple de détecter la version d’IE :

var IE8 = !!(document.all && document.querySelector && !document.addEventListener); // -> true/false
var IE9 = !!(document.all && document.addEventListener && !window.atob); // -> true/false
var IE10 = !!(document.all && window.atob); // -> true/false

On peut aussi utiliser les conditionals compilation:

var ieVersion = /*@cc_on (function() {switch(@_jscript_version) { case 5.8: return 8; case 9: return 9; case 10: return 10;}})() || @*/ 0; // -> 8, 9 ou 10

Get window/viewport/document height and width [JavaScript]

Via andylangton and james.padolsey we can find the viewport and document height/width in JavaScript:

function getPageSize() {
  var vw = {width:0, height:0};
  var doc = {width:0, height:0};
  var w=window, d=document, dde=d.documentElement, db=d.getElementsByTagName('body')[0];
  
  // viewport size
  vw.width  = w.innerWidth||dde.clientWidth||db.clientWidth;
  vw.height = w.innerHeight||dde.clientHeight||db.clientHeight;

  // document size
  doc.width  = Math.max(db.scrollWidth, dde.scrollWidth, db.offsetWidth, dde.offsetWidth, db.clientWidth, dde.clientWidth);
  doc.height = Math.max(db.scrollHeight, dde.scrollHeight, db.offsetHeight, dde.offsetHeight, db.clientHeight, dde.clientHeight);
  
  // if IE8 there is a bug with 4px
  if (!!(document.all && document.querySelector && !document.addEventListener) && (vw.width+4 == doc.width) && (vw.height+4 == doc.height)) {
    vw.width=doc.width;
    vw.height=doc.height;
  }
  
   return {vw:vw, doc:doc};
}

getPageSize(); // -> {vw: { width:xxx, height:xxx }, doc: { width:xxx, height:xxx } }

It should work for IE8-IE10 and all modern browsers.

Autosize a text to fit into a div in pure/native JavaScript

I was looking for a very tiny and light solution to fit a text inside a box. The box’ height and width are fixed. I only found some great solutions like BigText but I didn’t want to have jQuery loaded.

Finally I found some code on StackOverflow and also at Coderwall. I created my own solution that could only work with my own HTML code… but I share it here, maybe that could help someone else.

The HTML code:

  
This is my text !

The related CSS code:

.ribbon-front { overflow:hidden }

And the JavaScript code:

var autoSizeText = function(selector) {
  "use strict";
  var el, elements, i, len, style, fontSize, IEoffsetHeight;
  elements = document.querySelectorAll(selector);
  if (elements.length <= 0) return;
  
  for (i=0, len = elements.length; i < len; i++) {
    el = elements[i];

    // we start from 0px and we grow by 0.5 until the content is too large
    fontSize=0;
    el.style.fontSize = "0px";
    // fix for all IE : I cache the offsetHeight, and if it becomes really bigger than the previous value, then we stop!
    IEoffsetHeight = el.offsetHeight;
    // check if our content is out its box
    while (el.scrollHeight===0 || el.scrollHeight >= el.offsetHeight) {
      fontSize += 0.5;
      el.style.fontSize = fontSize + 'px';

      if (el.offsetHeight - IEoffsetHeight > 10) break;
      IEoffsetHeight = el.offsetHeight;
    }
    el.style.fontSize = (fontSize - 0.5) + 'px';
  }
};
autoSizeText('.ribbon-front > span');

It works for IE8-IE10 and with all modern browsers.

You can see a demo at codepen.

Ajouter « nocaptcha reCaptcha » de Google à Guiform sous WordPress [Astuce]

J’utilise GuiForm pour faire des formulaires dans un WordPress, et je voulais y ajouter le captcha de Google sans pour autant devoir payer la licence chère de GuiForm juste pour ça…

Pour réussir ce que je décris ci-dessous, il vous faudra connaitre votre clé privée et publique de Google Captcha.

Il faut commencer par faire son formulaire (de contact dans mon cas) avec tous les champs voulus via GuiForm, puis on ajoute un champ de type « Heading » avec comme contenu « captcha ». On sauvegarde le formulaire.

Maintenant dans le fichier functions.php de votre thème il faut rajouter :

// on veut rajouter un captcha dans le formulaire de contact
// pour ça on surcharge 'guiform_render_form' qui est appelé par le plugin
function addCaptchaToGuiForm($content) {
  // on va remplacer "<h1>captcha</h1>" par ce qu'il faut
  $content = str_replace("<h1>captcha</h1>", "<div class='g-recaptcha' style='float:right' data-sitekey='VOTRE_CLE_PUBLIQUE' data-theme='light'></div><script src='https://www.google.com/recaptcha/api.js'></script>",$content);
  // on rajoute aussi du JavaScript
  $content .= '<script>'."\r\n".
              "function waitForjQuery() {"."\r\n".
              "  if (typeof jQuery === 'undefined') { setTimeout(waitForjQuery, 50); return }"."\r\n".
              "  var submit = jQuery('.f_submit');"."\r\n".
              "  var html = '<div class=\"'+submit[0].className+'\">'+submit.html()+'</div>';"."\r\n".
              "  submit.before(html).find('button').hide().prop('disabled', true);"."\r\n".
              "  var cloneSubmit = jQuery('.f_submit:first');"."\r\n".
              "  cloneSubmit.on('click', function(event) {"."\r\n".
              "    event.preventDefault();"."\r\n".
              "    jQuery.ajax({"."\r\n".
              "      type: 'GET',"."\r\n".
              "      url: '/wp-content/themes/VOTRE_THEME/checkCaptcha?response='+grecaptcha.getResponse(),"."\r\n".
              "      success: function(data) {"."\r\n".
              "        if (data['success'] === true) {"."\r\n".
              "          jQuery('.f_submit:first').remove()"."\r\n".
              "          jQuery('.f_submit').find('button').prop('disabled',false).show().last().trigger('click');"."\r\n".
              "        }"."\r\n".
              "        else if (data['error-codes']) {"."\r\n".
              "          switch (data['error-codes'][0]) {"."\r\n".
              "            case 'missing-input-secret': "."\r\n".
              "            case 'invalid-input-secret': alert('Erreur : impossible de vérifier le système anti-spam.'); break;"."\r\n".
              "            case 'missing-input-response': "."\r\n".
              "            case 'invalid-input-response': "."\r\n".
              "            default: alert('Erreur : vous devez répondre à l\'anti-spam.');"."\r\n".
              "          }"."\r\n".
              "        }"."\r\n".
              "      },"."\r\n".
              "      dataType: 'json'"."\r\n".
              "    });"."\r\n".
              "  })"."\r\n".
              "}"."\r\n".
              "waitForjQuery();"."\r\n".
              "</script>";
  return $content;
}
add_action('guiform_render_form', 'addCaptchaToGuiForm');

Grâce à cette astuce on modifie notre <h1>captcha</h1> par le code de Google. On ajoute un soupçon de JavaScript qui va permettre de cacher le vrai bouton « Submit ». Lorsqu’on va cliquer sur le faux bouton, le catpcha va être vérifié. Une fois fait le formulaire classique peut-être utilisé.

Attention : dans le code ci-dessus il faut remplacer VOTRE_CLE_PUBLIQUE et VOTRE_THEME par les valeurs correspondantes.

Enfin on a besoin de créer un fichier PHP à la racine de notre thème, qui va s’appeler checkCaptcha.php et qui aura comme contenu :

<?php
$url = "https://www.google.com/recaptcha/api/siteverify?secret=VOTRE_CLE_PRIVEE&response=".$_GET["response"];
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
echo $output;
?>

Attention : dans le code ci-dessus il faut remplacer VOTRE_CLE_PRIVEE par la valeur correspondante.