Bonjour tout le monde !

Je bataille avec mon clavier MX5000 de chez logitech pour utiliser ses fonctionnalités "avancées", à savoir le petit écran LCD qui se trouve en haut (image). J'ai trouvé un logiciel sympa (mxtools) pour le contrôler. C'est un peu l'équivalent de gammu pour utiliser son téléphone portable : tout en ligne de commandes.

Ce que j'aimerais faire c'est un petit logiciel qui puisse par exemple réagir avec Amarok pour afficher le nom de la chanson qui est en train d'être lue. J'aimerais aussi qu'il puisse "regarder" si j'ai reçu un email et qu'il l'affiche en conséquence. L'utilisation de mxtools ne pose aucun problème, je sais quelles commandes taper dans un terminal pour faire ce que je veux. Ce que je cherche (enfin, je suppose que c'est ça 🙂), c'est un language de programmation adapté à ma situation, pas trop compliqué à utiliser (avec de la "bonne" documentation disponible sur le web), et avec lequel on peut réaliser des interfaces graphiques.

J'en appelle donc à vos bons conseils 🙂.


<edit modo> langage au lieu de language...anglissisme.
Pour amarok, use dcop.
J'ai pas un nux sous la main mais un pauvre appel dcop te donnera ton graal.
Pour les mails, je crois que perl et python peuvent te torcher ça en quelques lignes (mattre les sources de quelques plugins mail superkaramba en perl ou python, ça se fait très bien).

PS : http://amarok.kde.org/wiki/DCOP_Functions
dcop amarok player track
(mais matte si y a des bindings python ou perl pour dcop plutot)
Ok merci pour ces informations 🙂. Je vais voir tout ça... J'ai déjà remarqué qu'il y a des packages pour perl et pour python pour accéder aux "fonctionnalités pop". Pour ce qui est de dcop je vais regarder ça...
Bonjour,

Perl possède en plus un module pour créer des interfaces graphiques assez simplement. Cherche du côté du module Tk.

Bon courage
Merci Fox Delta mais "trop tard" je me suis mis au python 🙂... Et j'ai cru comprendre qu'il y avait wxPython entre autres pour l'interface graphique. Ceci dit j'en suis pas encore là, mais alors pas du tout... J'apprends les bases, je me rends compte qu'en effet comme le disait Temet ça peut être fait en quelques lignes de code. Après quand j'aurai réussi à faire marcher ça sur mon ordi j'essaierai de faire un programme adaptable pour tout le monde puis l'aboutissement final sera (un jour peut-être...) un rpm. Mais vu que j'ai jamais rien fait de tel, ça risque de prendre du temps surtout que je profite de mes grandes vacances ^^. Enfin, heureusement que la doc est très bien faite ici.

