Ma vision pour résoudre les problèmes qui durent

J’ai la chance que l’on me confie souvent des problèmes complexes à résoudre, qui durent en général depuis pas mal de temps, et où plusieurs personnes s’y sont déjà, comment dire… »cassé les dents » ?

Je parle bien de chance, car c’est à travers ces expériences que j’apprends souvent le plus. Toutes les solutions classiques ont déjà été essayées plusieurs fois, et il faut donc « innover » pour trouver le grain de sable, le petit détail qui va faire la différence !

Voici les quelques règles/approches que j’applique :

  • Ne pas se faire expliquer tout ce qui a été essayé. On construit un diagnostic à partir d’hypothèse, que l’on vérifie, et dont on considère ensuite les résultats comme réputés « surs ». Il va ensuite se passer un long moment avant que l’on remette en question ces résultats et que l’hypothèse soit évaluée à nouveau. Si la personne qui a passé X jours ou heures dessus vous explique tout ce qu’elle a fait et les résultats qu’elle a eu, et qu’elle est convaincante, vous allez vous aussi construire ensuite à partir de ces informations et arriver à la même impasse. Il peut s’avérer que certains résultats soient erronés, ou qu’ils soient arrivés avec un concours de circonstance ou ne soient plus d’actualité. Vous avez la chance unique d’avoir un regard neuf, absent de tout cela. Et vous n’avez qu’un essai, car vous allez vous aussi émettre bientôt des hypothèses et rentrer dans l’entonnoir ! L’inconvénient est que vous allez certainement perdre du temps en essayant des choses qui ont déjà été testées à maintes reprises, mais c’est le prix à payer pour résoudre le problème. L’objectif est de comprendre juste le problème.
  • Avoir accès à tout ce qui est nécessaire. Il est crucial de pouvoir s’incruster dans toutes les couches (système/réseau/sécurité), afin de comprendre l’ensemble. Bien sûr cela se complique avec la taille de la structure et sa segmentation. Cela passe parfois par des ruses techniques afin de ne devoir attendre une validation organisationnelle ou technique.
  • Pouvoir reproduire le même le test ou scénario. Pour vérifier les idées et hypothèses, il faut valider le changement de comportement ou non en fonction des modifications, et donc pouvoir reproduire le problème à volonté.
  • Utiliser ses propres outils. Vous travaillez tout le temps avec Wireshark et là il n’y a que Network Monitor ? Il faut se battre pour utiliser ce que vous connaissez, pour plusieurs raisons. Déjà c’est un gain de temps immédiat. Un outil n’a d’intérêt que si l’on sait s’en servir. Aucun doute que l’on peut arriver au même résultat avec 2 outils, mais il faut être parfaitement à l’aise, afin de se concentrer sur que l’on voit (dans l’exemple, les paquets réseaux), et non pas sur comment mettre un filtre pour masquer ou afficher certains détails.
  • Valider les hypothèses majeures 2 fois et par deux outils si possible. Se tromper sur une hypothèse de ce type, et on risque de ne pas trouver avant longtemps. Si l’on construit d’après des connaissances d’une version précédente (sous Windows 2003 ça fonctionnait comme cela) alors qu’on est sur du Windows 2008, vérifier la documentation officielle pour entériner l’hypothèse.
  • Ne pas hésiter à générer des erreurs. Si l’on pense qu’un paramètre est complètement hors de cause, ne pas hésiter à le rendre faux et valider qu’il n’impacte toujours pas le problème.

Comme tout « sport », on prend des réflexes au fur et à mesure 🙂

Et vous, comment résolvez-vous vos problèmes ?

Le mot de la fin : Si vous aussi vous avez des cadavres et autres problèmes de préférence « insolubles », pensez à moi !

PowerShell: Measure-Command et Write-Output

Measure-Command permet de mesurer le temps d’exécution d’un bloc de code PowerShell, de façon simple et efficace. Cependant, cela génère une contrainte:

Measure-Command n’affiche aucun write-output à l’écran!

