mardi 7 avril 2009

Les manipulateurs et la communication - Savoir bien communiquer

En pleine lecture d'un livre sur les manipulateurs relationnels, un chapitre entier est consacré à la communication avec le manipulateur.
Il ressort de ce chapitre que les manipulateurs utilise systématiquement des procédés de communication floue, évasif et peu clair! (propos que je confirme).

La communication efficace

Avant d'entamer un petit exposé sur la communication avec un manipulateur, il convient considérer les propriétés d'une communication efficace et optimale.
Voici, ci-dessous, un extrait pertinent du livre "les manipulateurs sont parmis nous".
 

<<
La seule manière de bien communiquer pour chacun d'entre nous est de clarifier notre message pour que l'effet ressenti chez notre interlocuteur soit égal à l'intention émise. Etre clair, c'est être clair d'emblée. Une personne s'exprimant de manière claire n'appelle pas de questions complémentaire. Etre clair, c'est dire où, qui, quoi, quand, combien, comment; et éventuellement  le pourquoi de la demande, de l'explication ou de la consigne. Toutes les informations nécessaires doivent être soumises d'emblée pour qu'il n'existe aucun quiproquo, aucune mauvaise interprétation possible.
>>
Citation: Les manipulateurs sont parmi nous, Isabelle Nazare-Aga, pg 99, Etd de l'homme.ISBN: 978-2-7619-1971-5

La communication avec le manipulateur
Les propriétés d'une communication efficace font généralement défauts aux échanges avec un manipulateur.

En conséquence, lors d'échanges avec un manipulateur, il est généralement difficile de savoir ce qu'il veut.
Si ce dernier vous en laisse le temps, vous êtes généralement amené à demander des clarifications (dont les réponses seront tout aussi confuses).
Il n'est pas rare qu'une demande volontairement imprécise se dissimule dans un long discours dont il est difficile de percevoir les tenants et les aboutissants.
En exposant habilement ses tracas et ses difficultés (souvent exagérés), le manipulateur arrive même a suggérer des intentions d'actions (ou de prises de position) chez son interlocuteur.
Ainsi, l'interlocuteur peut être amené à faire des suggestions précises (suggestions attendues par le manipulateur), qui seront par la suite utilisées par le manipulateur auprès d'un tiers.
Dans tous les cas de figures possibles, le manipulateur ne sera "jamais" responsable.
Il n'est d'ailleurs pas rare que le l'interlocuteur se fasse, de lui même, le porte parole du manipulaeur (chose également attendue par la manipulation).
Croyez-moi, ce sont des pièges difficile à déceller tellement ils sont habiles.

