Virus et clé USB (suite) – Une Bonne solution

Dans un précédent billet d’il y a quelques mois, j’évoquais quelques pistes pour éviter la propagation des virus par clé USB. J’ai un peu progressé sur la question, car depuis j’ai moi même été confronté au problème. Et voici les deux enseignements que j’en ai tiré:

  1. Une fois que l’ordinateur est infecté, si par malheur son antivirus n’est pas fonctionnel, il reste possible d’amener un antivirus portable par… clé usb! Se référer à ce sujet à l’excellent dossier de comment ça marche point net. J’ai juste testé Docteur Web, qui s’est montré réellement efficace.
  2. Pour palier à une infection, ce que l’on peut faire, c’est vacciner la clé en y plaçant un fichier autorun.inf qui soit ineffaçable. J’ai trouvé un petit utilitaire gratuit, usbfix, qui fait la chose merveilleusement: en fait il crée un dossier qui s’appelle autorun.inf, dans lequel il place un fichier vide, puis il va corrompre exprès l’index de ce fichier pour le rendre absolument ineffaçable. Du coup la clé ne peut plus être contaminée, ni aucun des disques dur de l’ordinateur sur lequel la vaccination a été effectuée (elle est un peu radicale). Bon à part ça on peut lui reprocher divers petites choses, voir les critiques des autres utilisateurs sur le site, mais pour l’essentiel, c’est du bon boulot. A noter cependant que Vista et Seven détectent le problème dans l’index des fichiers et proposent de réparer la clé lorsqu’on l’insère. Il faut bien sûr refuser ;) .

Quelques mots sur Ubuntu Netbook Edition

Je me suis récemment acheté un Netbook, l’ASUS EEEPC 1005PE-BLK001M pour être précis, que je vous recommande chaudement (et non je ne touche pas un centime de Darty pour la pub). Ses points forts: une autonomie exceptionnelle, un gros disque dur, 2GO de RAM, une prise éthernet, un écran 16/10, un clavier confortable pour sa taille et du wifi compatible avec la nouvelle norme (n).

J’ai aussitôt installé Ubuntu Netbook Edition en dual-boot avec Windows Seven. Ça m’a causé quelques petits soucis, au niveau de la luminosité de l’écran, j’explique dans la documentation comment s’en tirer (ce n’est pas très difficile et propre à ce modèle de netbook, à ce qu’il semblerait).

Toujours est-il que si vous souhaitez tenter l’aventure, il y a deux solutions:

  • La première, que je vous recommande, c’est d’aller à une install party où des bénévoles vous guideront et vous assisteront. Par exemple pour les gens de région parisienne, il y en a une tous les premiers samedi du mois à la cité des sciences. Pour les autres il y a surement un quelqu’un qui peut vous aider près de chez vous, cf à ce sujet les sites de parrainage comme parrain-linux.com ou encore parrains.linux.free.fr.
  • Autre possibilité, si vous savez parler anglais ne serait-ce qu’un minimum, le site officiel vous expliquera tout. Pour les anglophobes absolus, tournez vous vers la traduction automatique de google. Malheureusement elle ne va pas jusqu’à traduire le contenu des “show me how”.

Voila, en espérant que ces infos en aideront quelques uns ;)

[Avancé] clés GPG et cyptage asymétrique

gpg

Je vais essayer d’être aussi concis que possible, mais je vais devoir faire une brêve introduction à la cryptographie. Pendant des siècles, la cryptographie a été à clé unique. Par exemple si je prend cet article et que je décide de décaler chaque lettre de l’article de 6 lettres dans l’alphabet, j’aurais alors a=f, b=g, c=h et ainsi de suite. Bien sûr le moyen de décodage est totalement symétrique, il suffit de faire l’inverse. Ca vaut pour cet exemple ultra simple, et vaut également pour tout un tas de codes compliqués, comme le code symbolique de Louis XIV ou la machine enigma. A chaque fois on prend un message original, on le triture de manière plus ou moins complexe pour le coder, et celui qui le reçoit doit connaitre le procéder de codage (la clé) et l’inverser.

Mais le défaut énorme de ce type de codage, c’est qu’il faut que l’émetteur et le récepteur se rencontrent au moins une fois pour convenir de la clé. Dans le monde d’aujourd’hui où des gens se parlent d’un bout du monde à l’autre, ce n’est pas trop faisable. Heureusement le cryptage asymétrique a été inventé: au lieu d’une seule clé, il y en a deux, une publique, et une privée. Et là ou c’est très fort, c’est que ce qui est crypté avec la clé publique ne peut être décrypté que par celui qui possède la clé privée et vice versa.

