Supprimer automatiquement ses anciens tweets

J'utilise beaucoup twitter, principalement pour suivre l'actualité, et converser avec quelques amis. Mon compte est privé, c'est à dire que mes tweets ne sont pas publiques, car ils n'intéressent potentiellement que mes amis.

Étant quelque peu "parano" vis-à-vis des réseaux sociaux, je n'aime pas laisser trainer des informations derrière moi. C'est pourquoi d'ailleurs je n'utilise plus Facebook et que j'avais à l'époque supprimé un à un tout ce que j'avais posté.

Dans cette optique, je cherchais une méthode pour supprimer automatiquement mes tweets anciens, car de toute façon plus personne ne les lira. Potentiellement, ils ne serviront donc qu'à une utilisation détournée (publicitaires, statistiques, etc...), d'où mon souhait de faire le ménage.

Une solution radicale est de supprimer mon compte, puis de le recréer. Mais ce n'est pas envisageable car il faudrait à chaque fois se ré-abonner à tous les comptes qu'on souhaite suivre. Un autre idée est de le faire à la main, en cliquant un à un sur les messages à supprimer. Or, j'ai presque atteint les 1000 tweets, ce qui peut être assez rébarbatif...

Le but de cet article est donc de vous présenter une manière plus propre de faire le ménage, en utilisant l'API twitter. En fait, je ne vais pas utiliser directement l'API twitter, mais un bibliothèque python pour l'utiliser : python-twitter, que vous pouvez trouver sur le Google Code du projet. Pour l'installer sur MacOS avec Macports, tapez :

$ sudo port install py-twitter

Une remarque importante est que cette bibliothèque fonctionne avec la version 2.4 de python. N'étant pas un grand expert de python, je ne sais pas si c'est possible ni comment utiliser cette bibliothèque avec une version supérieure. Mais pour ce qu'on souhaite faire, je ne sais pas si ça a une grande importance...

Python-twitter est simple d'utilisation, et après une lecture de la documentation, on arrive vite à se connecter à l'API, récupérer ses followers, ou envoyer des tweets. Un exemple simple, ici pour envoyer un tweet :

import twitter

api = twitter.Api(username='Votre_Username', password='azerty') status = api.PostUpdate("Ceci est un test !") print status.text

{filename}../images/envoi_tweet.png

Le résultat est immédiatement visible sur ma timeline :

{filename}../images/resultat_tweet.png

Bon, venons-en maintenant au cœur du problème. Nous allons faire un petit script dont le principe est le suivant :

  • On récupère notre timeline (en fait, ce sont seulement nos 20 derniers tweets)
  • On supprime les 20-x derniers tweets, où x est le nombre des tweets les plus récents que l'on souhaite garder
  • On recommence, jusqu'à ce que tous les tweets soient supprimés.

L'inconvénient est que lors de la mise en place de ce script, on a généralement beaucoup de tweets, et donc il faut exécuter beaucoup de fois cette boucle. Le problème, c'est que twitter n'autorise qu'une fréquence limitée d'accès à son API, à savoir 150 requêtes par heure. Qu'à cela ne tienne on n'exécute la boucle qu'un petit nombre de fois, et un petit cron exécuté régulièrement finira par purger la timeline !

Voici le script que j'ai écrit rapidement :

import twitter

n = 10     # Nombre de tweets a garder dans sa timeline

api = twitter.Api(username='Votre_Username', password='azerty') tl = api.GetUserTimeline(since_id=0) print('Nombre de tweets recuperes : %d' % len(tl)) print ('Supression des %d derniers tweets :' % (len(tl)-n) )

for i in range(n,len(tl)) :     status = tl[i]     print('Status #%d' % status.id)     api.DestroyStatus(status.id)

Et le résultat :

{filename}../images/py_clean_tl.png

Pour mettre en place le cron, on édite le fichier utilisateur :

$ crontab -e

Puis on ajoute la ligne suivante, par exemple pour exécuter le cron toute les 10 minutes :

*/10 * * * * python2.4 /chemin/vers/le/script/clean_timeline.py >> /chemin/vers/le/log/clean.log

A terme, une fois ma timeline vidée, je remettrai le cron une fois par jour, ce qui sera largement suffisant compte tenu de ma fréquence de gazouillage.

Dernières remarques :

  • Le mot de passe est stocké en clair dans le script, ce qui n'est pas super...
  • Le script tel quel ne marche pas si vous souhaitez garder vos 50 derniers tweets par exemple.
  • Les données récupérées par l'API ont par défaut un cache de 60 secondes. Il est donc normal qu'un deuxième appel au script juste après ne fasse rien !

Maintenant, à vous de jouer pour adapter le script, par exemple pour sauvegarder vos tweets avant de les supprimer !

Coupe de France de robotique 2010

Ce week-end, j'ai participé pour ma troisième année consécutive à la Coupe de France de robotique. Pour cette édition 2010, le robot devait récolter des tomates, maïs et oranges et les emmener dans un panier.

{filename}../images/feed_the_world_logo.png

Cette coupe a été en quelque sorte la consécration du travail fournit avec mon équipe du Club Robot de Centrale Nantes. En effet, depuis deux ans nous avons refait presque tout le robot (base motrice, carte moteur, communication entre les cartes et architecture du code haut niveau) suite à l'échec de la coupe 2008 où nous n'avions pas pu nous homologuer.

{filename}../images/robot_merci_homologuer.jpg

Cette année, le robot a été relativement performant, puisque nous nous sommes homologués, et nous avons joué 5 matchs (2 victoires, 2 nuls et une défaite). Nous terminons finalement 41ème sur environ 160 équipes participantes.

Je vous invite à aller lire l'article plus détaillé sur le site du club (avec d'autres photos, ainsi que des vidéos).