Ce côté évasif employé par le manipulateur dans ses communications lui permet:
  1. D'obtenir votre accord avant que vous ne connaissiez les détails embarrassants (une fois le "oui" obtenu, il est généralement difficile de se rétracter). 
  2. De se défiler/protéger dans le cas où un problème surviendrait (avec la phrase type "je n'ai jamais voulu dire cela"... laissant croire à une mauvaise interprétation de votre part).
  3. De tirer la couverture à lui lorsque les résultats sont excellents (parce que bien entendu, dans ce cas, il l'aura au minimum suggéré... c'est SON idée)
  4. D'attendre de vous de vous jeter dans ses pièges en faisant des suppositions erronées sur ses propos ambigus.
    Ces prétendues suppositions erronées de votre part restent cependant avantageuses pour lui.
    Et lorsque
    les choses tournerons mal, Cela ne sera pas sa faute puique ce n'est pas ce qu'il "vous" aura dit!.
  5. Attendre de vous que vous fassiez une démarche vous impliquant personnellement dans une de ses actions. Il cherche à induire chez vous une proposition, une suggestion, une idée, etc.
    Il pourra par la suite l'utiliser contre vous (si vous êtes dans la ligne de mire) ou bien vous utiliser pour atteindre son but auprès d'un tiers.
    Dans le pire des cas, vous proposerez vous même de l'aider pour "en toucher vous même un mot" directement à la personne concernée par ses inquiétudes (alors que le manipulateur pourrait très bien le faire lui-même).
    Dans ce cas, vous risquer même de devenir son porte parole/intermédiaire.
    Les manipulateurs adorent faire porter leurs messages par autrui. Gare à vous si vous tombez dans le panneau... la faute vous incombera s'il est mis à découvert ou si cela génère un trouble (souvent voulu par ailleur)... car bien entendu, ce n'était pas ce qu'il voulait dire!

  6. Intrigué par le mystère.
    Rester évasif permet de taquiner la curiosité ou la suspicion de son interlocuteur.
    Cela a généralement beaucoup d'effet par la nature même de l'espèce humaine.
    Les résultats sont généralement concluant lorsqu'il cherche à semer la zizanie (diviser pour assoir son pouvoir, rester le personnage centrale).
    Cela permet également au manipulateur d'être une personne "incontournable" (les manipulateurs sont égocentrique).
    Il prétend "savoir", dit "qu'il sait" mais ne "révèle pas" (excepté juste assez pour mettre l'eau à la bouche).
    Par exemple, un manipulateur ne dira pas "Ton mari te trompe!" (que cela soit vrai ou pas) mais "C'est bizarre, ton mari est devenu bien coquet ces derniers temps!"
Il est assez commun que ces méthodes de communication débouchent sur une dépréciation de la "confiance en soi" chez l'interlocuteur.
En effet, après de nombreuses erreurs (insinuée comme étant "de votre faute") et face à l'assurance surprenante du manipulateur, on en vient tout naturellement à se remettre en question... à se poser des questions fondamentales sur soi-même.
C'est qu'a force de passer pour un "mauvais", on fini vraiment par croire que l'on est "mauvais".
Le manipulateur apparaissant inévitablement comme la victime (il excelle à ce jeu), l'interlocuteur en vient inévitablement à douter de lui.

N'en toucher surtout pas un mot à votre manipulateur... sinon il foncera dans la brèche ouverte et vous écrasera.
C'est que pour vous être "supérieur", le manipulteur à besoin de vous "écraser/diminuer".

lundi 6 avril 2009

Firebug - Debugger pour Firefox

FireBug est un debuggeur JavaScript excessivement riche.
Par ailleurs, ce n'est pas la première fois que j'en entends parler.
Cette fois ci, je peux même relayer un slide provenant d'OpenJS.


Son seul désavantage est d'être un peu lourd et donc de ralentir FireFox.
Pour plus d'information, voir la page d'accueil de FireBug, les nombreuses fonctionnalités y sont décrites.
Pour installer FireBug sur FireFox 3.0.

Source:  cet article sur OpenJS.

samedi 4 avril 2009

Mono 2.4 et Mono Develop 2.0

La nouvelle mouture du compilateur Mono 2.4 est finalement disponible.
L'une des principales avancées de Mono 2.0 est le support de C# 3.

La sortie de Mono 2.4 s'accompagne également de la sortie de MonoDevelop 2.0.
Comme déjà précisé dans d'autres articles, MonoDevelop a été profondément modifié.
Parmis ses avancées, il faudra retenir:
  • Le support de C# 3
  • L'intelliSense et code completion.
  • Un nouvel éditeur XML.
  • un débuggeur (enfin).
Plus d'informations:

vendredi 3 avril 2009

Fluent Interface - Xml Builder

Juste queqlue petits mots pour relater une méthode de programmation à mon sens bien utile.
Cette méthode s'appelle Fluent Interface programming.

En gros, le but est de créer une interface de manipulation IConfigurationFluent dont chacune des fonctions retourne une référence vers cette interface.
Il est ainsi possible d'appliquer, à la chaine, des appels aux méthodes. Cela s'avère bien pratique lorsque l'on manipule des informations.

Voici, ci-dessous, deux exemples en C# (un avec une interface Fluent, l'autre sans). Il n'est pas bien difficile d'évaluer l'élégance de programmation de l'interface Fluent.
public static void Main(string[] args)
        {
            //Exemple standard - Sans interface Fluent 
            IConfiguration config = new Configuration();
            config.SetColor("blue");
            config.SetHeight(1);
            config.SetLength(2);
            config.SetDepth(3);

            //Exemple Utilisant l'interface Fluent
            IConfigurationFluent config = 
                  new ConfigurationFluent().SetColor("blue")
                                           .SetHeight(1)
                                           .SetLength(2)
                                           .SetDepth(3);
        }

En autre, l'auteur de ce billet (qui n'est autre que Primoz Gabrijelcic, le  créateur de GpSynch) a utilisé cette méthode de programmation pour créer un objet Xml Builder.
Ainsi construite sur l'interface IGpFluentXmlBuilder, la classe de Primoz permet de créer un document XML aussi facilement que ça:
xmlWsdl := CreateFluentXml
    .AddProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"')
    .AddChild('definitions')
      ['xmlns',           'http://schemas.xmlsoap.org/wsdl/']
      ['xmlns:xs',        'http://www.w3.org/2001/XMLSchema']
      ['xmlns:soap',      'http://schemas.xmlsoap.org/wsdl/soap/']
      ['xmlns:soapenc',   'http://schemas.xmlsoap.org/soap/encoding/']
      ['xmlns:mime',      'http://schemas.xmlsoap.org/wsdl/mime/']
      ['name',            serviceName]
      ['xmlns:ns1',       'urn:' + intfName]
      ['xmlns:fs',        'http://fab-online.com/soap/']
      ['targetNamespace', 'http://fab-online.com/soap/']
      .AddChild('message')['name', 'fs:' + baseName + 'Request'].Anchor(nodeRequest)
      .AddSibling('message')['name', 'fs:' + baseName + 'Response'].Anchor(nodeResponse)
      .AddSibling('portType')['name', baseName]
      .Here
        .AddChild('operation')['name', baseName]
          .AddChild('input')['message', 'fs:' + baseName + 'Request']
          .AddSibling('output')['message', 'fs:' + baseName + 'Response']
      .Back
      .AddSibling('binding')
      .Here
        ['name', bindingName]
        ['type', 'fs:' + intfName]
        .AddChild('soap:binding')
          ['style', 'rpc']
          ['transport', 'http://schemas.xmlsoap.og/soap/http']
          .AddChild('operation')['name', baseName]
            .AddChild('soap:operation')
              ['soapAction', 'urn:' + baseName]
              ['style', 'rpc']
            .AddSibling('input')
              .AddChild('soap:body')
                ['use', 'encoded']
                ['encodingStyle', 'http://schemas.xmlsoap.org/soap/encoding/']
                ['namespace', 'urn:' + intfName + '-' + baseName]
              .Parent
            .AddSibling('output')
            .AddChild('soap:body')
              ['use', 'encoded']
              ['encodingStyle', 'http://schemas.xmlsoap.org/soap/encoding/']
              ['namespace', 'urn:' + intfName + '-' + baseName]
      .Back
      .AddSibling('service')['name', serviceName]
        .AddChild('port')
          ['name', portName]
          ['binding', 'fs:' + bindingName]
          .AddChild('soap:address')['location', serviceLocation];