L’intéret est énorme: Il suffit que chacun donne sa clé publique dans un catalogue ouvert à tous, et tout le monde pourra lui envoyer des messages cryptés sans l’avoir rencontré au préalable. Et lui, il peut utiliser sa clé privée pour crypter ses messages et les signer. Ca permet de garantir l’authenticité du message. Si marc reçoit un message de paul et qu’il veut être sûr que c’est bien paul qui a envoyé le message, il utilise la clé publique sur le message signé par paul avec sa clé privée, et si quelqu’un a essayé de se faire passer pour paul il sera tout de suite repéré puisqu’il ne connait pas la clé privée de paul et n’a donc pas pu signer le message.

Bien sûr tout ça est extrêmement simplifié, et vous trouverez sans doute bien plus de détails sur les sites dédiés au cryptage Asymétrique, au chiffre RSA et à GnuGPG. En tout état de cause, voici une application directe: Une clé gpg est la clé publique d’un éditeur de logiciel. Celui-ci utilise sa clé privée pour signer ses logiciels, et nous pouvons utiliser la clé publique pour vérifier que les logiciels que nous trouvons sur internet viennent bien de lui et pas d’un quelconque pirate qui aurait bidouillé le logiciel pour y introduire un malware.

Ce procédé est très connu dans le monde de Linux, et en particulier dans les distributions issues de Debian, il est utilisé pour garantir l’authenticité des paquets non issus des dépots officiels.

Songbird : le logiciel idéal pour écouter les WebRadios

songbird600

Je ne sais pas si vous appréciez d’écouter des Web Radios, mais moi j’aime beaucoup. Ce qui passe sur la FM n’est pas inintéressant, mais je trouve que c’est trop commercial et formaté, avec un quart d’heure de pub toutes les demi heures pour certaines. Et puis on ne trouve pas de tous les genre. Tandis que le Web est bourré de petites Web Radios sympas, avec très peu de pub, et un répertoire de genre bien plus varié et bien moins commercial que ce qu’on trouve sur la FM. Reste à trouver un bon logiciel pour en profiter…

Après quelques essais, j’ai été séduit par Songbird. Ce logiciel a plus d’un tour dans son sac. D’abord il est gratuit et open-source. Il a des liens de parenté avec Mozilla, il est multi plateforme, idéal pour ceux qui jonglent entre Windows et Linux, et puis il a une interface conviviale, un classement des web radios par genre, un plugin qui affiche un résumé sur la vie de l’artiste dont le morceau est joué, et en plus il bouffe très peu de CPU, ce qui est idéal, c’est pas tous les média players qui peuvent s’en vanter ;) .

Le site est en anglais, mais rassurez vous, vous pouvez l’obtenir en français (cf la capture d’écran ci dessus, vous pouvez cliques dessur pour la voir en taille normale ;) ). Bonne écoute :) .

Quelques liens utiles pour programmer sereinement en java

Jusqu’à présent, je vous ai présenté le java à ma façon, parce que je trouve que la manière dont mes collègues le présentent n’est jamais suffisamment pédagogique. Il faut toujours commencer par les bases, sauf que celles-ci sont toujours tellement évidentes pour le professionnel, qu’en général il en zappe une partie. N’étant dans le java que depuis un an et demi, je me souviens encore très bien de mes débuts, et de mes difficultés d’alors. Cependant il est inutile de réinventer la roue en vous exposant l’intégralité des finesses de ce vaste sujet, ce qui prendrait un temps considérable, et serait totalement inutile puisqu’il existe d’excellents tutoriels sur la toile.

Dans le cadre de mon travail, je suis un intégrateur, c’est à dire que je reprend des bouts de logiciels qui existent déjà, et j’ajoute un ciment qui me permet de les liers entre eux dans un but novateur d’interaction entre tous ces bouts de logiciels. Entre 80% et 90% du code que je manipule existe déjà! C’est le principe de base de la programmation moderne. On reprend ce qui a déjà été fait, on ajoute juste ce qui manque. Et bien je me propose de faire de même dans le cadre de ces tutoriels. Je vais donc vous inviter à puiser abondamment dans des sites comme ceux qui suivent:

Qui sont des références absolues du petit programmeur, même s’il y a de nombreuses autres sources d’informations sympathiques à trouver sur le web ;) .

Tant que nous y sommes, voici un certain nombre de sites dont vous aurez rapidement besoin pour vous faciliter la programmation:

  • javadoc online vous renseignera très utilement sur toutes les classes existantes et leur usage.
  • findjar.com vous aidera à retrouver les librairies qui vous manquent, ce qui provoque ces agaçantes erreurs de “ClassNotFoundException”.
  • java examples contient des centaines de petits bouts de code qui illustrent telle ou telle fonctionnalité de java, une vraie mine d’or pour comprendre comment marchent les choses :) .

