Archive for the 'Informatique' Category

Serializing “anything” in C# using extensions

I was recently interested in getting C# objects to serialize into XML so that I could save and load a configuration out of a file. Sadly, C# support for XML and serialization is far from the best stuff I’ve seen in programming. But anyway, here’s what this post is about: using DataContract with a bit of extension magic to get anything to be serializable into XML!

One small problem when you use the Serializable attribute of C# is that you cannot serialize dictionary directly and we all know dictionaries are a VERY useful structure to have serialized. One easy way to have serializable dictionaries is to use the DataContract attribute instead. It implies a bit more code compared to the version where you use the Serializable attribute, but not that much more (mostly the WriteObject and ReadObject lines).

I haven’t coded any of this, so thanks to user Loudenvier from Stackoverflow.com! This solution allows you to turn ANY object into an XML string representation. It also allows you to turn that string back into an object representation. Very useful.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static class SerializationExtensions
{
    public static string Serialize<T>(this T obj)
    {
        var serializer = new DataContractSerializer(obj.GetType());
        using (var writer = new StringWriter())
        using (var stm = new XmlTextWriter(writer))
        {
            serializer.WriteObject(stm, obj);
            return writer.ToString();
        }
    }
    public static T Deserialize<T>(this string serialized)
    {
        var serializer = new DataContractSerializer(typeof(T));
        using (var reader = new StringReader(serialized))
        using (var stm = new XmlTextReader(reader))
        {
            return (T)serializer.ReadObject(stm);
        }
    }
}

How to use example

1
2
3
4
5
6
7
8
9
// dictionary to serialize to string
Dictionary<string, object> myDict = new Dictionary<string, object>();
// add items to the dictionary...
myDict.Add(...);
// serialization is straight-forward
string serialized = myDict.Serialize();
...
// deserialization is just as simple
Dictionary<string, object> myDictCopy = serialized.Deserialize<Dictionary<string,object>>();

Source: http://www.stackoverflow.com

Software developer

A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: “Excuse me, can you tell me where I am?”

The man below says: “Yes you’re in a hot air balloon, hovering 30 feet above this field.”

“You must be a software developer,” says the balloonist.

“I am,” replies the man. “How did you know?”

“Well,” says the balloonist, “everything you have told me is technically correct, but it’s of no use to anyone.”

The man below says, “You must work in business as a manager.” “I do,” replies the balloonist, “but how did you know?”

“Well,” says the man, “you don’t know where you are or where you are going, but you expect me to be able to help. You’re in the same position you were before we met but now it’s my fault.”

Source: Coding Horror

Développement logiciel sur plateforme Linux et Windows

Le domaine informatique a toujours été dominé par trois géants (du côté consommateur) : Linux, Windows et Macintosh. Les trois systèmes étant très différents, cela a toujours causé des complications aux programmeurs qui voulaient rendre leur code accessible à une plus grande population. Ainsi, ils devaient « porter » leurs codes vers une nouvelle plateforme, soit pour passer de Windows à Macintosh ou encore de Linux vers Windows par exemple. Afin de diminuer cette tâche qui se verrait devenir répétitive, ces développeurs ont eut l’idée de regrouper les ensembles de codes similaires afin d’en former des librairies qu’ils pourraient réutiliser pour accélérer le développement d’applications futures.

Avec l’ensemble des librairies qui ont été codés avec le temps (GTK, FTLK, Qt, wxWidgets, OpenGL, SDL, etc.), la majorité des plateformes informatiques ont commencés à devenir de plus en plus uniformes, permettant ainsi de déployer un même code sur plusieurs machines utilisant des systèmes d’opérations différents. On observe de plus la présence d’environnements de développement intégrés (EDI) multi-plateformes tel que Netbeans, Eclipse et Code::Blocks. Toutefois, il reste à déterminer quelle plateforme est la plus apte à permettre un développement qui sera rapide, efficace et de qualité. Afin de débattre de cette question, il est nécessaire d’évaluer certains aspects essentiels à la création d’un logiciel. Un logiciel peut être très facile à programmer mais être de piètre qualité en termes de performance (facilité de développement). Il peut être très long à programmer mais ne rien coûter (coûts reliées au développement). Les outils que les plateformes nous offrent peuvent être flexibles mais nécessiter une grande connaissance de ceux qui les emploient. Pour le développeur qui souhaite vendre son logiciel, il faut aussi connaître les diverses restrictions qui s’appliquent lorsqu’on emploi une librairie. Bref, il s’agit ici d’un ensemble d’aspects que nous aborderons afin de déterminer quelle plateforme entre Windows et Linux convient le mieux à un programmeur.

