Base64: Pouquoi envoyer des fichiers en piece jointe d’un mail est une mauvaise idée.

Une page explique comment fonctionne l’encodage Base64 utilisé par MIME pour encoder les pièces jointes des mails. C’est simple : on transforme un groupe de 3 caractères quelconque en un groupe de 4 caractères pris parmi 52 lettres, 10 chiffres, + et /. Il n’y a pas de compression, rien. Un fichier binaire prendra donc toujours 33% de place en plus dans un mail.

Comment choisir entre plusieurs logiciels libres ?

Souvent, un apt-cache search révèle plusieurs paquets permettant a priori de faire la même chose. Lequel est le mieux ? Tous les tester est fastidieux … La meilleure solution pour le savoir est de demander à d’autres ce qu’ils utilisent. Oui, mais il faut un échantillon représentatif !

J’ai trouvé une solution élégante à ce problème. Il suffit de récupérer les résultats du Debian Popularity Contest et de procéder à coups de greps.

Connexion GPRS avec Bouygtel sous Linux

J’ai enfin réussi à faire marcher mon Nokia 7210 en GPRS sous GNU/Linux avec Bouygues Télécom. (Notez comme je fais exprès de placer un max de mots-clés dans cette phrase)

Après un journal sur DLFP où l’aide de plusieurs personnes (notamment Mathieu) m’a été bien utile, je suis arrivé aux fichiers de config suivants :

/etc/chatscripts/gprs :

ECHO ON ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED TIMEOUT 15 ''\rAT OK ATE1 OK ATD*99***1#

/etc/ppp/peers/gprs :

noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs" /dev/ircomm0 57600 defaultroute noipdefault usepeerdns

A moi l’internet à haut débit, les pings de 1s, les téléchargements à 4800 bauds !

Ensuite, j’ai regardé du côté des clients mail pour savoir lesquels supportaient correctement le protocole IMAP, plus économique que le POP. Une fonctionnalité particulièrement intéressante est celle qui permet de passer un argument à la commande FETCH pour spécifier la partie du mail qu’on souhaite récupérer. Ainsi, on peut récupérer un mail sans en récupérer la pièce jointe. (Ben oui, à 0.005€ le ko, il n’y a pas de petites économies !). mutt ne gère pas ca. pine ne se connecte meme pas à mon serveur imap (de toute facon, pine ca pue c’est pas libre). Olivier insiste pour me dire qu’Evolution le gère, mais je n’ai pas vérifié. Et finalement, mon choix s’est porté sur thunderbird (au passage, dommage que le paquet Debian soit si vieux).

Avec thunderbird, c’est assez confortable à utiliser pour lire et envoyer des mails. Dommage qu’avec une latence si importante, le ssh soit exclu …

Graphes d’appel en C et C++

Je viens de découvrir quelque chose que je cherchais sans le savoir depuis longtemps : la possibilité de faire un graphe des appels de fonction dans un programme. C’est un journal sur LinuxFR qui m’a donné envie de me pencher sur le sujet. La conclusion du journal était que la solution la plus simple est de :

  • - compiler le programme avec les options de profiling (-pg).
  • - lancer le programme : ./prog
  • - récupérer la sortie de gprof : gprof ./prog > fichier.out
  • - la parser pour en générer un fichier .dot. cat fichier.out | ./cgprof > fichier2.out
  • - avec graphviz, générer un graphique : dot -Tps fichier2.out -o prog.ps

Ca marche sans problèmes pour les programmes en C, mais c’est plus difficile avec les programmes en C++, car la sortie de gprof est un peu différente (en C, les paramètres des fonctions ne sont pas affichés, alors qu’en C++, oui). Je me suis attaqué au problème, et j’ai commencé à réécrire cgprof pour prendre en compte les paramètres. Mauvaise idée, le code est assez immonde. Du coup, j’ai changé d’approche : j’ai demandé à gprof de ne pas demangler les noms de fonctions (option –no-demangle), j’ai généré le .dot avec les noms de fonction manglés, et j’ai utilisé c++filt (livré dans binutils) pour démangler directement le .dot. Et ca marche !

Il peut aussi être souhaitable de ne pas afficher les arguments des fonctions, histoire de gagner un peu de place. C’est facile : sed -i ‘s/([^)])//g’ fichier2.out et hop !

Ah j’oubliais : dans mon exemple, j’ai supprimé les indications sur la couleur, car apparemment, la formule que cgprof utilise ne donne pas de supers résultats. Ca se fait avec un grep -v sur le .out.

Autres améliorations possibles, cette fois au niveau de gprof :

  • L’option –static-call-graph demande à gprof de faire une analyse statique du code pour déterminer le graphe d’appels.
  • Les options -q et -Q permettent de contrôler plus finement le graphe d’appels. -q permet de définir la racine de l’arbre (pour ne grapher q’un sous-arbre), alors que -Q permet d’exclure un sous-arbre.