Pour avoir moi-même écrit des routines de manipulation XML, je trouve cette approche très séduisante.
J'encourage vivement la lecture de son article.

mercredi 1 avril 2009

Afficher du code dans Blogger

Voici une classe CSS permettant d'ajouter assez aisément du code-source dans un article blogger.
Pour cela, il suffit de modifier votre modèle Blogger pour ajouter le style suivant.

pre.escaped {
background-color: #fff5bf; 
display: block;
font-family: Courier New, monospace;
font-size: 100%;
hasLayout: -1;
overflow: auto;
overflow-x: auto;
overflow-y: auto;
padding: 0px 0px 1.33em;
padding-bottom: 1.33em;
white-space: pre;
}

Pour utiliser ce modèle, il suffit de passer en "modifier code Html" et d'insérer le dit code dans un tag "pre" utilisant la classe "escaped".
N'oubliez pas de modifier tous les > et < par &gt; et &lt;.
<pre class="escaped"> ... un peu de code ... </pre>

Les data-types TimeStamp et RowVersion pour Sql Serveur

Définition de TimeStamp
Le type de donnée TimeStamp n'a absolument rien avoir avec le temps (pour stocker des informations relatives à la date et l'heure, utilisez plutôt le type DateTime).
Il s'agit d'un compteur a valeur unique géré par SQL Serveur lui-même.
TimeStamp est un compteur HexaDécimal de 8 bytes et il existe un compteur par DB.

Les champs TimeStamp ne doivent pas être formellement assignés, SQL Serveur s'occupe seul de mettre à jour ce champs lorsqu'un enregistrement est inséré (insert) ou mis-à-jour (update).
Puisque les champs TimeStamp sont automatiquement modifiés lors des updates, ces champs TimeStamp permettent facilement:
  • De suivre les modifications d'un enregistrement.
    Ex: Une signature électronique correspondant à un TimeStamp particulier d'un enregistrement.
  • De distinguer les différentes versions d'un même enregistrement.
    Ex: référencement d'une version particulière de d'un enregistrement dans une table d'audit (stockant toutes les versions du dit enregistrement).
Si SQL server génère la valeur du TimeStamp, cette valeur est assurée d'être unique dans la DB.
Il n'est pas possible d'assigner soi même une valeur arbitraire à ce champ.

Utiliser RowVersion au lieu de TimeStamp
Pour éviter toute ambiguité, il est préférable d'utiliser le type RowVersion.
Ce dernier fonctionne exactement comme TimeStamp (et utilise par ailleurs le même compteur).

Exemple pratique
CREATE TABLE sales2(
  RowID int not null,      
  SALESDATE     DATETIME      NOT NULL,
        RVersion    RowVersion 
);
GO

INSERT INTO SALES2 (RowID,SALESDATE) VALUES (1,'October 10, 2005');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (2,'November 10, 2005 10:01:01');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (3,'December 6, 2005 11:01:01');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (4,'January 5, 2006');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (5,'02/07/2006');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (6,'03/08/2006 14:01:01');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (7,'04/06/2006 15:01:01');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (8,'20060504');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (9,'20060606 17:01:01');
INSERT INTO SALES2 (RowID,SALESDATE) VALUES (10,'20060706 19:01:01');
GO

select * from sales2

update sales2
set SALESDATE = '20090104 01:01:01'
where rowID=5

select * from sales2


Petites informations utiles

1) Il est possible d'obtenir la valeur courante de TimeStamp (et forcément de RowVersion) en utilisant la requête SQL suivante:
select @@dbts as 'TimeStamp current value';

2) Il est possible de stocker une copie d'un TimeStamp/RowVersion (ex: pour les tables d'audit). Dans ce cas, veillez à utiliser le data type BigInt (utilisant également 8 bytes pour stocker ses valueurs).


Référence: The "TimeStamps and MS SQL Server" article

Papier Musique à imprimé

Je viens de trouver deux sites permettant d'imprimer directement du papier musique.