Pour lire l’ensemble du texte: Télécharger le PDF

Pas de son sur Debian Etch

Modification: Si vous êtes aventurier, vous pouvez installer Debian Lenny (la version suivante de Debian) à partir des repositories actuels et ne pas avoir à vous soucier de ce problème qui devrait être généralement réglé par les drivers intégrés au nouveau noyau (2.6 dans le cas de Lenny alors que Etch utilise encore 2.4).

J’ai récemment eu quelques problèmes à installer mes drivers audio sur Debian Etch (4.0_r3). J’ai finalement trouvé la solution après quelques temps de recherche. La voici :) (Merci a farrell2k du forum debian.net)

Source: http://forums.debian.net/viewtopic.php?t=26835

1. download the latest alsa drivers from the alsa project site

2. su and become root, then do a uname -r to find your kernel version.

3. then apt-get the appropriate linux-headers. Mine was linux-headers-2.16.18-4-486.

4. cd to the extracted alsa source and run ./configure –with-kernel=/usr/src/linux-headers-2.16.18-4-486 (or whatever yours is).

5. run make … wait, then make install and wait.

6. run alsaconf and pick your card.

7. reboot and adjust volume with whatever mixer.

Un peu de lecture

L’été qui commence, j’ai enfin du temps libre pour passer du temps sur le sujet qui me passionne: l’informatique. Prochaine session, je me retrouve en génie logiciel, suite à mon changement d’orientation. La session teminée, je me suis dit pourquoi ne pas se mettre dans le bain? Je suis passé faire un tour à la bibliothèque de mon quartier pour y trouver deux livres qui me semblent de niveau et d’intérêt. Voici donc mes deux premières lectures:

Halte aux hackers linux par Brian Hatch, George Kurtz et James Lee


L’objectif du livre est de conscientiser le lecteur aux différentes manières par lesquels un “hacker” serait en mesure d’accéder à un système, profiter de ses droits pour faire du grabuge ou simplement démolir le système dans son ensemble, ou encore d’insérer quelques lignes de codes dans une applications afin d’en recevoir les informations par email (troyen). C’est un livre qui nécessite des connaissances avancés de Linux, toutefois, la majorité des concepts sera compris des débutants ayant connaissances des bases. Pour le moment, j’en ai lu 3 chapitres dans lesquels on nous introduits premièrement à la sécurité Linux, que ce soit en termes de permissions fichiers, quotas, ports, mémoire virtuelles, cpu, etc. Deuxième chapitre, une bonne introduction sur comment prévenir les attaques et quoi faire après une attaque (restauration). Le troisième chapitre s’attaque au comment un hacker fait pour découvrir le plus d’information à propos d’une machine, tel un voleur qui tourne autour d’une maison qu’il veut cambrioler. Dans le prochain chapitre, le livre abordera le social engineering, qui est selon mon opinion, un sujet très important du hacking puisqu’il n’est pas rare que le hacker découvre plusieurs informations à l’aide de ressources ‘humaines’.

Systèmes d’exploitation, 2e édition par Andrew Tanenbaum


Cette brique me semble digne d’un ingénieur ou d’une personne qui souhaîte en apprendre sur les systèmes d’exploitation. On y passe de la gestions des processus (threads) à la gestion de la mémoire en passant aux systèmes multiprocesseurs. Le livre aborde même vers la fin la création de son propre système d’exploitation. De plus, il passe une partie importante sur deux système important de notre époque soit Unix et Linux et Windows (2000).

Je n’ai pas encore attaqué cette brique mais j’ai bien hâte d’en découvrir plus sur le sujet. Je voudrais vous promettre d’écrire deux messages supplémentaires pour vous en faire les résumés et appréciations après leur lecture respective mais je ne suis pas certain que je leur passerait de travers d’un seul coup.