D'ailleurs au passage si j'ai des questions sur python (et j'en ai) je peux les poster ici ? Y'a du monde qui s'y connaît un peu ? Je voudrais pas polluer non plus...
J'y connais rien du tout en Python, mais je salue ton courage!
C'est bien de se lancer. Et même si ton code est pas top au début et que tu vas trouver des vilains pas beaux pour te reprocher ton code, bah faut persévérer.
Pour le rpm, tu verras que c'est pas si compliqué si ton programme est interprété, faudra juste lui dire de copier le script dans un répertoire style /usr/bin.
[mylife]Perso en ce moment, je me dis que je bidouillerais bien un peu. J'ai quelques bases mais rien de poussé. j'ai ressorti un vieux programme C/OpenGL que j'avais fait un week end pour un projet il y a... ... 5 ans o_O'.
J'ai été surpris de me rappeler du premier coup comment le compiler (gcc -lGL -lglut -o truc truc.c) ... et ai eu la mauvaise surprise de voir que GLUT avait un poil changé. Mais bon, l'erreur disait qu'il manquant un glutInit, je l'ai rajouté et ça tourne nickel 😉[/mylife]
Si je tombe sur un des tes postes concernant python, je me ferais un plaisir de te filer un coup de pince... dans les limites de mes compétences bien sûr.

Un petit conseil, si tu veux faire quelques chose avec un module quelconque, essaye de trouver sur ta machine du code qui fait plus ou moins la même chose et adapte le à ta sauce. p.ex pour écrire livna-config-display, je me suis très largement basé sur system-config-display, j'ai trouvé dans ce code casi tout ce dont j'avais besoin. Makefile .spec (RPM), comment utilisé l'API xf86config et plein d'autre truc bien sympa. Tout ça pour te dire que si j'avais codé avec des oeillères (sans regarder comment font les autres) ça m'aurais pris 4 X plus de temps.

Bonne chance et bonne amusement avec Python!
Ok ok je prends note de tous ces conseils 🙂. Pour l'instant j'ai lu presque en entier un cours sur python et j'ai intégré la syntaxe. Pour ce qui est du code en lui-même j'ai déjà commencé à repiquer des bouts de code par-ci par-là c'est sûr que c'est beaucoup plus facile comme ça !!!

En tous cas merci pour vos encouragements ^^

Edit : j'ai trouvé comment utiliser dcop avec python je suis heureux :-p... et j'ai même un début de programme pour accéder à un compte pop3 !!
Edit : bon finalement pour ce qui est d'Amarok il apparaît plus simple et plus portable de faire directement un script (en python pourquoi pas) et pour l'histoire des mails je verrai plus tard 🙂

Encore merci !
Pour info j'ai une source C ou C++ que j'ai faite pour accéder à un compte en pop ou imap (en décembre ou janvier dernier).
Elle m'avait servi de test pour voir comment ça marche.
Ensuite elle a complètement été modifiée pour utiliser Qt et les QSocket.
Par contre, pour faire ce qui se fait 5 lignes de perl, c'est assez babare avec C (les sockets c'est pas sympa quand t'y as jamais touché).


EDIT : du C.
J'avais aussi trouvé un PDF qui expliquait le fonctionnement du POP (et introduisait l'IMAP), c'était court et bien fait.
Tu m'interresses là 🙂...

Pour l'instant je me suis balladé de longues heures sur google sans trouver de réponse à une petite question : comment repérer les messages non lu sur un compte pop ? Apparement j'ai cru comprendre que le protocole en question ne permettait pas d'avoir de telles informations. Seulement, desfois, les serveurs mails ajoutent une balise du style 'X-status : Read' pour repérer les messages lus/non lus. Moi je suis chez yahoo et j'ai eu beau décortiquer mes messages je n'ai pas trouvé de telle balise. Alors si tu as un moyen simple de savoir si un message a été lu ou non, ça m'interresse !!! Parceque sans ça je peux pas faire grand chose 🙂. Enfin, en attendant je pauffine mon script pour Amarok.

En attendant c'est vrai que mis à part ce problème, le module "poplib" pour python permet en effet d'accéder très facilement à un compte pop et ça c'est super ! Pareil pour le module "pydcop" et amarok, quelques petites lignes de programme et le tour est joué !
Alors non, en effet à ma connaissance le protocol POP ne permet pas de savoir le nombre de mails non lus.
Perso, quand je lance mon programme au démarrage de la session, il affiche le nombre de mails sur mon compte et il le scanne toutes les x minutes. Au scan suivant, si un nouveau mail arrive j'ai une fenêtre passive qui apparait quelques secondes en bas à droite pour me prévenir.
Voilà 😉
Et comme je voulais que mon programme soit compatible avec un compte POP standard, j'en suis resté là.
Dans l'idéal, je voulais aussi le faire via SSL mais euh ... c'est super mal documenté ce truc :/
Y a QSSLSocket mais dispo seulement dans la version payante de Qt3, ou dans Qt4... hors comme c'est une appli KDE, elle dépend de Qt3.
Bonne chance 😃
Sur certains serveurs Pop3, il y a un flag X-seen, sinon poplib ne le permet pas directement mais imaplib oui, donc si t'as un accès Imap.
Sinon, D-Bus a bien été intégré dans KDE 3.5.x ? Parce que dcop est déprécié, autant commencer à faire mumuse avec D-Bus.
Je pense que DBUS ne sera pas implémenté dans Amarok avant KDE 4.
A vérifier 😉

