Main menu:

Site search

Categories

mars 2025
L M M J V S D
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archive

Support de WebGL dans Firefox4

Firefox4 est sorti officiellement il y a quelques jours et vous auriez bien voulu profiter du support de l’html5 et de WebGL dans votre Ubuntu 10.10. Or lorsque vous essayez de vous connecter sur un site utilisant cette nouvelle technologie, vous recevez un message d’erreur du style:

« You need a browser that support WebGL. »

WTF! vous dites-vous. Firefox4 n’est-il pas sensé supporter WebGL nativement ?
Et bien oui mais à la condition que la bonne libairie soit installée. Pour WebGL, il s’agit de la librairie libOSMesa6. Pour l’installer, il suffit d’ouvrir un terminal et de taper ceci:

$ sudo aptitude install libosmesa6

Ensuite, ouvrez Firefox4 et tapez about:config dans la barre d’adresse. Cliquez sur Je ferai attention, promis! et modifiez l’option webgl.osmesalib pour y mettre le chemin de la librairie que vous venez d’installer; à savoir /usr/lib/libOSMesa.so.6
Fermez Firefox4 et relancez-le. Le support de WebGL devrait être activé maintenant.
En ce qui concerne Chrome/Chromium 10, il y a un bug qui empêche le fonctionnement de WebGL. A ma connaissance, il n’existe pas de workaround pour le moment.

Le plug-in flash a été bloqué, car il n’est pas à jour

Si vous obtenez le message Le plug-in flash a été bloqué, car il n’est pas à jour à l’ouverture de Chrome/Chromium utilisant flash, il vous suffit de mettre à jour le plugin comme indiqué pour que ce message disparaisse.
Pour mettre à jour le plugin, cliquez sur le bouton Mettre à jour le plugin… Jusque là, ça semble assez logique. Dans la fenêtre qui s’ouvre sélectionnez le plug-in pour Linux en .tar.gz. Ensuite téléchargez le fichier en cliquant sur le bouton. Vous devriez obtenir un fichier appelé install_flash_player_10_linux.tar.gz. Décompressez-le:

$ tar -xzvf install_flash_player_10_linux.tar.gz

Ceci vous donnera un unique fichier libflashplayer.so qui est le plugin flash à copier dans les répertoire ad-hoc. Chez moi, ce plugin est utilisé aussi pour Firefox et se retrouve dans les répertoires suivants:

$ locate libflashplayer.so
/home/michel/.mozilla/plugins/libflashplayer.so
/usr/michel/flashplugin-installer/libflashplayer.so
/usr/share/ubufox/plugins/libflashplayer.so

Pour copier le plugin dans ces répertoires, procédez comme ceci:

$ sudo cp libflashplayer.so /usr/lib/flashplugin-installer/
$ sudo cp libflashplayer.so /usr/share/ubufox/plugins/
$ cp libflashplayer.so /home/michel/.mozilla/plugins/

Redémarrez Chrome/Chromium et le message devrait avoir disparu.

Image persistante avec les écrans LCD

Ayant quelques écrans, au boulot, qui donnent des signes d’images persistantes, je me suis un peu intéressé au problème.

On connaissait tous ce problème d’image qui restait imprimée dans l’écran de nos anciens CRT. En effet, les tubes cathodiques avaient la caractéristique que le phosphore, dont était recouvert la face interne, restait marqué par une image si l’image affichée était un peu trop fixe. D’où l’invention du screensaver (économiseur d’écran) chargé d’afficher des images non fixes, mouvantes ou aléatoires de façon à éviter ce marquage de l’écran.
Mais nos beaux écrans LCD ne devraient pas souffrir du même défaut vu leur construction bien différente des CRT. Et pourtant, au bout de quelques mois de fonctionnement ininterrompu, ils sont marqués autant que nos vieux écrans l’étaient. Ce défaut est dû au fait que les cristaux liquides, s’il sont toujours positionnés dans le même état, ont tendance à rester dans cet état. La cause physique réelle n’est pas réellement connue. On suppose que c’est un problème dû aux impuretés contenues dans le cristal.

