20 mars 2009

update PF2: Fluxus

Alors j'ai passé cette aprem à essayer d'installer convenablement Fluxus sur le portable de mon camarade de classe avec qui je fais Fluxus. Je dois dire que sa bécane est sympa, tout est reconnu, et l'accélération graphique de CompizFusion passe à merveille gràce à son chipset graphique Nvidia, et puis avec Fluxus en même temps, ca le fait trop :)

Je met ici en aide mémoire la procédure (ca fonctionne sous Intrepid Ibex, sous les autres versions je ne sais pas, feedback powa !):

Je vous rappelle les dépendances requises pour compiler à bien Fluxus.

La compilation (make) et l'installation (make install) se fait en tant qu'administrateur (sudo).

Bon je vous met les dépendances de ces dépendances (euhh... ouais c'est bien ca), avec apt-get installez les applications/librairies suivantes:
  1. autotools-dev
  2. gcc
  3. g++
  4. libxaw7-dev
  5. libjpeg62-dev
  6. libtiff4-dev
  7. libglut3-dev
  8. libasound2-dev
  9. subversion
  10. cvs
  11. scons


Alors déjà si l'accélération graphique fonctionne (faites un glxgears), vous sautez l'étape d'OpenGL, mais je pense de toute manière qu'il est installé de base sous Ubuntu 8.10. (un peu de feedback ca ferrait du bien).

Installation de Ode (v0.11), fftw (v3.2.1), liblo (v0.25), libsndfile (1.0.19) et jack (v0.116.2):
Je vous conseille de lire le fichier README ou INSTALL qui est à l'intérieur et ne pas suivre bêtement ma procédure. La compilation pour chacune des applications se fait avec:
./configure
make
make install


Pour Jack, c'est pas la peine de faire un make install, car on installera la version bundlé avec Intrepid Ibex (sinon y'a un conflit avec le GUI qjackctl, passez votre chemin).

Il reste à installer ce mastodonte de PLT Scheme:
on récupère le code source directement sur le dépôt svn:
cd Bureau ; svn checkout http://svn.plt-scheme.org/plt/trunk plt
ou
cd Bureau ; git clone git://git.savannah.nongnu.org/fluxus.git

Vous verrez sur le bureau un dossier plt, le code source est à l'intérieur du dossier src.
Faites un:
./configure --prefix=/usr/usr/local --enable-shared
make
make install


Priez car il est très chatouilleu à la compilation le bougre :s

Enfin Fluxus ! on récupère le code source sur le serveur cvs:
cvs -z3 -d :pserver:anonymous@cvs.savannah.nongnu.org:/sources/fluxus co fluxus


Sur le bureau va apparaitre un dossier fluxus avec le code source de fluxus à l'intérieur.
on le compile/installe avec scons:
scons
scons make install


Quand scons finit, on peut lancer directement Fluxus en l'apellant dans un terminal.

Jusque là on à finit de l'installer, pour utiliser le son dans Fluxus on installera via apt-get jackd et un GUI qjackctl, les versions qui ont fonctionné sont pour jackd version 0.109 et qjackctl version 0.3.2. Je pense que si vous faites un make install du code source de jack vous avez téléchargé plus haut alors il faudra faire de même pour qjackctl sinon y'aurra conflit et qjackctl ne reconnaitrera pas les drivers de jackd.

Je remarque que Jack est assez compliqué à utiliser lorsque l'on n'as pas l'habitude. En fait il faudra lancer Jack avant de lancer votre lecteur audio et Fluxus, sinon qjackctl ne pourra pas "hooker" votre lecteur audio.Lancez qjackctl (cliquez sur Start).
Pour ma part j'utilise Amarok (avec Xine), mais il faudra compiler Xine à la main car la version installé avec Amarok par Ubuntu ne permet pas à Xine de se connecter au serveur Jack. Alors il faudra aller chercher une autre version de Xine, les versions 1.1.7 et 1.1.8 fonctionnent (merci le feedback ;). Xine se compile et s'installe comme d'habitude.