PS : ouais mais par IMAP, mon compte Free aurait soit disant 85 mails non lus... alors qu'il y en a 0.
Vu la fiabilité... j'ai laissé tomber 😉
Ah ouais 85 faux positifs quand même. :-?
Pour ce qui est de imap je crois malheureusement que yahoo ne le supporte pas... Et j'ai tenté un petit "dbus amarok" sous google mais rien de concluant je crois qu'il faudra attendre KDE 4 pour une version d'Amarok qui marche avec dbus, en attendant je m'amuse avec dcop... Toutes façons il n'y aura sans doute pas grand chose à changer 🙂.
Mais il doit y avoir une solution parceque j'ai déjà eu des widgets qui me donnaient le nombre de mails non lus sans avoir à utiliser ton astuce Temet. Et puis si on supprime un message sur le serveur et que dans la foulée on en reçoit un autre il se passe rien ! Enfin, je finirai bien par trouver l'astuce qui fera tout marcher 🙂.
Bah à ce moment là, tu me tiendras au courant 😉
Pas de problème !

Après ça peut prendre un certain temps...
snouffy wrote:Mais il doit y avoir une solution parceque j'ai déjà eu des widgets qui me donnaient le nombre de mails non lus sans avoir à utiliser ton astuce Temet. Et puis si on supprime un message sur le serveur et que dans la foulée on en reçoit un autre il se passe rien ! Enfin, je finirai bien par trouver l'astuce qui fera tout marcher 🙂.
Regarde dans les "applet" superkaramba, il y en à un tas écrit en python et je serais pas étonné qu'il y en ai un pour vérifier la présence de mails non lus.

L'astuce de Temet devrait le faire aussi, j'avais utilisé le même workaround avec l'api javamail pour vérifier la présence de mails non lus sur un serveur pop (l'avantage c'est que le code fonctionnera avec pop et imap).
@alcapcom : c'est aussi ce que m'a conseillé Temet ^^... Je regarderai ça à l'occasion pour l'instant je m'amuse avec Amarok, et, oh miracle, ça marche !!! Bon seul petit problème, une mise à jour de l'affiche de l'écran LCD rend inutilisable la souris pendant un peu moins d'une seconde : faut pas changer de musique trop souvent !!! :-P
Ca y est je viens de comprendre !!! Quand j'utilisais des widgets me donnant le nombre de messages sur mon compte mail, ils ne me donnaient pas le nombre de messages "non lus" mais simplement le nombre total de message... C'était à une époque où je ne laissais pas mes messages sur le serveur !!! Et pour ce qui est des scripts superkaramba que j'ai pu trouver, qu'ils soient en perl ou en python, ils font tous pareil : ils regardent simplement le nombre total de messages sur le serveur !!!!!!