L’avantage des écrans LCD est que cette image persistante semble n’être que temporaire. Il suffit d’éteindre l’écran pour une durée au moins égale à celle pendant laquelle il a été allumé pour que cette image persistante disparaisse. Une autre méthode consiste à afficher une image entièrement blanche pendant toute une nuit ou toute une journée par exemple.

Ces problèmes sont connus des fabricants. NEC, par exemple, a édité un Whitepaper sur ce sujet intéressant à lire. Je vous conseille aussi la lecture des différents sites ci-dessous et qui traitent du sujet.

En conclusion, faites comme vous faisiez avec vos écrans CRT, utilisez un screensaver, affichez une image entièrement blanche pendant les périodes d’inactivité ou éteignez l’écran dès que vous ne vous en servez plus. Ceci préviendra l’apparition de ces images fantômes.

Références:

http://en.wikipedia.org/wiki/Screen_burn-in
http://shallowsky.com/blog/tech/lcd-burn-in.html
http://en.wikipedia.org/wiki/Image_persistence
http://compreviews.about.com/od/monitors/a/LCDBurnIn.htm

Créer une clef usb bootable avec l’iso de Debian Squeeze

Il y a peu, la nouvelle version de Debian est sortie officiellement. Il s’agit de la 6.0 appelée Squeeze.
Avec cette nouvelle version, non seulement Debian propose une version LiveCD mais Debian innove puisque pour créer une clef USB bootable à partir du fichier iso, il n’est plus nécessaire de faire appel à des tas de lignes de commandes dans un terminal ou à une application externe du genre UNetbootin ou le Créateur de disque de démarrage d’Ubuntu usb-creator. Une simple commande du type:

$ sudo cat debian.iso > /dev/sdX

est suffisante sous Ubuntu pour copier l’iso Debian sur la clef USB et obtenir un clef bootable. Remplacez évidemment sdX par le périphérique correspondant à votre clef USB.
Si vous préférez dd, cette commande-ci fait tout aussi bien l’affaire:

$ sudo dd if=debian.iso of=/dev/sdX

Les fichiers disponibles sur le site de Debian sont des iso hybrides c’est à dire compatible CD et clef USB. Notez tout de même que tous les PC ne supportent pas les iso hybrides. Si c’est le cas de votre PC, Debian fourni aussi des fichiers img uniquement pour clef USB et qui peuvent se créer tout aussi facilement.

Quelques liens où télécharger les images Debian:
http://www.debian.org/CD/live/index.fr.html
http://www.debian.org/distrib/
http://cdimage.debian.org/debian-cd/6.0.0-live/i386/
http://cdimage.debian.org/

Vous n’avez donc plus aucune excuse pour ne pas essayer cette nouvelle version de Debian.

Utiliser Twitter dans une application

Il est assez facile de créer un petit script ou d’inclure dans une application la possibilité d’envoyer un message sur Twitter même si depuis quelques mois Twitter impose un système d’authentification plus compliqué que la simple identification par identificateur/mot-de-passe utilisée précédemment. OAuth est un système d’identification qui repose, pour schématiser, sur un système de clef publique et de clef privée. Il faut que l’application qui va utiliser Twitter soit enregistrée et autorisée par Twitter. De même, il faut que le titulaire du compte Twitter, que l’application va utiliser, ait donné son autorisation. Ce n’est que dans ce cas que l’application recevra le token nécessaire à l’accès au compte Twitter.

Il existe plusieurs modules python permettant d’utiliser Twitter. Par exemple python-tweepy ou python-twitter. C’est ce module-là que je vais utiliser pour l’avoir déjà tester dans le passé lorsque Twitter n’utilisait que la simple authentification. Jusqu’il y a peu, ce dernier module n’était pas compatible OAuth. La mise à jour vers OAuth ayant été faite récemment, la version utilisant OAuth n’est pas encore dans les dépôts. Il va donc falloir l’installer manuellement à partir des sources et penser à installer dans la foulée ses dépendances.