Il y a aussi java source.net, mais a priori, vous n’en aurez pas besoin tout de suite ;) . Voila pour les liens utiles. Alors bouquinez bien, potassez bien, et à bientôt pour quelques éclaircissements sur certains points chauds :D .

Compiler et exécuter un fichier java.

vaisseau_java_2-compil

En complément à mon article précédent, voici comment faire pour compiler et tester mon exemple:

  • D’abord, récupérez le code source sur mon pastebin.
  • Ensuite, vous allez avoir besoin d’un outil de compilation. Sous Ubuntu, faites un petit
    sudo apt-get install gcj” pour l’installer (sachant que si vous travaillez depuis un ordinateur de votre école ou université, le paquet est probablement déjà installé, et vous pouvez sauter cette étape.
  • Ensuite, la procédure est simple: “javac monfichier.java” pour compiler (avec le ‘c’ de compilateur à la fin).
  • java monfichier arguments” pour  lancer l’exécution (sans le ‘c’ cette fois ci, sans le “.java”, et les arguments, c’est en option, ça correspond au “String [] args”, l’argument de la fonction main qui est appelée pour lancer le programme).

Dans notre cas, procéder comme sur l’illustration de ce billet, je pense que c’est assez explicite ;) .

Introduction à la programmation Objet (2)

vaisseau_java_2

Dans mon exemple d’hier, je vous donnais les clés de la compréhension des fondamentaux de l’orienté objet. Nous gagnons aujourd’hui un petit peu en complexité. Cette classe est la même que celle d’hier, mais enrichie par l’arrivée de différentes nouveautés.

  • Comme vous pouvez le remarquer, il est possible d’initialiser les attributs de la classe à l’extérieur du constructeur. C’est une facilité qui permet d’apporter de la clarté dans le code, car comme ça seuls les champs qui doivent varier sont initialisés dans le constructeur.
  • Vous remarquez également que nous avons ici deux constructeurs, la chose est rendue possible par le fait que les deux ne prennent pas le même nombre ni le même type de paramètres. Ce n’est d’ailleurs pas réservé aux constructeurs, c’est le cas de n’importe quelle fonction. Par exemple vous pouvez avoir une fonction chargerPreferences(String nomFichier) et une fonction chargerPreferences(FileReader fichier), étant entendu que la première va ouvrir le fichier spécifié puis faire appel à l’autre. Et dans le cas présent, vous remarquerez qu’effectivement le constructeur qui prend le plus de paramètres fait appel au constructeur simple par le biais du mot clé “this”. Ce mot clé permet soit de désigner le constructeur de la classe s’il est utilisé comme fonction, soit de désigner une instance de la classe. Bien sûr il n’est pas obligatoire de lier les constructeurs, on aurait pu recopier le premier dans le deuxième, et éviter le renvoi. Mais en règle général en programmation, on évite de dupliquer le code tout simplement parce que s’il y a une modification à faire, on aime bien n’avoir à la faire qu’une seule fois.
  • Vous remarquerez enfin l’apparition du mot clé “static”. Ce mot clé permet de désigner une fonction ou un paramètre comme indépendant d’un objet particulier, mais au contraire commun à tous les objets de la classe. C’est un peu l’analogue d’une variable globale. Vous pouvez créer 100 vaisseaux, tous de nom, de couleur et de nombre de canons différents, mais si vous modifiez la variable nombre de vaisseaux, tous seront affectés, parce que c’est une variable dite “de classe et non d’instance”, c’est à dire qu’elle ne s’applique pas à un objet particulier de la classe, mais à l’ensemble de ces objets.
  • et puis il y a la fonction public static void main(String args). Comme vous le remarquerez, cette fonction est “static”, donc ne s’applique pas à un objet particulier mais à l’ensemble de la classe. En particulier, par convention, ce nom et cette signature de fonction désignent le bout de code qui doit être appelé pour lancer le programme.
  • Que dire d’autre, System.out.println() est une fonction qui permet d’afficher la chaine de caractères spécifiée à l’écran. On peut concaténer deux chaines de caractères avec des ‘+’. Il est également possible de concaténer des entiers avec une chaine de caractères, et comme vous le voyez, si jamais ça sort de l’écran, on peut étaler sur plusieurs ligne, le programme s’en fout du moment qu’il y a bien le point virgule à la fin de l’instruction ;) .

