Friday, June 30, 2006

The Girl from Ipanema


Arrangement guitare pour The Girl from Ipanema

La bossa-nova est un genre de musique née du mariage entre le jazz et la samba.

Pour le guitariste moyen, la richesse musicale portée par la guitare de J.Gilberto rend l'apprentissage de cette musique difficile. Le rythme syncopé, les septièmes, les accords diminués et les nuances phonétiques du portugais dissocient le chant de sa musique. Le résultat est inouï, mais en guitare on s'y perd rapidement.

Sur ce post je présente un arrangement pour l'opus The Girl From Ipanema de Carlos Jobim. Cet arrangement privilégie l'air de la chanson afin qu'on s'y retrouve facilement.

Je ne présente que la première partie, la deuxième n'est pas encore au point, mais j'y travaille.

Télécharger le son ici et la tablature .

Thursday, June 22, 2006

Open Transport Tycoon Deluxe

Jouons intelligent



Connu maintenant sous le nom de Open Transport Tycoon Deluxe (OpentTTD), le jeu n'a pas pris une ride, bien au contraire, il s'est enrichi grâce à l'apport de la communauté open source.

OpenTTD est un jeu de stratégie où le joueur doit assurer la gestion d'une entreprise de transport. Jusque là, rien d'innovant par rapport à d'autres jeux de construction. En fait, OpenTTD est intéressant car ses paramètres sont nombreux et bien élaborés. Je peux en citer quelques-uns: Le taux d'inflation, le rachat d'une autre entreprise, les aléas de la stabilité économique, le développement technologique...

Tant de choses qui rendent ce jeu captivant. Disponible sous Linux et Mac OS librement inutile de s'en priver.

Tuesday, June 20, 2006

amaroK chat bot plugin

Bonsoir,
l'avant dernier post n'a été qu'une mise en bouche pour réaliser quelque chose de plus intéressant. Au menu du jour, je propose encore un nouveau plugin pour aMSN.

OK, cette fois j'évite le listing de code, le jargon technique et toutes ces choses qui font du blog «encore un autre blog par un informaticien pour informaticiens». Tous doivent s'y retrouver!

Le chat botté.

En quelques mots, un «chat bot» ou «chat robot» est un logiciel qui mène une conversation avec un humain. Ce logiciel prétend être intelligent en essayant de répondre de façon cohérente aux messages envoyés par l'interlocuteur.

..au pays des merveilles

A.L.I.C.E ou Alice est un chat bot qui est fondé sur une base de connaissances écrite dans un langage XML nommé AIML. Le plugin que je propose, intègre Alice à aMSN et permet de laisser le bot faire la conversation à votre place.

Par exemple, une fois le chat bot activé, celui-ci mène la conversation engagée par un de vos contacts MSN.

Les outils

Pour réaliser cela j'ai utilisé le langage Python qui est disponible sur la majorité des distributions Linux. Le binding Python pour le SDK de KDE est aussi nécessaire dans la mesure où DCOP est utilisé comme protocole de communication inter-processus. Pour manipuler la base de connaissance en AIML, pyAIML a été utilisé. Et enfin, pour réaliser le plugin, on peut reprendre, moyennant quelques modifications, le code TCL de l'avant dernier post.

La conception

Le script Python sera utilisé pour:
  1. Charger les fichiers AIML.
  2. Transmettre le message de l'interlocuteur à Alice.
  3. Renvoyer la réponse.

L'idée est d'utiliser DCOP pour la communication entre notre script TCL et notre script Python. Une fois le plugin activé, les messages entrant sont soumis par le biais de DCOP au script Python. Ensuite, la réponse trouvée de la base de connaissances de Alice est relayée par le script TCL au contact.

TCL <--> DCOP <--> Python

Les seuls messages DCOP exposés par le script Python sont:

ask: Pour soumettre un message à Alice et obtenir une réponse

syntaxe: dcop Alice bot ask "" ""

exemple: dcop Alice-6466 "what is the date today?" "david"

exit: Pour arrêter le programme Python.

syntaxe: dcop Alice bot exit

Télécharger le script python ici.

Le plugin TCL

Inutile de publier le code du plugin. Pour le réaliser, il suffit de repartir du dernier plugin et de coder la procédure received dans laquelle on fait cette fois l'appel DCOP ask.