Installation de python-twitter

Pour fonctionner, python-twitter a besoin des paquets suivants: python-simplejson et python-httplib2 qu’il suffit d’installer de la manière habituelle puisque ces paquets sont dans les dépôts:

$ sudo aptitude install python-simplejson python-httplib2

Il faut aussi installer python-oauth2 qui est le module permettant d’utiliser ce mécanisme d’authentification et sur lequel repose python-twitter. Ce module n’est malheureusement pas disponible dans le dépôts mais il existe néanmoins un ppa offrant la version voulue:

$ sudo add-apt-repository ppa:chris-lea/python-oauth2
$ sudo aptitude update
$ sudo aptitude install python-oauth2

Python-twitter lui-même est à télécharger sur le site http://code.google.com/p/python-twitter/.
La dernière version est la 0.8.1.

Décompressez et désarchivez le fichier. Rendez-vous dans le répertoire désarchivé puis tapez les commandes suivantes pour installer python-twitter:

$ python setup.py build
$ sudo python setup.py install

Vous avez maintenant tous les outils nécessaires pour utiliser Twitter depuis une application en python.

Enregistrer l’application sur le site de twitter

Une des obligations imposées par Twitter est d’enregistrer son application. Pour cela, vous devez posséder un compte Twitter et vous rendre à cette adresse: http://twitter.com/oauth_clients. Remplissez-y le formulaire en faisant attention de bien mettre Client dans le champ Application Type et mettre le Default Access Type en read/write si vous désirez pouvoir envoyer des tweets depuis votre application. En retour, Twitter vous donnera les renseignements suivants qui vous seront nécessaires pour la suite:

API key
Zst*******************

Consumer key
Zst*******************

Consumer secret
miX**************************************

Request token URL
https://api.twitter.com/oauth/request_token

Access token URL
https://api.twitter.com/oauth/access_token

Authorize URL
https://api.twitter.com/oauth/authorize

Obtenir les autorisations nécessaires

La première fois que l’application tente de se connecter à un compte Twitter, il faut préalablement réclamer un code PIN à l’adresse Request Token URL reçue à l’étape précédente puis avec ce code PIN visiter la page Authorize URL. Ce n’est qu’à ce moment qu’on peut réclamer la Token Key et le Token Secret via l’Access Token URL indispensable pour accéder au compte Twitter.

Pour cela, j’ai écrit un petit script en python très largement inspiré de celui trouvable à cette adresse:
http://code.google.com/p/python-twitter/source/browse/get_access_token.py

Ce script se connecte à l’adresse Request token URL reçue lors de l’enregistrement de l’application sur le site de Twitter et, en donnant la Consumer key et le Consumer Secret, on obtient le Request Token Key et le Request Token Secret. Ces deux tokens serviront à créer une URL où vous devrez vous rendre pour obtenir un code PIN.
Enfin, ce code PIN, une fois introduit dans le script, vous donnera l’Access Token Key et l’Access Token Secret que votre application doit utiliser pour accéder au compte Twitter.
Ouf! Qui a dit que le mécanisme d’authentification OAuth était compliqué ?

import os
import sys
import urlparse
import oauth

# Clef et Secret obtenus lors de l'enregistrement de l'application
consumer_key = "Zs*********************"
consumer_secret = "miX*************************************"

oauth_consumer = oauth2.Consumer(key=consumer_key, secret=consumer_secret)
oauth_client = oauth2.Client(oauth_consumer)

resp, content = oauth_client.request("https://api.twitter.com/oauth/request_token", 'POST')
if resp['status'] != '200':
  print 'Invalid response from Twitter requesting temp token: %s' % resp['status']