J'ai la tête qui bouillonne... :-D
Bon ben ça y est j'ai trouvé la solution qui fait tout marcher comme promis... Enfin, disons plutôt que j'ai contourné le problème. Alors, en ma qualité de Snouffy, j'ai décidé que le protocol pop3 était tout pourri. Donc, en attendant que Yahoo! passe à l'IMAP, je redirige tous mes mails vers un de mes comptes Free (chez Free ils ont bien sûr implémenté l'imap). Et comme avec l'imap on peut tout faire, ça marche très bien presque tout seul ^^...

Voilà, le premier jet de mon programme est terminé et testé par mes soins, tout marche bien. Il va falloir maintenant que je me plonge encore un peu plus dans le python (n'interpretez pas mal cette phrase) pour pouvoir le rendre accessible à tout le monde, enfin, disons aux heureux possesseurs d'un clavier MX5000.
Je te conseille de lire mes messages un peu plus haut. Personnellement, via Imap, mon compte m'indique 82 messages non lus alors que j'en ai aucun! ^^
Oui j'ai vu ça... Mais pour ma part ça a l'air de très bien marcher après quelques tests... Peut-être que tu devrais changer de fournisseur mail :-P. Si tu as python sous la main et que tu veux tester un bout de code :
server,username,passwd="imap.blablabla","nom_du_compte","mot_de_passe"
def check_mails(server,username,passwd):
    M = imaplib.IMAP4(server)
    M.login(username,passwd)
    M.select(readonly=1)
    typ, data = M.search(None, "(UNSEEN)")
    data=string.split(data[0])
    nombre_messages=len(data)

    if (typ == 'OK') & (nombre_messages>0):
        message_id=int(data[nombre_messages-1])  #On ne regarde que le dernier message arrivé
        (ret, mesginfo) = M.fetch(message_id, '(BODY.PEEK[HEADER.FIELDS (SUBJECT FROM)])')
        if ret == 'OK':
            t=mesginfo[0][1]
            t=t.replace("""\r\n""","")
            t=t.replace("""<""","")
            t=t.replace(""">""","")
            t=t.split('Subject: ')
            auteur=t[0]
            auteur=auteur.replace("From: ","")
            sujet=t[1]
        else:
            print "Problème de communication avec le server mail :"
            print ret
    M.logout()
    return nombre_messages, auteur, sujet

nombre_messages, auteur, sujet=check_mails(server,username,passwd)
print nombre_message, auteur, sujet
C'est sûrement très mal écrit mais ça a l'air de marcher chez moi :-D... Sur ce je vais aller m'attaquer à PyQt ^^
Effectivement, ça marche!!!!
Bon, j'ai du corriger deux trois trucs :
> import imaplib, string
> "print nombre_messages, auteur, sujet" à la place de "print nombre_message, auteur, sujet"

Mais ça marche très bien!!!

C'est malin je vais devoir me replonger dans mon C++ alambiqué! ^^

EDIT : je viens de comprendre !!!!!!!!!!
En fait, j'ai pas 82 mails non lus, mais le mail numéro 82 est non lu!!!! (c'est un mail que je me suis envoyé à moi même et que je laisse non lu exprès pour m'en occuper quand j'aurai le temps!!)

Merci mon grand! 😃
bonjour snouffy
j'aimerai moi aussi me mettre a la programmation python
Peux tu m'indiquer ou tu as trouvé un tuto?...
@Temet : pardon pour la faute de frappe j'ai recopié et réarrangé mon script un peu vite (il a fallu que j'enlève une petite partie de mon programme, celle qui gère l'écran LCD)... Content que ça marche chez toi ^^ ! Pour info, mais je pense que tu t'en es rendu compte, la variable data est juste un tableau avec le numéro des messages non lus 🙂. Et le "BODY.PEEK" est, à ce que j'ai pu lire, un vilain hack remplaçant "BODY" qui évite de marquer le message comme lu.

@chepioq : je suis pas sur mon ordi je vais l'allumer et je te donne les liens que j'ai ^^

Edit : Voilà ce que j'ai utilisé pour commencer :
http://fr.wikibooks.org/wiki/Apprendre_%C3%A0_programmer_avec_Python
(pour l'instant j'ai fait que les 8 premiers chapitres et ça me suffit)
j'ai aussi un peu utilisé la bibliothèque de réference de python, voilà un lien vers la française (qui est incomplète malheureusement mais l'anglaise est lisible) :
http://quentel.pierre.free.fr/python-trad/lib.html
et surtout, j'ai utilisé google pour trouver des réponses à mes questions bien spécifiques 🙂
@snouffy pour trouver du code tu peux aussi utiliser http://www.google.com/codesearch et http://www.koders.com

Juste un petit truc qui me frape est:
t=t.replace("""\r\n""","")
t=t.replace("""<""","")
t=t.replace(""">""","")

que tu serais remplacer par:
t=t.replace("""\r\n""","").replace("""<""","").replace(""">""","")

Bah je viens de vérifié et le replace de Python ne prend pas de regexp dans le premier argument, c'est con... en Java tu aurais pu écrire t.replace("\r\n|<|>", "") et te tour aurais été joué.

Bon coding 😉
Ok merci j'en prends note ^^·
Quant à l'avancement de mon projet, moi qui peste toujours quand il n'y a pas d'interface graphique je me suis forcé à en faire une, c'est marrant mais pas toujours facile 🙂. Par exemple je ne peux pas utiliser d'interface graphique faite avec qt quand le module pydcop est chargé !!! C'est un peu gênant mais finalement j'ai coupé mon programme en deux, une fenêtre graphique pour la configuration et le programme principal à faire tourner en fond...

Par contre j'ai un petit problème au niveau du stockage de mot de passe. C'est "mal" de stocker un mot de passe dans un fichier texte non ? Alors comment je fais pour que mon programme stock un mot de passe et ne le demande pas à chaque fois que je le démarre (mot de passe du server mail) ? J'ai bien trouvé le module getpass() qui a l'air de chercher le mot de passe relatif à la session en cours, mais ça n'est pas satisfaisant.

Autre chose, quand la version 0.1 de mon projet sera stable, si je veux la partager, où dois-je la mettre ? kde-look.org ?