Si vous n'arrivez pas à le compiler, vous pourrez récuperer ce fichier et le mettre dans le répertoire /usr/lib/xine/plugins/votre_version

Ensuite dans Amarok je suis allé dans Settings->Configure Amarok->Engine->Output Plugin->choisissez Jack (veillez a ce que Jack soit lancé sans quoi Amarok va vous cracher dessus).

Lancez une musique, si vous n'entendez pas votre morceau c'est normal, Xine renvoie le flux audio vers Jack, il faut que vous cliquiez sur Connect dans qjackctl puis vous pourrez prendre dans la colonne de gauche une source audio et a droite l'entrée sur laquelle vous brancherez votre prise jack ^^. A force c'est très intuitif et on se rend compte que c'est super pratique Jack, surtout pour ripper du son de sources... exotiques ;)

Fluxus livecoding

J'avais pensé pour mon projet prendre Fluxus, qui est un peu un extraterrestre dans son genre. Il permet (quand on arrive a l'installer, et c'est pas une mince affaire) de programmer des séquences 2D ou 3D dans le but d'illustrer de la musique, à l'instar du VJing, vous pourrez créer de magnifiques tableaux abstrait réactif à la musique.

A l'aide de jackd, vous pourrez "router" un flux audio dans fluxus qui vous permetrera d'utiliser le son comme variable (trop la classe ca !).

Evidement ca à l'air facile sur hipopochat mais je vous assure pour le compiler et le faire marcher proprement c'est pas facile du tout.

Une astuce, deja ne cherchez pas à installer les dépendances à partir d'apt-get mais installer chaque dépendance à la main (combo wget+./configure+make+make install xD).
Si vous avez un soucis avec l'installation n'hésitez pas à m'envoyer un mail j'essayerais de vous guider.

Dépendances:
  1. OpenGL
  2. Ode
  3. PLT Scheme
  4. fftw
  5. Jack
  6. libsndfile
  7. liblo
  8. glew
  9. scons (la seule dépendance que j'ai installé via apt-get)


Vous téléchargez les sources de fluxus sur leur site.


Vous n'aurrez pas de problème particulier à compiler et installer ces dépendances sauf peut être pour PLT Scheme ou il faudra rajouter une option au configure.

Aussi pensez à installer qjackctl via apt-get, c'est un GUI pour jack, il vous permettrera de gérer le routage des flux audio en live, et c'est très pratique ^^.

J'ai oublié de le dire aussi, mais Fluxus se code en Scheme (décidement, vive le Lisp !). Vous pouvez chercher des démos sur Youtube y'en a quelques unes mais pas grand chose finalement, de plus c'est pas vraiment connu, perso je pense qu'il faut vraiment être un hardcore coder pour bien tripper avec :)

19 mars 2009

Satelliiiiiiiiite !