else:
  request_token = dict(urlparse.parse_qsl(content))

  print 'Please visit'
  print '%s?oauth_token=%s' % ("https://api.twitter.com/oauth/authorize", request_token['oauth_token'])

  # A ce stade, vous devez visiter le site à l'adresse indiquée pour recevoir le code PIN
  # nécessaire au stade suivant.   
  pincode = raw_input('Pincode? ')
  token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
  token.set_verifier(pincode)
  
  oauth_client  = oauth.Client(oauth_consumer, token)
  resp, content = oauth_client.request('https://api.twitter.com/oauth/access_token', method='POST', body='oauth_verifier=%s' % pincode)
  access_token  = dict(urlparse.parse_qsl(content))
 
  # Avec le code pin que vous avez introduit, Twitter vous donne un Access Token Key et
  # un Access Token Secret qui devront être utiliser dans python-twitter. 
  if resp['status'] != '200':
    print 'The request for a Token did not succeed: %s' % resp['status']
    print access_token
  else:
    print 'Your Twitter Access Token key: %s' % access_token['oauth_token']
    print '          Access Token secret: %s' % access_token['oauth_token_secret']

Voici ce qui doit apparaître dans le terminal au lancement du script:

Please visit
https://api.twitter.com/oauth/authorize?oauth_token=fQb*************************************

Pincode? 0595314
Your Twitter Access Token key: 24*******-0gd**************************************
          Access Token secret: 1uX*********************************************

Envoyer un message sur Twitter

Maintenant qu’on possède toutes les autorisations nécessaires, on peut tweeter un message en utilisant python-twitter. Le code, ci-dessous, utilise la Consumer Key, le Consumer Secret, l’Access Token Key et l’Access Token Secret pour se connecter à Twitter via la classe Api du module. On vérifie, avec VerifyCredentials() que l’on dispose bien des droits indispensables et ensuite on envoie notre tweet sur le compte avec PostUpdate().

import twitter

consumer_key = "Zst*******************"
consumer_secret = "miX***************************************"
access_token_key = "241******-0gd*************************************"
access_token_secret = "1uX**************************************"

api = twitter.Api(consumer_key, consumer_secret, access_token_key, access_token_secret)
resp = api.VerifyCredentials()
if resp == None:
  print 'Error verifying credentials'
else:
  resp = api.PostUpdate('My first twitter message using python')

La classe Api du module python-twitter permet bien sûr de faire bien plus que simplement envoyer un simple tweet. Vous pouvez lire la timeline du compte, gérer vos abonnements et vos abonnés, créer des listes etc… Pour connaitre toutes les possibilités, tapez:

$ pydoc twitter.Api

pydoc affichera, à l’instar des pages de man, toutes les fonctions et la doc relative à la classe Api de python-twitter.

Références

http://code.google.com/p/python-twitter/
http://dev.twitter.com/doc
http://code.google.com/p/python-twitter/source/browse/get_access_token.py

Utiliser telnet pour recevoir ou envoyer un mail

Il est parfois intéressant et plus rapide, pour tester ou débugger un serveur de mail, d’utiliser telnet. Telnet permet de se connecter simplement au serveur plutôt que de configurer un client mail comme Thunderbird ou Evolution, ce qui peut être fastidieux et long. De plus, utiliser telnet pour des tests simples permet aussi de voir les éventuels messages d’erreurs envoyés par le serveur en réponse aux requètes. Ces messages d’erreurs sont en général cachés par les clients mails plus complets auxquels ils substituent leurs propres messages.

Pour se connecter en telnet sur un serveur de mail, il suffit de substituer au port 23 par défaut de telnet, le port utilisé par le serveur. Le serveur SMTP (Simple Mail Transfer Protocol) qui sert lors de l’envoi d’un mail utilise le port 25. Le serveur POP3 (Post Office Protocol) sert pour la réception des mails et utilise le port 110.

SMTP

La commande pour se connecter en telnet sur un serveur SMTP d’envoi de mails est:

$ telnet le_serveur 25