Il faut alors utiliser par exemple write-host, qui lui envoi le texte directement à la console, et n’est donc pas impacté. Utiliser write-host peut générer des impact:

  • Une redirection de la sortie écran vers un fichier ne fonctionnera pas ( > monlog.txt).
  • L’ordonnanceur ORSYP ne gère pas bien les sorties faites par Write-host, alors que les write-output ne posent pas de problème

Voici un script pour illustrer le sujet (ou à télécharger ici lotp_test_measure-command):

#******************************************************************************
#
#
Titre: lotp_test_measure-command.ps1
#
#
Description: test de measure-command
#
#
Prérequis: désactiver la signature des scripts PowerShell: Set-ExecutionPolicy remotesigned
#
#
Auteur: Mathieu Chateau – LOTP
#
mathieu.chateau@lotp.fr
#
Version: 0.1
#
******************************************************************************

#purge de l’écran
Clear

#Objectif du script: stocker plusieurs valeurs pour chaque ligne du tableau

Write-Output « Test 01: fait un sleep de 2s dans un measure-command« 
$temps=Measure-Command { sleep -Seconds 2}
Write-Output « temps d’exécution du test 01: $temps« 
Write-Output « ############« 

Write-Output « Test 02: fait un write-output dans un measure-command« 
$temps=Measure-Command {Write-Output « ce message est supprimé par measure-command, vous ne le verrez pas« }
Write-Output « le message n’est pas apparu mais la commande est exécutée quand même« 
Write-Output « temps d’exécution du test 02: $temps« 
Write-Output « ############« 

Write-Output « Test 03: fait un write-host dans un measure-command« 
$temps=Measure-Command {Write-host « ce message est envoyé à la console, vous le voyez même dans un measure-command« }
Write-Output « temps d’exécution du test 03: $temps« 

Powershell : tableau multidimensionnel (array de array)

J’ai dû récemment stocker des valeurs dans des tableaux (array) multidimensionnel en PowerShell. J’ai quelques peu galéré, et je me suis dit que je ne devais pas être le seul. Mes recherches d’infos via Google ne ramenaient pas grand chose, il est donc temps d’y remédier… 🙂

L’objectif est de stocker plusieurs ensembles de valeurs dans un tableau, afin de pouvoir les appeler dans une boucle for.

Ce qui m’a induit en erreur: Si on ne met pas une virgule au départ, cela ne fonctionne pas….Sauf si on met plus d’un élément lors de l’initialisation du tableau de tableau…Tout se complique quand on change et ne met plus qu’un seul élément… Patatras!

Voici un script qui explicite les différents cas, le dernier étant celui qu’il faut utiliser:

Egalement en téléchargement ici: lotp_test_array_of_array

#******************************************************************************
#
# Titre: lotp_test_array_of_array.ps1
#
# Description: test sur des array
#
# Prérequis: désactiver la signature des scripts PowerShell: Set-ExecutionPolicy remotesigned
#
# Auteur: Mathieu Chateau – LOTP
# mathieu.chateau@lotp.fr
# Version: 0.1
#******************************************************************************

#purge de l’écran
Clear

#Objectif du script: stocker plusieurs valeurs pour chaque ligne du tableau
Function afficherTableau($array)
{

for ($i=0;$i -lt $array.Length;$i++)
{
Write-Output « boucle N°: $i »
Write-Output $array[$i][0]
Write-Output $array[$i][1]
Write-Output $array[$i][2]
Write-Output « ——–« 
}

}

#Ce tableau ne fonctionne pas du tout comme prévu (il manque la virgule au début pour cela)
$tableauMauvais=(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »)
Write-Output « Affichage mauvais tableau »
afficherTableau $tableauMauvais

#Ce tableau fonctionne mais la construction n’est pas correcte (pas de virgule au début, mais ok car 2 éléments)
$tableauPasCorrect=(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »),(« Microsoft »,« Réseau »,« Sécurité »)
Write-Output « Affichage tableau qui fonctionne mais mal construit »
afficherTableau $tableauPasCorrect

