PROJET AUTOBLOG


HowTommy

source: HowTommy

⇐ retour index

Copie complète d'un objet en C#

jeudi 31 octobre 2013 à 10:30
Clavier

En C#, il peut nous arriver d'avoir à copier complètement un objet, et non pas juste la référence à cet objet. Si c'est assez simple dans de nombreux cas (utiliser .Clone() sur chacun de ses attributs), ça peut devenir galère si notre objet contient plusieurs sous-objets, ou si notre objet a énormément de propriétés.

Il existe, heureusement, une solution très simple : utiliser la sérialisation binaire pour cloner notre objet.

public static T DeepClone<T>(T obj) where T : ISerializable
{
    using (var ms = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(ms, obj);
        ms.Position = 0;

        return (T)formatter.Deserialize(ms);
    }
}

Seule contrainte : notre objet doit-être sérialisable (il suffit pour cela de mettre [Serializable] au dessus de vos classes à cloner). Mais cette simple méthode de quatre lignes nous évitera d'avoir à faire des .Clone sur chacune des propriétés de notre objet !

Et on peut aller encore plus loin, grâce aux méthodes d'extensions :

public static class ExtensionMethods
{
    public static T DeepClone<T>(this T obj) where T : ISerializable
    {
        using (MemoryStream stream = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            stream.Position = 0;
            return (T)formatter.Deserialize(stream);
        }
    }
}

Grâce à ce petit morceau de code, vous pouvez désormais cloner n'importe quel objet sérialisable en utilisant .DeepClone(). Pratique non ?

Bon, inutile de vous rappeler que Cloner vos objets est une mauvaise idée (performances, mémoire, tout ça...). Mais lorsqu'on n'a pas le choix, ce code est vraiment pratique.

Bon dev à tous !

Piratage et soldes

lundi 21 octobre 2013 à 10:00


Il y a quelques jours, le créateur de Breaking Bad déclarait que le piratage de la série avait eu de bons et de mauvais côtés. D'un côté, cela a aidé la série à se faire connaître, mais d'un autre côté ça leur a fait perdre de l'argent.

Autant je suis à 100% d'accord sur le premier point, autant le deuxième est totalement FAUX.

En effet, le piratage joue énormément à faire connaître les bonnes séries. Combien de bonnes séries se sont cassé la gueule lorsque internet n'existait pas ? Un bon paquet ! Ben oui, à l'époque pour suivre une série il fallait forcément être devant sa TV, chaque semaine, à une heure précise...

Internet a totalement changé la donne. La différence, c'est qu'aujourd'hui les bonnes séries ont énormément de succès et les mauvaises séries en ont peu. Mais elles touchent malgré tout bien plus de gens...

"L'inconvénient, c'est que beaucoup de gens qui ont travaillé sur la série auraient pu gagner davantage d'argent [sans le piratage, ndlr], moi compris. Nous avons tous besoin de manger, nous avons tous besoin de gagner notre vie"

Oui, et ? Sans le piratage la série aurait peut être été abandonnée après la saison 1 ou 2 par manque d'intérêt du public...

Quand est-ce qu'ils comprendront que ceux qui piratent sont :

Les deuxièmes ne paieront peut-être pas, mais ils feront peut-être découvrir la série à quelques amis qui, eux, paieront pour cette série.

Se plaindre du piratage "car cela nous fait perdre de l'argent", c'est exactement comme si les magasins se plaignaient des soldes car leur marge est moins élevée.... Alors qu'ils vendent 5 fois plus !
Supprimer les soldes = supprimer l'engouement = moins de ventes !

C'est exactement pareil avec le piratage !
Supprimer ou bloquer le piratage = perte de popularité et de communication sur la série = moins de ventes !

Un pirate n'est qu'un acheteur potentiel. Mais ce ne sera jamais un acheteur définitif.

C'est triste qu'en 2013, ils en soient encore à croire que le piratage leur fait perdre de l'argent...

source
Photo Credit: Kevitivity

Conseils pour les développeurs

vendredi 18 octobre 2013 à 08:00


J’avais vu passer, il y a quelques temps, des articles de conseils pour les développeurs sur certains blogs. Voici ceux que je donnerais à de jeunes développeurs :


Bon dev à tous !

Mieux dormir ? C'est facile !

jeudi 17 octobre 2013 à 15:01


Bonjour à tous !

Je suis tombé sur un article, il y a quelques semaines, qui parlait des choses à faire pour mieux dormir. Je voulais en parler ici car je côtoie énormément de gens qui n'arrivent pas à dormir car... ils s'en empêchent malgré eux !

Voici donc une petite liste des choses à faire pour mieux dormir :


N'oubliez pas : le sommeil c'est ce qui vous donne de l'énergie, ce qui vous permet d'être de bonne humeur, reposé, attentif... Et il n'est pas nécessaire de dormir beaucoup pour être reposé ! Ce qui compte c'est que le sommeil soit de qualité (= plus de sommeil profond que de sommeil léger).

Bonne nuit à tous !

Photo Credit: kevin dooley

Nettoyer un sélecteur jQuery

mercredi 9 octobre 2013 à 13:10
Aujourd'hui j'ai rencontré un léger souci avec jQuery.
J'avais besoin de récupérer un objet HTML dont l'id contenait des crochets [ ], et ceci :

$('#MonInput[3]')

me renvoyait undefined à chaque fois.
En fait les crochets servent à autre chose dans les requêtes jQuery. Il faut donc les échapper avec "\\" pour que notre requête sur l'id marche :

$('#MonInput\\[3\\]')

Sauf qu'échapper à chaque fois les caractères, lorsqu'on en a beaucoup, ce n'est pas forcément pratique. De plus si le sélecteur de notre input est dans une variable, il faut faire des replace...
Le plus simple était donc de faire une méthode pour ça :

function CleanSelector(selector) {
    return selector.replace(/([^a-zA-Z0-9_-])/g, '\\\\$1');
}

Cette méthode va échapper avec "\\" tous les caractères non alphanumériques (+ underscore et tiret) !
Nous n'avons donc plus qu'à appeler notre méthode :

$('#' + CleanSelector(monInputSelector))

Et voilà le travail !
Bonne journée à tous !