Remplacez le_serveur par votre serveur de mail sortant. Il peut arriver que certains serveurs utilisent un autre port que le 25.
Les commandes de base du protocole SMTP sont les suivantes:

  • HELO ou EHLO qui permet de se présenter au serveur
  • MAIL FROM: suivi de l’adresse email se celui qui envoie le mail
  • RCPT TO: suivi de l’adresse email du destinataire. Vous pouvez faire plusieurs commandes RCPT TO: dans le cas où vous désirez envoyer votre mail à plusieurs adresses.
    DATA le corps du mail proprement dit. Celui-ci doit se terminer par un retour charriot suivi d’un ‘.’ en début de ligne puis d’un nouveau retour charriot. Cette séquence indique au serveur que le mail est terminé. Vous pouvez débuter votre mail par le mot Subject: suivi du titre de votre message et d’un retour charriot. Cela indiquera au serveur que vous voulez utiliser ce titre comme sujet de votre message. D’autres entêtes peuvent, à l’instar du titre, être ajoutées au corps du mail. Il s’agit de Date:, Cc:, Bcc:, From: .
  • QUIT fin de la transaction avec le serveur. Ceci coupe la liaison au serveur.

Voici un exemple. Notez les réponses du serveur entre chaque commande:

$ telnet mail.voo.be 25
Trying 212.68.193.11...
Connected to mrouterout.brutele.be.
Escape character is '^]'.
220 mirapoint3.brutele.be ESMTP Mirapoint 4.1.10-GA; Fri, 28 Jan 2011 21:17:12 +0100
HELO pp575.leunen.com
250 mirapoint3.brutele.be Hello [109.89.20.119], pleased to meet you
MAIL FROM: bill.gates@microsoft.com
250 bill.gates@microsoft.com... Sender ok
RCPT TO: michel@leunen.com
250 michel@leunen.com... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: We need you
Hi michel,
do you want to work fo Microsoft?
We have an offer for you.
.
250 ABQ82982 Message accepted for delivery
QUIT
221 mirapoint3.brutele.be closing connection

En majuscule, ce sont les commandes SMTP et entre chaque commande vous pouvez voir la réponse du serveur qui commence toujours par un numéro.

POP3

Pour se connecter en telnet sur un serveur POP3, la commande est

$ telnet le_serveur 110

Remplacez le_serveur par votre serveur de mail entrant.
Les commandes principales du protocole POP3 sont:

  • USER Indique au serveur le nom d’utilisateur du compte mail.
  • PASS Mot de passe du compte mail
  • STAT Demande au serveur le nombre de mail présents dans la mailbox ( INBOX). La réponse est du type +OK nombre_de_mesages nombre_de_bytes
  • LIST Donne le nombre de messages dans la mailbox et le poids en bytes de chaque message.
  • RETR index_du_message Télécharge le message dont le numéro d’index est spécifié en argument. Le numéro d’index est donné par la commande LIST. Cette commande ne supprime pas le message du serveur.
  • TOP index_du_message nombre_de_lignes Affiche les x premières lignes du message dont l’index est donné en argument.
  • DELE index_du_message Supprime le message dont le numéro d’index est spécifié en argument.
  • QUIT Coupe la liaison et termine la transaction.

Exemple de transaction avec le serveur POP3:

 
$ telnet mail.leunen.com 110
Trying 84.16.68.123...
Connected to mail.infomaniak.ch.
Escape character is '^]'.
+OK POP3 Ready mdaproxy5 0001e9d5
USER michel
+OK USER michel set, mate
PASS **********
+OK You are so in
LIST
+OK 0 messages:
.
QUIT
+OK Logging out.

IMAP

Il existe un troisième protocole utilisé pour se connecter à une boîte mail. Il s’agit du protocole IMAP (Internet Message Access Protocol). Celui-ci utilise le port 143. La syntaxe est un peu plus compliquée qu’avec un serveur POP ou SMTP parce qu’il peut gérer plusieurs accès simultanés ainsi que plusieurs boîtes mail.
Je n’en donne pas d’exemple pour deux raisons: la première parce que je n’ai pas accès à un serveur IMAP pour tester les commandes et la seconde c’est qu’il est plus utilisé dans le domaine professionnelmais que pour le commun des utilisateurs Linux, qui utilise la boîte mail fournie avec son abonnement à un FAI, il s’agit dans la majorité des cas d’uun accès SMTP et POP3.