#Tableau multidimensionnel construit correctement
#creation du tableau avec un seul élément (virgule avant la parenthèse)
$tableauCorrect=,(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »)
#Ajout d’un élément
$tableauCorrect+=,(« Microsoft »,« Réseau »,« Sécurité »)
Write-Output « Affichage tableau qui fonctionne et bien construit »
afficherTableau $tableauCorrect

Pour la coloration syntaxique dans le blog, j’ai utilisé le script PowerShell proposé ici:
http://helgeklein.com/blog/2010/01/syntax-highlighting-powershell-code-in-html-with-a-powershell-script/

Prise en main du Google Nexus S / android 2.3

La poste ayant fait son travail, me voici l’heureux possesseur du dernier de Google, le Nexus S. J’utilisais depuis 9 mois le premier de la firme, le Nexus One.

J’ai été saisi tout de suite par la fluidité de l’écran et la vitesse entre les écrans du wizard de démarrage. La mise à jour vers Android 2.3 n’étant pas encore sortie pour le Nexus One, je ne sais pas dire si cela vient essentiellement du matériel ou de l’OS, mais j’imagine des deux réunis.

La première chose demandée est bien sûr un compte Google. Comme pour le précédent, le téléphone n’a pas les paramètre correctes pour la 3G, il faut donc avoir un accès Wifi a porté!

Voici les paramètres à positionner dans les réglages:

nom: orange FR
apn: orange
proxy: aucun
port: aucun
user: orange
pass: orange
serveur: na
proxy mms: 192.168.10.200
mms: 8080
mcc: 208
mnc: 01
authen: aucun
type apn: default
Le Nexus S télécharge et installe les applications présentent sur l’autre téléphone, ce qui est très agréable 🙂
Le changement du bouton d’alimentation du haut vers le côté droit est perturbant au départ, mais comme avec tout changement, on s’y fait.
La face est totalement lisse, exit la trackball. Même les 4 « boutons tactiles » du bas sont rétro éclairés, la façade étant donc tout noir quand l’écran est éteint. Il n’y a également plus de led indiquant si le chargement du téléphone est en cours.
Je m’étais habitué à utiliser le trackball, notamment pour cliquer sur des liens étroit sur les pages web. La qualité du nouvel écran rend cependant inutile ce workaround.
Les sonneries ont changées, pas en mieux, mais cela n’engage que moi.
L’aspect semble plus « plastique » et moins massif, mais je trouve cela tout aussi bien. Suite à quelques chutes et avec le temps, la peinture commençait à partir en bas du Nexus One.
La batterie dure à priori plus longtemps, ce qui est normal (matériel neuf + 100mAH + nouvel OS).
Les 16Go intégrés de base sont un réel plus pour moi. Le montage et démontage pour l’accès depuis le PC va vraiment plus vite. Il n’y a en revanche plus d’emplacement pour carte d’extension.
Les traces de doigts sont beaucoup moins présentes, ce qui améliore la sécurité quand on utilise le dessin comme mot de passe.
Le son est meilleur que le Nexus One, mais je ne l’ai pas encore suffisamment utilisé pour quantifier l’amélioration.
Toutes mes applications fonctionnent sauf Navigon, qui crash au lancement :'(
Je ne comprends pas, comment est-ce que Google ne gère pas mieux les comptes Google Apps, même avec la nouvelle version de l’OS.
En rédigeant cet article, je suis tombé sur l’extension Chrome to Phone.  Devinez quoi ? Un message subliminal en bas indique que ça ne fonctionne pas avec un compte Google Apps…Damned!
En résumé:
Les plus par rapport au Nexus One:
  • Ecran plus grand
  • Fluidité et rapidité
  • Un coup de « polish » sur l’interface
  • Caméra avant et arrière, les 2 à 5M pixels
  • 16Go de stockage
  • Boot + vite
Les moins biens:
  • Les sonneries sont moins sympas
  • Le bouton power sur le côté droit est perturbant
  • Les comptes Google Apps sont toujours laissés de côté
Bref, je kiffe grave… 🙂
WordPress Appliance - Powered by TurnKey Linux