Faites parler le Mac en ligne de commande

Parfois, il m'arrive de taper une ou deux lettre dans mon shell, puis de regarder les résultats de l'autocomplétion. De cette façon, je découvre souvent des programmes plus ou moins utiles.

{filename}../images/say1.png

Ma dernière découverte est le programme say, qui permet tout simplement de faire parler le Mac. Comment ? say utilise la synthèse vocale qui est présente sur MacOS. Un exemple :

$ say Win the yes, need the no to win, against the no !

Et oui, say permet de prononcer correctement des phrases en anglais, mais en anglais seulement. Car Apple n'a toujours pas fait de synthétiseur vocal dans une autre langue, alors que la firme a introduit son premier synthétiseur en 1984 dans le célèbre Macintosh 128K.

En lisant le manuel, on peut trouver des options, comme l'enregistrement de l'audio en AIFF, ou alors le choix de la voix de synthèse :

$ say -v Junior -o lecture.aiff Oh hi! I can has cheeseburger ?

Ce programme n'est pas très utile en soit, mais je pense que ça peut être pratique dans un script automatisé pour donner des informations ou des alertes.

SFTP dans le Finder avec Macfusion

Le Finder de MacOS (10.5, je ne sais pas ce qu'il en est pour la 10.6) ne permet pas d'ouvrir directement une session sftp, ce qui a le don de faire doucement rigoler mes amis linuxiens.

{filename}../images/FinderSftp.png

Il existe certe des logiciels qui permettent de se monter un disque par ssh tels que Cyberduck, mais ils ne permettent pas de naviguer avec le Finder. J'ai donc cherché une solution, et j'ai trouvé un petit logiciel gratuit très pratique : Macfusion.

Après avoir téléchargé et installé Macfusion, il faut le lancer. Une interface très minimaliste s'ouvre. Il faut alors ajouter un nouveau serveur sur lequel on souaite se connecter, soit par ftp, soit par ssh (ce qui est mon cas) :

{filename}../images/Macfusion1.png

Ensuite, il faut remplir les informations de connexion au serveur (le mot de passe est retenu dans le trousseau de MacOS) :

{filename}../images/Macfusion2.png

Il est important de bien remplir "Path:" qui est le chemin où on souhaite arriver à la connexion. Si on le laisse par défaut, Macfusion indiquera l'erreur "Could not mount filesystem: Authentication has failed." (même si l'erreur n'a aucun lien avc un problème d'identification).

Après avoir rempli ces informations, on valide et on monte le volume. Un nouveau lecteur apparaît alors dans /Volumes/ ainsi que sur le bureau et dans la barre latérale :

{filename}../images/iconeSftp.png

On peut maintenant accéder et travailler sur les fichiers en toute transparence depuis le Finder :

{filename}../images/sftpconnecte.png

Remarque : une fois le volume monté, on peut fermer Macfusion sans problèmes, le volume restera monté.

Il faudra quand même que je regarde pour une solution plus "simple", c'est à dire en passant par le shell. Si vous avez des pistes, merci de me le dire !

Convertir un PDF en images PNG sous MacOS

Récemment, j'ai voulu envoyer un pdf constitué d'images scannées d'un manuel à quelqu'un. Mais ce pdf était beaucoup trop lourd pour passer par un boîte mail. J'ai donc cherché une solution pour réduire la qualité de pdf, mais sans succès (pas possible avec Aperçu, ni Adobe Acrobat, et recherche sur Macports infructueuse).

J'ai donc voulu contourner le problème : je souhaitais extraire les images du pdf pour pouvoir changer la qualité puis les assembler de nouveau pour faire un pdf.

J'ai donc tapé au petit bonheur la chance "pdf2png" sur Google, et je suis tombé sur ce lien. Il s'agit d'un petit programme en Objective C qui va automatiquement convertir les pages de fichiers pdf en images png de haute qualité.

Voici les étapes pour compiler et installer le programme (sur Mac OS seulement) :

$ gcc --std=c99 -Wall -g -o pdf2png pdf2png.m -framework Cocoa $ sudo mv pdf2png /usr/bin/

Et voilà ! Il n'y a plus qu'à utiliser le programme sur mon fichier pdf de 33 pages :

$ pdf2png manuel_vox.pdf
$ ls
manuel_vox-p01.png manuel_vox-p10.png manuel_vox-p19.png manuel_vox-p28.png manuel_vox-p02.png manuel_vox-p11.png manuel_vox-p20.png manuel_vox-p29.png manuel_vox-p03.png manuel_vox-p12.png manuel_vox-p21.png manuel_vox-p30.png manuel_vox-p04.png manuel_vox-p13.png manuel_vox-p22.png manuel_vox-p31.png manuel_vox-p05.png manuel_vox-p14.png manuel_vox-p23.png manuel_vox-p32.png manuel_vox-p06.png manuel_vox-p15.png manuel_vox-p24.png manuel_vox-p33.png manuel_vox-p07.png manuel_vox-p16.png manuel_vox-p25.png manuel_vox.pdf manuel_vox-p08.png manuel_vox-p17.png manuel_vox-p26.png manuel_vox-p09.png manuel_vox-p18.png manuel_vox-p27.png

Enfin, j'ai inséré toutes ces images dans un document Pages, puis Exporter > PDF où j'ai choisit la qualité la plus faible qui est appelée "Bonne" (en pensant à mettre toutes les marges à 0 pour conserver les dimensions originales).

{filename}../images/exportPDF.png

Cette méthode est un peu fastidieuse, mais à défaut d'avoir trouvé autre chose, elle fonctionne bien. Mon fichier de départ faisait 26,2 Mo, et il fait maintenant 10,3 Mo, ce qui est plus facile pour diffuser le fichier (la qualité n'étant pas ma priorité).