Pour appeler ask on peut écrire quelque chose comme ça:
set reponse [exec dcop `dcop | grep -i alice` bot ask $question $identifiant]


La réponse obtenue, on l'envoi à l'interlocuteur en utilisant la procédure MessageSend définie dans le fichier gui.tcl. Comme pour le dernier plugin, rien n'est prévu pour l'arrêt, ni pour le chargement. Je laisse le soin à l'intéressé de compléter.

Thursday, June 01, 2006

Plugin aMSN pour amaroK

Le blog est mort?

De retour dans la blogosphère après quelques semaines d'absence. Personne ne remarque! C'est normal, personne ne lit ;o)

Je reviens la santé fragilisée par le stress des examens. Donc, au programme pour ces vacances: le repos, une meilleure alimentation, programmer avec autre chose que Java, s'approprier quelques nouvelles techniques en guitare...

Un plugin aMSN pour amaroK

aMSN est le client de MSN multi plate-formes sous licence GPL que j'utilise sur mon ordinateur. J'ai essayé quelques-uns de ses plugins, mais celui de «music» ne fonctionne pas pour moi. Alors j'ai jeté un oeil sur le code du plugin «Nudge» et j'ai vu qu'il est assez facile d'en coder un.

Un plugin pourquoi faire?

Je voulais simplement mettre dans la fenêtre de aMSN le titre de la chanson et son interprète dans l'espace réservé pour le message personnel. Les plugins sous aMSN sont codés (ou plutôt scriptés) en TCL. Je n'avais jamais vu un code écrit dans ce langage - qui à mon avis a une syntaxe pas très élégante.

Voici une capture d'écran du résultat souhaité


Réalisation du plugin


Pour réaliser le plugin il suffit d'utiliser DCOP. Pour le moment il est vraiment élémentaire et je ne pense pas y ajouter d'autres fonctions vu que je suis déjà passé à quelque chose d'autre.

Le code

Voilà ce que j'ai codé:
#!/usr/bin/tclsh
# Description: Plugin pour afficher dans l'espace PSM
# Il faut d'abord commencer par échanger des messages
# avant que le plugin ne fonctionne. Mais bon,
# chacun peut ajuster le comportement à sa guise.
namespace eval ::amaroK {
# var globale
set oldTitre "oldTitre"

proc Init { dir } {
::plugins::RegisterPlugin "amaroK"
::config::setKey amarokpluginpath $dir

::amaroK::RegisterEvent
}

proc RegisterEvent {} {
::plugins::RegisterEvent "amaroK" chat_msg_received received
}

proc received { event evpar } {
# récupérer le titre, l'artiste ssi amaroK fonctionne
if {[catch {exec dcop amarok player title} errmsg]} {
set titre "Not listening to music :("
set artiste ""
set strPrefix ""
set strDe ""
} else {
set titre [exec dcop amarok player title]
set artiste [exec dcop amarok player artist]
#set cover [exec dcop amarok player coverImage]
set strPrefix "listening to: "
set strDe " - "
}

global amaroK::oldTitre
# n'afficher le titre que si celui-ci à changé
if { [string compare $oldTitre $titre] != 0 } {
set oldTitre $titre
set txt $strPrefix$titre$strDe$artiste
# afficher le changement dans chaque fenêtre ouverte
foreach chatid [::ChatWindow::getAllChatIds] {
# SendMessageFIFO command stack lock
SendMessageFIFO [list ::amaroK::writeMessageToGUI $chatid $txt]
"::amsn::messages_stack($chatid)"
"::amsn::messages_flushing($chatid)"
#::amsn::set_displaypic $cover
}
::MSN::changePSM "$txt"; # echange le message personnel
}

# après 35 secondes rafraîchir
after 35000 ::amaroK::received $event $evpar
}

# écrire le message $txt dans la fenêtre $chatid
proc writeMessageToGUI { chatid txt } {
set color "green"
amsn::WinWrite $chatid "\n" $color
amsn::WinWriteIcon $chatid greyline 3
amsn::WinWrite $chatid "\n" $color
amsn::WinWrite $chatid "[timestamp] $txt\n" $color
amsn::WinWriteIcon $chatid greyline 3
}
}