Merci 🙂
Ca a l'air sympa ^^... Mais tant qu'à faire j'aimerais bien trouver un truc qui ne soit pas dépendant de la plateforme (quoi ? Je rêve ?) même si mon programme sert pour AmaroK la fonction mail est à mon sens la plus utile (en fait chez moi j'ai désactivé la fonction amaroK l'utilisation excessive de l'écran LCD de mon clavier faisant méchamment bugger ma souris).

Mais maintenant que j'ai un nom je peux faire des recherches !! Merci 🙂

Edit : je me lis en me balladant que c'est l'équivalent du KDE Wallet et j'ai horreur de ce truc sous KDE ^^... Mais peut-être que c'est moins lourd que sous Gnome. Ceci dit c'est une solution d'utiliser ce genre de programmes.
Je pense pas qu'une solution non dépendante de l'environnement de bureau n'existe, je dis ça car j'ai lu quelque part que NetworkManager stock les clefs dans gnome-keyring quand t'es sous Gnome et dans K Wallet (merci;-)) quand t'es sous KDE.

Bah, en attendant tu sais peut être faire la même chose qu'eux, si le Wallet KDE est facilement "accédable" en python.
Oui je vais voir ça c'est une bonne solution à laquelle je n'avais pas pensé. Ceci dit le Kwallet à quelque chose d'énervant c'est de venir ouvrir sa grande bouche pour demander un mot de passe dès le démarrage de la session pour peu qu'une application en ayant besoin se démarre avec l'ordi. J'ai lu grâce à ton lien (merci encore au passage) que sous Gnome on pouvait demander au gestionnaire de mots de passe de s'ouvrir tout seul sans demander de mot de passe. Et sous KDE il existe une solution qui consiste à mettre "" comme mot de passe pour Kwallet mais bon...

Je pense que je m'arrangerai pour laisser le choix à l'utilisateur de la méthode de sauvegarde du mot de passe... Moi le fichier texte me convient ^^
Perso moi c'est stocké en clair.
La solution simple serait un cryptage réversible avec les clés en dur. C'est cassable certes facilement ... encore plus vu que les sources sont libres.
Perso, j'aime pas kwallet, il est désactivé.
Ta solution est sûrement la plus simple et la plus facile à réaliser... Même si les sources sont libres, si quelqu'un a accès à un dossier /home et qu'il tombe direct sur un fichier de config avec un mot de passe ça craint... Alors que s'il est crypté il va sûrement passer son chemin. Et même si les sources sont disponibles, faudrait qu'il s'embête à aller les chercher pour regarder la clef, etc, etc... Bref, ça peut être une bonne solution intermédiaire.

J'en profite donc au passage pour te demander ce que je dois chercher sur glouglou pour trouver mon bonheur, n'y connaissant rien en cryptographie, si ce n'est les quelques exos de maths que j'ai pu faire la-dessus 🙂...

Edit : et tant que j'y suis, si quelqu'un sait comment à partir de mes fichiers .py je peux faire une jolie archive avec un "make" "make install" ça serait sympa de me donner un lien 🙂.
Ma solution est sans doute plus chiante à réaliser oui! ^^

Quoique, tu fais une rotation aléatoire des lettres (genre a->g, y->o, etc)... c'est uber-simple mais... vu que le fichier est non compilé, n'importe qui lit la source peut le retrouver facilement... ca évite juste un accès direct.

Sinon, tu n'as pas de make à faire, vu que tu n'as pas à compiler.
Pour le make install (qui est dans un Makefile), il suffit de lui dire ou copier le fichier mais... m'est d'avis qu'un rpm serait aussi simple à réaliser... t'as juste à lui dire de copier dans /usr/bin ou /usr/local/bin 😉
Je verrai la création de rpm après je préfererais déjà faire quelque chose d'accessible à toutes les distributions.

Pour le mot de passe je vais donc sans doute m'amuser à faire un truc tout pourri qui échange les lettres, le but n'étant pas trop de sécuriser l'affaire mais comme tu le dis d'éviter un accès direct.
Tiens un snippet en python pour un chiffrage léger d'un mot de passe:
import codecs
encb64 = codecs.getencoder('base64')
encb64("hello")[0]
Le module codecs offre également le rot13 si tu préféres, pour l'opération inverse c'est tellement évident ... 😉