J'ai pas pu vraiment poster depuis deux semaines car j'avais des partiels, encore mardi il me reste le partiel d'Algèbre qu'il va falloir que je bosse. On a eu partiel d'Analyse que j'ai raté je pense (faut vraiment que je bosse cette matière, c'est trop dur !! XO

Sinon pour vous donner des nouvelles j'ai finalement un groupe, on est 3 et on bosse sur Fluxus (looool)

Et pour m'aider, le prof m'as mis en contact avec le major L2 MP de l'année dernière, le même que le prof envoie en stage à Google wtffffff !!!! En tout cas il est super sympa et il est super calé :)

Bon je vous laisse j'ai TP de Java :p

15 mars 2009

Problème de connexion client jabber en scheme

J'avais un petit soucis quand a l'établissement de connexion en PLT Scheme pour mon client Jabber. J'avais en parti raison quand à la source du problème, c'était bien la réception de données qui déconnait !

En effet, il faut savoir que a réception avec le listener de Scheme se fait en blocks, ca veut dire que lorsque le serveur me répond quelque chose, et il peut me répondre en plusieurs messages (ou blocks), mon listener ne capture que le premier block, et me le retourne. C'est pourquoi je n'avais que le début du message.

Dans le code suivant, et surtout la fonction la plus en bas, vous verrez comment je contourne le problème. En fait je vais donner une taille en bytes au block, et je vais aller piocher dedans sans modifier ce qu'il y a, jusqu'à avoir un block qui n'est pas rempli de 0 (ou de la quelconque valeur que le listener met en attendant de recevoir quelque chose). Notez que j'utilise la librairie port qui me sert a utiliser peek-string, peek-string va jeter un oeil dans le port-input et me dire ce qu'il y a dedans, sans y modifier le contenu, càd qu'a la différence de read-string par exemple, il ne va pas effacer ce qu'il y a dans le input-port, ce qui est tout bon !

#lang scheme
(require scheme/port)
(require scheme/tcp)
(require xml)

;-------------------------------------
;
; Client Jabber: reseau
;
;-------------------------------------

; c'est bon je parse mieux les données
; il est preferable d'utiliser display que write, car display affiche les données raw sans les parser !
;
;


; serveur jabber au hasard
(define URL "jabber.org")
(define PORT 5222)
(define TAILLEBLOCK 2048) ; taille d'un block en byte



(define (client-test)
(let-values ([(server->me me->server)
(tcp-connect URL PORT)])
;(write "" me->server)
(display "" me->server)
(close-output-port me->server)
(sleep 1) ; optionnel ? car recupServer->me

;reponse du serveur
(let ((reponse (recupServer->me server->me)))
(display reponse)

(close-input-port server->me))))



; recupServer: int -> string
; je récupere les données de [server->me] directement en raw
(define (recupServer->me port)
(let loop ()
(let ([available (peek-string TAILLEBLOCK 0 port)])
(if (null? available) ; on boucle tant que le serveur ne m'as rien renvoyé !
(loop)
(read-string TAILLEBLOCK port)))))


Ainsi, je récupère bien tout ce donc j'ai besoin, et je peux continuer à recevoir de cette manière.

Dbus, dcop et... osascript ?!

En cherchant à modifier mon application réseau Scheme j'ai cherché un équivalent de dcop, enfin dbus sous Leopard, et en suivant cette info, je suis tombé sur osascript, qui permet de dialoguer avec d'autres application suivant la philosophie d'apple (vous savez, l'unification des raccourci des applications et les appels d'applescript). Alors finalement j'ai réécris la partie serveur pour commander iTunes (haéééé la classe xD).
Si vous voulez le code source, faites le moi savoir, que je le mette en ligne pour tout le monde.

11 mars 2009

[Projet PF2] premier soucis !

Mon problème est tout con: je n'arrive pas à récupérer les données que le serveur jabber m'envoie quand j'envoie une requête de connexion :s

vous pourrez voir mon code, simple, je ne parse pas encore l'XML, j'essaye de m'attaquer au nerf de logiciel, la connexion en elle même:

#lang scheme
(require xml)

;-------------------------------------
;
; Client Jabber: reseau
;
;-------------------------------------

; ca marche pas, les données recu sont mal parsées :(
;


; serveur jabber au hasard
(define URL1 "im.apinc.org")
(define URL2 "talk.google.com")
(define PORT 5222)




(define (client-test)
(let-values ([(server->me me->server)
(tcp-connect URL2 PORT)])
(write "" me->server) ; temporaire, histoire de debugger rapidement
(sleep 1) ; pour quand ca lag un peu
(write "" me->server)
(sleep 1)
(close-output-port me->server)
(let ([response (read server->me)])
(display response) (newline) ; c'est la que ca déconne

(close-input-port server->me))))

J'ai bien essayé avec le serveur googletalk et apinc.org, le truc c'est que les deux serveurs ne retournent pas le même message xD

googletalk me retourne: HTTP/1.1
apinc me retourne:
  • Je recois bien toutes les données du serveur mais je n'arrive pas a afficher comme il faut les données envoyées du serveur (avec printf et display), comme c'est du xml, mais en même temps c'est quoi, une string de toute manière ?!
  • Sinon je ne recois même pas la réponse complète, car xmpp permet l'envoie non synchrone des données genre il va m'envoyer un bout, et ensuite il va m'en envoyer un autre. Le problème c'est que par défaut le listener que tcp-connect crée est configuré pour ne récupérer qu'un block de donnée. Peut être que le soucis est là ? j'essayerais de reconfigurer le listener quand j'y penserais !
  • Sinon ben quand je crée un listener en mode serveur et que je m'y connecte, j'essaye de lui envoyer une string, ben le serveur m'affiche bien la string en entier...

    9 mars 2009

    Introduction au protocole Jabber

    Des informations utiles sur comment créer une connexion (stream) client-serveur, et la plupart des commandes que l'on va utiliser pour le projet de PF2.

    Introduction au protocole Jabber

    raccourci clavier de completion avec jde

    Pour la complétion de code avec JDE (sous Emacs), le raccourci est le suivant:
    C-c C-v C-.

    6 mars 2009

    Unimotion pour Processing

    En fouillant sur le web un sujet de projet pour mon option PF2, je suis tombé sur la librairie Unimotion qui permet de récuperer des informations du capteur SMS sur les portables Mac d'Apple et de les réutiliser dans Processing ou n'importe quel application Java (normalement).

    Si vous comptez l'installer, sur mac il faut glisser les deux fichiers
    du dossier library dans /Bibliotheque/Java/Extensions/

    Sur ce site:
    http://www.shiffman.net/p5/sms/

    Vous s'y trouverez les prototypes pour utiliser les fonctions relatives à l'utilisation de cette librairie.



    J'ai fait une petite animation d'une balle qui est soumise a la gravité, et rebondit sur le sol, lorsque vous penchez votre mac vers la gauche, la balle rebondit vers la gauche, vers la droite la balle rebondit vers la droite, vous faites monter le mac, le rebond se fait plus prononcé, par contre j'ai eu la fleme de coder la colision balle-plafond donc ne secouez pas trop votre macbook ou la balle risque de rester scotché au plafond :)

    5 mars 2009

    le monde en 2019

    Mais WTF koi ! Bon maintenant faut pas que je die avant de vivre tout ça !

    >ICI<

    Microsoft sait faire rêver en tout cas :)

    3 mars 2009

    Lightning 101 en français !

    Salut tout le monde,
    je viens de voir que David Hobby a mis en ligne une version française de Lightning 101, qui est une introduction à l'éclairage photo (un must have !).

    dispo ici.

    bientot les partiels

    Bientôt les partiels de mi semestre (semestre 2) vont commencer.
    Lundi j'ai eu un petit partiel d'Analyse qui était pas si dur que ça (on verra les résultats xD), et demain j'ai partiel d'Algèbre, je suis actuellement en train de bosser dessus, omg je pensais avoir compris pas mal de choses mais en fait plus je révise et plus je me rend compte que c'est encore plus vaste que ce que je pensais (Quelle est la forme des vecteurs du sev de R4 engendré par (1, 2, -1, 1 et (2, -1, 0, -1) ? ).
    Enfin bref,
    je finis ça et je vais me coucher, comme on a un prof de TD un peu... (italien) alors les explications sont pas très compréhensible, autre difficulté d'une fac pluriéthnique ! Si je suis prof plus tard je ferais exprès de parler vite et de garder l'accent de Tahiti (hahahahahahaha je lol juste en pensant à la tête des élèves).
    Je dois réviser:
    • affirmer qu'un système est libre ou non et le prouver
    • trouver si une famille de vecteurs forme une base ou génératrice et le prouver
    • trouver des vecteurs dans la famille {(1, 2, 3), (x, y, z), (4, 5, 6)} tel que ça forme une base et le prouver
    • dire si une application linéaire et injective, surjective, et le prouver
    • opérations sur les matrices
    • le noyau et l'image, et les corrolaires sur la dimension et le rang
    Je pense que c'est tout et je ne suis même pas sur que le partiel serra sur ça car ben le prof est italien et on pige pas grand chose.

    -blablabla...assurdo
    -qu'est ce qu'il a dit ?
    -par l'absurde
    -thx thx thx

    Enfin voilàa koi xD