Clonage d’objet en .NET (C# ou VB)

23 11 2011

Si vous débarquez en .NET (ou en Java d’ailleurs) et que vous venez d’un bon langage pas casse couille comme PHP ou JavaScript, ça doit vous faire un choc :

Donner un type à ses variables, choisir parmi 36000 structures pour stocker l’information (Array, List, Hasttable, Dictionary, DataTable…), devoir importer des tonnes de trucs pour simplement trier un tableau par ordre décroissant…

Mais le pire, c’est sans doute le passage par référence. En PHP, pour dupliquer une variable (qu’elle soit un simple entier ou un objet très élaboré issu d’une classe que vous avez créé), il suffit d’utiliser = comme pour n’importe quelle affectation :

<?php
$variable_originale = new MaClasse();
$variable_originale->nom = "Variable originale";
$copie = $variable_originale;
$copie->nom = 'Une copie conforme et parfaitement disctince de $variable_originale';

echo $variable_originale->nom; // Variable originale
echo $copie->nom; // Une copie conforme et parfaitement disctince de $variable_originale
?>

Mais en .NET, tout est passé par référence (sauf les types primitifs comme integer, boolean, string… qui eux sont passé par valeur), ça signifie que si vous faites la même chose qu’en PHP ci-dessus, quand vous allez modifier la variable copie, ça va aussi modifie variable_originale. Pourquoi ? Tout simplement parce que copie et variable_originale sont des pointeurs vers la même variable en mémoire, c’est en quelque sorte 2 noms différents pour la même variable.

La solution, pour dupliquer une variable, c’est de créer copie (en appelant le constructeur de MaClasse : copie = new MaClasse()), mais il faut alors recopier un par un la valeur de chaque attribut de variable_originale dans l’attribut de copie homonyme, l’enfer. En général on fait cela en créant une méthode Clone() dans la classe de la variable qu’on veut dupliquer, et en implémentant une interface de clonage comme ICloneable en .NET. C’est au développeur d’implémenter la fonction Clone().

Heureusement, il existe une solution toute bête pour créer une fonction Clone facilement : elle consiste à sérialiser la variable à dupliquer, puis à la desérialiser (ce qui reviendrait à faire un $copie = unserialize(serialize($variable_originale)); en PHP).

Voici donc une fonction permettant de cloner un objet en VB.NET (mais ça marche aussi en C#, il suffit d’adapter la syntaxe) :

Namespace Espace
    <Serializable()> Friend Class AgriVar

        Friend Sub New()
            '[...]
        End Sub

        Public Function Clone()
            Dim memStream As MemoryStream = New MemoryStream()
            Dim bnFormat As BinaryFormatter = New BinaryFormatter(Nothing, New StreamingContext(StreamingContextStates.Clone))
            bnFormat.Serialize(memSteam, Me)
            memStream.Seek(0, SeekOrigin.Begin)
            Return bnFormat.Deserialize(memStream)
        End Function

    End Class
End Namespace

Notez que j’ai écrit <Serializable()> juste devant le nom de ma classe, ne me demandez pas pourquoi, sans ça ça ne marche pas, il se produit une erreur “Le type XXX n’est pas marqué comme sérialisable”.



Mesurer l’intensité du signal wifi sur Mac avec iStumbler

20 11 2011

Si vous utilisez un ordinateur Apple, vous aurez sans doute remarqué que la petite icône Wifi en forme de quart de cercle dans la barre du Finder, à côté de l’heure, affiche un peu n’importe quoi.

Parfois elle affiche entièrement en noir, comme si le signal était d’excellente qualité, puis vous vous déconnectez, et là impossible de se reconnecter, signal trop faible.

Heureusement, il éxiste une petite application très sympathique qui permet justement d’afficher l’intensité des réseaux wifi que vous captez, ça s’appelle iStumbler et ça se télécharge ici.



Headers PHP utiles

11 11 2011

Si vous utilisez le langage PHP, vous êtes sans doute amenés de temps à autre à définir des headers.

Voici donc une petite liste de headers avec parfois la version sans charset (ANSI par défaut), et la version Unicode UTF-8 :

<?php
# Header PHP JSON
header('Content-type: application/json');
header('Content-type: application/json; charset=utf-8');

# Header PHP Texte brut
header('Content-Type: text/plain');
header('Content-Type: text/plain; charset=utf-8');

# Header PHP HTML
header('Content-type: text/html');
header('Content-type: text/html; charset=utf-8');

# Header PHP CSS
header('Content-type: text/css');

# Header PHP Image JPEG
header('Content-Type: image/jpeg');

# Header PHP XML
header('Content-Type: text/xml');
header('Content-Type: text/xml; charset=utf-8');
?>

Enjoy ;)



Microsoft et son piège à maxi con

22 10 2011

Pour promouvoir assurer la propagande autour de son nouveau navigateur IE9, microsoft a créé un site qui note le navigateur que vous utilisez pour y accéder.

Lorsqu’on s’y connecte avec IE9, bien évidement on obtient la note maximale : 4/4, et comme par hasard, quand on utilise un navigateur concurrent comme Mozilla Firefox ou Google Chrome, on a une moins bonne note.

Le plus étonnant, c’est que quand on change le navigateur indiqué dans le User Agent (avec l’extension firefox User Agent Switcher par exemple), pour copier celui d’IE9, alors on obtient la note maximale : 4/4, avec exactement le même navigateur :

Foutage de gueule ou provocation destinée à faire parler de son navigateur, en tout cas on ne manque pas de fair-play à redmond.



Lancé de chat (en javascript)

20 10 2011

T’en as mare de ces abrutis de chats à la con ?

cat bounce

Alors cours vite vers cette page ou tu pourras lancer sauvagement des chats pour les faire rebondir… non mais !

[Cat bounce]



Excel masque le texte trop long avec des dièse ####

18 10 2011

Excel a un comportement assez illogique concernant les cellules de type Texte.

Quand une cellule de format Texte contient un texte de plus de 255 caractères, des dièses (sharp) sont affichés à la place du contenu, obligeant à éditer la cellule pour voir le texte original :

excel sharp

Pour y remédier, la solution est de changer le format de la cellule en Standard.

C’est complétement saugrenu, puisque par définition du texte ça peut être assez long, et la limite de 255 caractère est vite atteinte…



La vie change avec on range

4 10 2011



L’ardoise tactile débarque

25 09 2011

L’iPad c’est pour les lopettes, prosternez vous devant l’ardoise tactile :

Cours l’acheter cours l’acheter !

*L’ardoise tactile n’est pas compatible avec la roue Apple, ndlr.



Couper un WMV sans réencoder

22 09 2011

Il y a quelques jours j’expliquais comment couper un MP3 sans réencoder, maintenant voici comment faire la même chose mais avec une vidéo windows média (.WMV), comme on en trouve encore souvent sur internet.

Microsoft édite un petit utilitaire dédié à cette tâche : Windows Media File Editor, et qui permet justement de définir deux marqueurs début et fin, et de pouvoir ensuite exporter la portion de vidéo entre ces 2 marker sans ré-encoder (donc sans perte de qualité).

Windows Media File Editor

Télécharger sur le site officiel de microsoft :
http://download.microsoft.com/download/8/1/f/81f9402f-efdd-439d-b2a4-089563199d47/WMEncoder.exe



Pacitel : stop spam téléphonique !

20 09 2011

Bonne nouvel pour tout les malheureux dont le numéro de téléphone croupi dans bon nombre de base de données pigeon (prospect) de call center offshore.

Un nouveau site vient de voir le jour, il permet de renseigner jusqu’à 6 numéros de téléphone pour lesquels vous ne voulez plus recevoir de démarchage téléphonique.

Les call center qui adhérent au programme ne vous appelleront que si votre numéro ne figure pas dans la liste d’exclusion de pacitel.

Pour le moment ça n’est pas obligatoire, mais l’association pacitel espère pouvoir faire passer une loi d’ici la fin de l’année pour mettre en place des sanctions financières pour les entreprises qui ne respectent pas la volonté des consommateurs.

Bon, le concept n’est pas vraiment nouveau, la liste rouge et la liste orange existent depuis longtemps, et permettent d’empêcher la diffusion d’un numéro de téléphone dans les pages blanches par exemple, sans compter qu’on peut signaler son opposition au marketing direct sur pagesjaunes.fr (opposer marketing direct).

Sauf que là, ce système concerne également les bases de données privées et payantes que se refilent les entreprises entre elles, les fichiers clients…

Malheureusement il y a déjà des failles dans le système, si vous êtes déjà client d’une entreprise (une société de surgelé par exemple), celle-ci pourra continuer à vous spammer sans être inquiétée, puisque vous êtes déjà client, ça n’est plus du démarchage.

[Site officiel]