jeudi 19 août 2010

commandes de survie linux

Quelques commandes que je dois utiliser de temps en temps mais que je n'arrive pas a garder en memoire:

- se connecter a un ordi distant:
   ssh -Y nom@ordi

- envoyer un fichier vers un autre ordi:
   scp fichier nom@machine:repertoire

- compiler un package avec autoconf..:
   aclocal, libtoolize -c, autoconf, automake -ac, mkdir build, cd build, ../configure , make, make install

- git:
   cloner une repo existante: git clone git+ssh://nom@machine/repertoire
  

A suivre..

mercredi 14 juillet 2010

Imagerie par Resonance Magnetique Functionnelle (fMRI en anglais)

Developing Intelligence fait le point sur les problemes inherents a l'utilisation de fMRI pour les etudes du cerveau:

1- Si 2 groupes different dans l'utilisation de leur cerveau pour une meme tache, cela peut provenir de differences de comportement des 2 groupes.
Ex: les moins ages peuvent requerir une activite dans plus de zones de leur cerveau pour effectuer une tache car ils n'ont pas encore appris a optimiser le processus pour la tache en question. Les zones du cerveau ont la meme fonction dans tous les groupes mais c'est seulement le processus pour realiser la tache qui n'utilise pas les memes ressources.

2- considerer l'influence du scanner sur le comportement des patients! Le fMRI est une grosse machine reduisant considerablement les mouvements (a eviter pour les claustrophobes) et faisant un bruit metallique sourd periodiquement.

3- comment trouver une reference commune a 2 groupes pour evaluer les differences dans l'execution d'une tache? Afin de pallier aux problemes precedents, on utilise une tache de base commune aux 2 groupes et verifie les differences d'activite entre la tache de base et la tache mesuree dans chaque groupe. Le probleme toutefois est de mesurer les differences dans l'execution de la tache de base entre les 2 groupes.

4- Le probleme de l'inhibition d'une zone qui est necessairee pour l'accomplissement d'une tache mais qui n'est pas prise en compte forcement dans les mesures d'activite.

algebre lineaire

Definitions simples, voire un peu d'intuition pour quelques termes d'algebre lineaire..

- eigenvalue, eigenvector, eigenspace (valeur propre, vecteur propre, espace? propre), d'apres Wikipedia:
Une matrice peut agir sur un vecteur en changeant sa longueur et direction. Toutefois pour certains vecteurs, la matrice ne changera que leur longueur. Ces vecteurs sont les vecteurs propres de la matrice.
Le facteur qui multiplie la longueur initiale du vecteur propre est appele la valeur propre associee.
Tous les vecteurs propres qui ont la meme valeur propre + le vecteur nul forment l'espace(?) propre.
matrice M, vecteur v, variable l  -->  Mv = lv

- trace d'une matrice:
somme des elements de la diagonale principale (haut gauche vers bas droite) de la matrice.

a suivre...

mercredi 7 juillet 2010

Changement de repere 3D

Voici les sources d'un petit programme pour calculer les coordonnees
d'un point 3D d'un systeme de coordonnee a un autre:

// a: double[3]: angles de rotation du 2eme repere par rapport au premier
// t: double[3]: translation du 2eme repere par rapport au premier
// p: double[3]: coordonnees du point
// repereMonde: repere dans lequel les coordonnees du point sont
exprimees = true -> repere monde, false -> 2eme repere
// np: double[3]: coordonnees calculees (output)


void ccs( double *a, double *t, double *p, bool repereMonde, double *np )
{
// calcul la matrice de transformation
double mat[16];
double cax = cos ( a[0] );
double cay = cos ( a[1] );
double caz = cos ( a[2] );
double sax = sin ( a[0] );
double say = sin ( a[1] );
double saz = sin ( a[2] );

// matrice est calculee facon OpenGL..
mat[0] = caz * cay;
mat[1] = saz * cay;
mat[2] = -say;
mat[3] = 0;

mat[4] = caz*say*sax-saz*cax;
mat[5] = saz*say*sax+caz*cax;
mat[6] = cay*sax;
mat[7] = 0;

mat[8] = caz*say*cax+saz*sax;
mat[9] = saz*say*cax-caz*sax;
mat[10] = cay * cax;
mat[11] = 0;

mat[12] = t[0];
mat[13] = t[1];
mat[14] = t[2];
mat[15] = 1;

if( repereMonde ) {
double tnp[3];
tnp[0] = p[0]-mat[12];
tnp[1] = p[1]-mat[13];
tnp[2] = p[2]-mat[14];
np[0] = mat[0]*tnp[0] + mat[1]*tnp[1] + mat[2]*tnp[2];
np[1] = mat[4]*tnp[0] + mat[5]*tnp[1] + mat[6]*tnp[2];
np[2] = mat[8]*tnp[0] + mat[9]*tnp[1] + mat[10]*tnp[2];
} else {
np[0] = mat[0]*p[0] + mat[4]*p[1] + mat[8]*p[2] + mat[12];
np[1] = mat[1]*p[0] + mat[5]*p[1] + mat[9]*p[2] + mat[13];
np[2] = mat[2]*p[0] + mat[6]*p[1] + mat[10]*p[2] + mat[14];
}
}

Je n'ai fait que quelques tests basiques donc il n'est pas impossible
qu'il y ait des erreurs planquees.

Attention: Il y a des problemes de precision donc il vaut mieux eviter
de faire beaucoup de transformations a la suite.