Je sens que vous êtes légèrement perdus, donc je vais faire un bref rappel sur les variables:

  • On appelle variable d’instance un attribut qui décrit une caractéristique d’un objet de la classe. Chaque objet de la classe possède cet attribut (couleur, nombre de canons, nom…) mais il peut être différent en fonction de l’objet. On y accède en utilisant le nom de la variable suivit d’un point et du nom de l’attribut, par exemple vaisseau1.couleur pour obtenir la couleur du vaissau1 ou encore vaisseau2.nombre_de_canons pour obtenir le nombre de canons du vaisseau2.
  • On appelle méthode d’instance une méthode (fonction) qui peut s’appliquer à une instance (un objet) particulier de la classe, exemple accelerer(), que  l’on applique à un objet particulier, par exemple vaisseau1.accelerer() pour faire bouger le vaisseau1.
  • On appelle variable de classe une variable qui ne dépend pas d’un objet de la classe, mais qui est commun à tous les objets. Ces variables sont repérées par le mot clé “static”. Exemple, nombre_vaisseaux est une variable de classe. Si on la modifie, elle change pour tous les objets. On peut y accéder par le nom de la classe suivit d’un point et du nom de la variable, par exemple VaisseauSpatial.nombre_vaisseaux permettrait d’y accéder depuis une autre classe,
  • de même qu’une autre classe pourrait lancer la méthode main par l’instruction VaisseauSpatial.main(args); En effet la méthode main elle non plus ne s’applique pas à un objet particulier, mais comme toutes les méthodes statiques, elle s’applique à manipuler des objets de la classe.

J’espère avoir été suffisamment compréhensible. Ce que je raconte est un peu dur à suivre, parce que malgrès tout je suis obligé d’introduire peu à peu le vocabulaire de base du programmeur java. Enfin vous avez l’exemple du code source pour comprendre, et en extrapolant un peu par rapport aux autres langages vous devriez avoir les outils pour piger le truc. Je précise que j’ai utilisé le logiciel très connu Eclipse pour programmer ma classe. Ceci dit vous n’en avez absolument pas besoin pour débuter. N’importe quel éditeur de texte basique comme Notepad++ sous Windows, et Gedit sous Linux vous permettrons d’avoir le minimum de coloration syntaxique sans avoir besoin de passer par des choses plus compliquées. Disons que c’est pour moi une habitude et un outil de travail. Je consacrerai sans doute prochainement un article aux environnements de développement.

Pour finir, voici ce que l’on vois lorsqu’on lance ce programme:

vaisseau_java_2-exe

Comme vous le voyez, le main a été appelé, il a déclaré deux vaiseaux qui ont été construits d’après ses spécifications, et il leur a appliqué quelques méthodes d’instance. La variable nombre_vaisseaux a bien été incrémentée deux fois, autant de fois que des vaisseaux ont été construits (elle n’a été initialisée q’une seule fois lors du premier appel de la classe).

Introduction à la programmation Objet

Je me rappelle encore de mon premier cours sur le java. Le prof a expliqué en un quart d’heure ce qu’était une classe, et ce qu’était une instance, et a passé l’heure suivante à employer à tout bout de champ des expressions comme “variable de classe”, “variable d’instance”, méthode et constructeur, de sorte que tout le monde s’est retrouvé instantanément largué, parce que le temps de se rappeler de ce qu’est un constructeur, le prof était déjà passé à autre chose. On va essayer d’être un peu plus simples.

Le principe de la programmation objet, c’est que dans tout programme, on manipule des objets. Par exemple un jeu de simulation de combat spatial contiendra des vaisseaux, des canons, des projectiles, un espace 3D, etc, tous ces objets interagissant entre eux. Le principe de la programmation objet, c’est de rassembler dans un même bout de programme (la classe) tout ce qui se rapporte à un objet particulier, à savoir: ses caractéristiques (les attributs), par exemple la couleur du vaisseau, son nombre de canons ou sa vitesse, et les actions qu’on peut effectuer avec cet objet (les méthodes), par exemple accélérer, ralentir, etc. On y ajoute aussi un bout de code qui explique comment faire pour créer un nouvel objet. Voici un exemple qui illustre mon explication:

vaisseau_java

Ce qu’il faut retenir, c’est que cette classe décrit comment tous les objets de type VaisseauSpatial seront. Mais il peut y en avoir plusieurs. Chaque fois que l’on va vouloir créer un nouveau vaisseau, on va appeler la fonction/méthode qui porte le même nom que la classe: c’est le constructeur. L’appel de cette fonction réserve la place en mémoire pour stocker un nouveau vaisseau spatial, initialisé comme le dit le constructeur. Par exemple, dans un autre programme, on pourra trouver la séquence suivante:

VaisseauSpatial vaisseau1 = new VaisseauSpatial();
VaisseauSpatial vaisseau2 = new VaisseauSpatial();
vaisseau1.couleur = “jaune”
vaisseau2.accelerer();

Qu’est-ce qui se produit exactement? Eh bien deux objets décrits par la classe précédentes et stockés dans les variables vaisseau1 et vaisseau2 sont créés. La couleur du vaisseau1 ne nous plait pas, donc on la change, et on demande au vaisseau2 d’accélérer un peu. Vous remarquerez la manière dont on s’y prend pour accéder à tout ce qui se rapporte à un objet: on met le nom de la variable, un “.”, et le nom du paramètre (attribut) ou de la fonction (la méthode) qu’on veut appeler sur cet objet.

Je n’en dirai pas plus pour aujourd’hui, nous avons vu l’illustration de base du concept, il restera encore à voir comment l’utiliser, c’est un chouia plus complexe, mais pas tant que ça.

Explorez, débuggez, et améliorez votre compréhension des pages Web avec Firebug

firebug

Maintenant que nous avons commencé à nous intéresser au contenu des pages Web, il est temps de vous présenter cette petite merveille qu’est l’extension Firebug de Firefox. Elle a plusieurs fonctionnalités intéressantes.

  • D’abord elle permet de savoir instantanément quelle section du code correspond à quelle partie de la page, car en passant le curseur sur telle out telle section du code, le morceau correspondant de la page web est bleuté.
  • Ensuite elle organise le code de façon agréable et intuitive par section que l’on peut développer ou réduire en cliquant sur la croix correspondante si le besoin s’en fait sentir.
  • Par ailleurs pour chaque section du code html, il est possible d’observer le code de présentation CSS qui lui est associé.
  • Enfin elle permet d’éditer la page Web à sa sauce et d’observer instantanément le résultat. A noter que dans ce cas là, les changements ne sont pas enregistrés et que dés que l’on rafraichira la page elle retrouvera sa présentation d’origine.
  • Et plein d’autres fonctionnalités utiles que je ne détaillerai pas plus avant car elle correspondent à un usage plus avancé..

Changez la présentation des sites Web que vous visitez

google_dark_blue

Je ne sais pas si ça vous est déjà arrivé en allant sur un site internet de vous dire quelque chose comme “Sympa ce site! Mais quel dommage que sa présentation soit si moche!“. Sachez alors que vous avez une autre alternative que de choisir entre supporter le visuel désagréable du site et ne plus aller dessus. En effet, il existe une petite extension de Firefox qui s’appelle Stylish, et qui va vous permettre de remplacer la feuille de style CSS fournie par le site Web par une feuille de style plus à votre gout.

Pour ce faire, vous avez plusieurs possibilités:

  1. Regarder sur userstyles.org si quelqu’un n’a pas déjà développé une feuille de style plus sympathique pour le site Web en question, pour cela repérez l’icone de Stylish en bas à droite du navigateur (elle ressemble à une feuille blanche avec un pinceau) et son nom apparait lorsque vous passez la souris dessus. Cliquez alors dessus, puis cliquez sur “Trouver des styles pour cette page“. Un fois que vous avez trouvé votre bonheur, il doit y avoir quelque part sur la page un bouton “load in Stylish” qui vous permettra de profiter du script :) .
  2. Demander sur le forum de userstyles.org si quelqu’un n’aurait pas la gentillesse de bien vouloir vous en créer une (par contre il faut savoir parler anglais),
  3. Apprendre un minimum de langage CSS, ce qui n’est pas dur du tout, pour refaire le design du site en question à votre sauce, en vous aidant des conseils disponibles sur le forum. Vous pouvez à ce sujet consulter mon billet Si vous souhaitez réaliser votre propre feuille de style CSS ;) .

Par exemple pour des gens qui comme moi vont souvent sur internet la nuit, les pages Web écrites comme dans les livres en noir sur blanc, ça pique un peu les yeux à la longue. C’est pourquoi, nous avons tendance à rechercher des choses écrites plutot en couleur claire sur fond foncé, qui fatiguent bien moins les yeux. Je reviendrai dans un article ultérieur sur toutes les manières de transformer l’affichage de son ordinateur dans ce but, mais vous avez déjà un aperçu dans l’illustration de ce billet de l’un des résultats de cette démarche avec l’aide du script Stylish Google Web Search – dark blue redesign.

Suivre

Get every new post delivered to your Inbox.