lundi 15 mars 2010

Problemes de compilation obscurs en C++

quand le compilateur me donne A, entre autres, le probleme vient de B (parfois! ..ca peut venir d'autres choses aussi) et se corrige par C

________________

A:
ios_base.h:782: error: ‘std::ios_base& std::ios_base::operator=(const std::ios_base&)’ is private

B:
std::stringstream a,b;
...
a = b;

C:
a.str( b.str() );
________________


mercredi 17 février 2010

mes premiers pas blender


mes premieres questions tres basiques resolues pour blender 2.49b:

- un clic droit sur une des separation entre les vues (ligne rouge) permet de rajouter une vue (split area) ou de les fusionner.

- l'icone entoure (cercle rouge) permet de selectionner la nature de la vue: vue 3D, proprietes de l'objet, timeline, etc.

- donner a la main la position et orientation d'un objet se fait en "object mode" apres l'avoir selectionne. menu "transform properties" egalement accessible par la touche N.
Position et orientation sont definies pour le point rose considere comme le centre de l'objet. Il est parfois decale donc on peut le remettre au centre de l'objet par le menu Object->Transform->Center new

- grouper les objets en un seul: selectionner tous les objets avec shift+click gauche dans le menu "outliner" (la colonne a gauche dans l'image) et faire Ctrl+J, confirmer. Attention: ca va merger les proprietes material si il y en a trop (>5, il me semble)!

- on peut grouper les objets selectionnes en faisant "make parent" (Ctrl+P) pour qu'ils apparaissent en un element dans l'outliner.
La, il n'y a pas de problemes de material merge mais les objets sont consideres independants. L'avantage, c'est qu'ils sont plus facile a selectionner en selectionnant le parent et en faisant (Shift+G,1) equivalent a Select->Grouped->children.

- on peut placer des objets selectionnes dans differents layers, ca influe sur leur visibilite.
selectionne un ou des objets, appuyer sur M, choisir l'un des 20 layer.
on peut voir les differents layer en appuyant sur les touches numerotees du clavier principal (..PAS le pave numerique!) pour les 10 premieres, ALT+numero pour les 10 suivantes.
En appuyant sur SHIFT+num, on peut voir plusieurs layers a la fois.

- La selection des objets peut se faire dans la vue de la scene en appuyant sur le bouton B et en dessinant un rectangle comprenant tous les objets a grouper.

- placer la camera a la position de vue actuelle: Ctrl+Alt+0 (..numpad!)

- renommer un objet dans la "outliner view": Ctrl+cliquer sur l'objet a renommer

- rendre un objet transparent: selectionner un objet, voir le menu "shading" (F5), ajouter un "material", mettre la valeur A inferieure a 1, aller sur le tab "mirror transp" et activer "ray transp"

mardi 26 janvier 2010

MDP

MDP : Markov Decision Process -> processus de decision markovien

formule le probleme de trouver de facon sequentielle la meilleure decision a prendre en fonction de l'etat actuel du systeme et les actions possibles.

Le MDP requiert un environnement completement observable: le systeme connait l'etat ou il est parfaitement!
Il y a une incertitude sur l'effet des actions.

Il est compose de:
- etat initial
- ensemble de transitions entre les etats. la valeur des transitions depend seulement de l'etat courant, pas de l'historique!
- une fonction recompense qui depend d'un etat.

Le but est de trouver quelles actions faire en fonction de l'etat courant, des actions possibles, des probabilites de resultats possibles et des gains possibles.

La decision de choisir l'action a faire en fonction de l'etat actuel est appele la politique.

C'est plutot adapte pour les systemes et environnements stables, c.a.d qui ne changent pas au cours du temps ou des interactions..

voir l'article Wikipedia.

lundi 18 janvier 2010

probleme LaTeX

Commencons par l'installation de LaTex:
     sudo apt-get install texlive-full

Un petit message pour repertorier tous les petits problemes fournis par LaTeX durant l'ecriture d'articles de recherche ou redaction de these (en utilisant ce template)..
1) message d'erreur:  
... can be used only in preamble.
solution: mettre la commande designee avant l'instruction \begin{document}
2) message d'erreur:  
... .File 'nomencl.sty' not found
solution: installer le package texlive-latex-extra -> sudo apt-get install texlive-latex-extra
( ..si texlive-full n'avait pas ete installe avant..)

lundi 4 janvier 2010

probleme Kile (Ubuntu 8.04 H)

probleme:
- lancement de kile 2
- une fenetre popup affichant une erreur en rapport avec dcopserver, le rectangle kile 2, puis un autre popup d'erreur "Malformed URL"
- puis l'application se ferme toute seule

solution trouvees qui n'ont pas marche pour moi:
- le changement des permissions du repertoire /home/$USER/.kde -> chown -R $USER:$USER /home/$USER/.kde
- reinstaller kile

Ce que j'ai fais:
- lancer dcopserver manuellement -> retire la premiere popup d'erreur mais pas la deuxieme!
- virer les fichiers de configurations relatifs a kile dans .kde -> une autre erreur est apparue quand on lance depuis le terminal "kile: ERROR: : couldn't create slave : Cannot talk to klauncher"

Ce qui a marche (apres avoir fait les 2 actions au dessus.. mais ca marche peut etre tout seul)
- lancer dans le terminal: dcopserver_shutdown
- puis: kdeinit

.. et kile redemarre! ..avec des messages d'erreur dans le terminal mais ca a l'air de marcher..