mercredi 9 août 2017
IA selon Marvin Minsky
DeepMind - Blizzard : IA pour Starcraft II
jeudi 28 avril 2016
Open AI sort ses premiers travaux
jeudi 17 décembre 2015
AGI: geometric intelligence
MIT technology review fait un article sur Gary Marcus et la boite qu'il vient de fonder, Geometric Intelligence.
Il prone une AI basee sur des algos plus proches du fonctionnement du cerveau humain. En particulier, une maniere d'acquerir des regles generales a partir d'un nombre reduit d'exemples.
En comparaison, un reseau de neurones type deep learning va avoir besoin d'entre quelques centaines a plusieurs millions d'exemples afin de decouvrir le fonctionnement qu'on lui demande d'atteindre.
Ca semble etre l'approche pronee aussi par bon nombre de chercheurs dans le domaine de l'AGI (Artificial General Intelligence). Certains presentent des architectures conceptuelles assez elaboree mais il manque les details pratiques de conception ainsi que des demonstrations des capacites reelles.
Geometric Intelligence a l'air d'avoir deja des resultats pratiques donc j'espere qu'ils sortiront des demonstrations de leur technologie bientot!
mardi 15 décembre 2015
Le deep learning pour tous
- Caffe, de l'univeriste de Berkeley, USA, etait deja la depuis un bout de temps
- Theano a egalement une bonne longueur d'avance
- il y a presque un an, Facebook filait un module deep learning pour le framework Torch
- Brainstorm, de l'institut IDSIA, Suisse, est arrive sur Github il y a quelques mois
- MxNet, du groupe DMLC, s'est pointe dans ces eaux la aussi, je crois...
- quelques semaines apres, Google file son TensorFlow
- il y a quelques jours, la creation d'OpenAI, une organisation dediee a la recherche et le partage (gratuit!) de travaux en IA (ils n'ont encore rien sorti mais elle contient deja pas mal d'experts dans le domaine apparemment)
- et maintenant, Facebook ouvre le design de Big Sur, son matos hardware specialise pour le deep learning
... et il me semble qu'il y avait encore d'autres annonces de ce style ces derniers mois...
C'est le moment de se remettre au Python et/ou de ressortir le C++! ...et de trouver une idee geniale d'application qui aille au dela des domaines usuels.
Pour s'initier au domaine, il y a quelques cours bien faits et gratuits sur le net, dont celui sur les reseaux de neurones sur Coursera, et puis les tutoriaux qui viennent avec certains de ces frameworks.
Pour l'instant, d'apres les echos du net, MxNet semble etre le plus interessant (et surtout, rapide!).
jeudi 9 juillet 2015
la désillusion du loto
Le retour de la vengeance des robots compagnons: buddy
vendredi 22 mai 2015
un ordinateur à 9$
vendredi 24 avril 2015
bande annonce ICRA 2015
jeudi 23 avril 2015
Technique de log .NET C#: TraceSource et FileLogTraceListener
La classe TraceSource nous donne accès à quelques méthodes et constantes pour enregistrer plusieurs types d'informations de côté. Ces informations peuvent être filtrées et récupérées par des Listener qui peuvent les afficher dans des consoles ou les enregistrer dans des fichiers.
FileLogTraceListener range les infos qu'on lui dis de récupérer dans un ou plusieurs fichiers en fonction de la date ou divers autres paramètres.
Dans mon code source .cs:
using System.Diagnostics;
using Microsoft.VisualBasic.Logging;
...
class Program{
// défini un TraceSource avec un nom spécifique
static TraceSource tracer = new TraceSource( "mesTraces" );
static void Main( string[] args ) {
int idTrace = Process.GetCurrentProcess().Id;
// change le nom de base du fichier de log utilisé pour les traces
var ecouteurs = tracer.Listeners; // récupère la liste des listeners liés à mon TraceSource
for( int i=0; i<ecouteurs.Count; i++ ) {
try{
var ecout = (FileLogTraceListener)ecouteurs[i];
ecout.BaseFileName = "TestTraces-"+ args[1]; // le nom du fichier log généré sera du type TestTraces-<nom donné en argument d'entrée>-<date du jour>
break;
}catch( Exception e ){}
}
...
tracer.TraceEvent( TraceEventType.Information, idTrace, "infos blabla" );
...
tracer.TraceEvent( TraceEventType.Warning, idTrace, "Attention!" );
...
tracer.TraceEvent( TraceEventType.Error, idTrace, "Gros Problème!" );
...
tracer.Close();
}
}
Bref, pas trop de trucs compliqués à gérer dans le code!
- on ajoute les using qui correspondent
- on définit et initialise un TraceSource
- optionnellement, on peut modifier le nom de base du fichier crée par les listeners lié au TraceSource
- on logge les infomations que l'on veut avec la fonction TraceEvent qui nous permet d'indiquer le type d'informations (voir les Trace Event Type), un entier que l'on peut utiliser comme on veut, et notre message
- on ferme le Tracer quand on en a plus besoin
La gestion des infos loggées peut se faire dans le code source directement, mais j'ai préféré mettre tout ca dans le fichier de configuration de façon à pouvoir modifier le comportement sans avoir à tout recompiler.
Dans mon app.config:
<system.diagnostics>
<!-- switchValue= Off, Error, Warning, Info, Verbose -->
<sources>
<source name="mesTraces" switchType="System.Diagnostics.SourceSwitch" switchValue="Verbose">
<listeners>
<add name="ecouteurFileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
Location="ExecutableDirectory"
logFileCreationSchedule="Daily"
baseFileName="ListingPrint"
traceOutputOptions="Timestamp" />
<remove name="Default" />
</listeners>
</source>
</sources>
</system.diagnostics>
La, c'est un peu plus verbeux..
- dans la définition de la source, on indique le nom du TraceSource à regarder = le nom donné à ton TraceSource dans le code source.
- switchValue permet de dire quelles informations vont être sauvegardées dans le fichier. Off: on ne met rien, Verbose: on met tout, ...
- on peut ajouter plusieurs listeners par source pour avoir plusieurs fichiers de log différents ou pour afficher aussi les logs à l'écran...
- mon FileLogTraceListener a un type qui est long à définir.. mais il faut tout ca sinon on a des problèmes à l'exécution!
- quelques paramètres à donner au listener (voir la page MSDN pour plus de détails). A noter que les dates et heures récupérées avec les options traceOutputOptions DateTime et Timestamp sont UTC, pas locales! ...et ca ne se configure pas..
- de base, FileLogTraceListener ajoute la date du jour au nom de fichier de log généré!
Bon, ca n'est pas parfait:
- les infos rajoutées à chaque ligne du fichier log sont dans un ordre défini:
nom du traceSource, id, type de message, message, traceOutputOptions
si tu veux mettre la date au début ou virer le nom du traceSource, tant pis!
- les dates/heures du traceOutputOptions sont en UTC! Donc vive le calcul mental, ou alors tu laisses tomber le traceOutputOptions et tu intègres la date locale dans chacun de tes messages (surcharges des fonctions traceEvent, ...)
Après, rien ne nous empêche de créer notre propre listener selon nos envies.
Premier pas en robotique pour les tout petits
J'entends parler seulement maintenant de kinder lab robotics qui propose des kits jouets robotique pour les tout petits.
Ils proposent des sets de pièces en bois/plastique/électronique qui s'emboitent facilement pour créer un robot mobile (ou pas).
Le comportement du robot se programme en assemblant des gros cubes: pas besoin de savoir lire pour créer le programme!
Les tout petits peuvent s'initier avec ce kit et, en grandissant, continuer la programmation avec Scratch, ou la robotique avec Lego Mindstorms.
mardi 18 novembre 2014
langage D et SDL
Ca m'a pris des efforts et de la sueur donc je sauvegarde les etapes, de l'installation des outils jusqu'a la compilation d'un exemple, pour des futures references.
Pour ce projet, j'utilise Debian 6 sur un eeepc 901.
A voir:
- le langage D : http://dlang.org/download.html
- la librairie SDL : http://www.libsdl.org/
- le 'package' Derelict : http://dblog.aldacron.net/derelict-help/using-derelict/
Les etapes:
1 - creer le repertoire ou on range tout (dans mon cas: /home/user/tetorea/DerelictOrg):
cd
mkdir DerelictOrg
cd DerelictOrg
2 - installer le compilateur D
voir la page http://dlang.org/download.html pour les details
Dans mon cas, Debian sur eeepc 901, il a suffit de telecharger et lancer le fichier dmd_2.066.1-0_i386.deb avec:
sudo dpkg -i dmd_2.066.1-0_i386.deb
3 - installer SDL2
telecharger le code source : http://www.libsdl.org/download-2.0.php
dans mon cas : http://www.libsdl.org/release/SDL2-2.0.3.zip
decompresser dans le repertoire DerelictOrg
compiler et installer
cd SDL2-2.0.3
./configure
make
sudo make install
4 - installer dub
on en a besoin pour compiler les packages suivants!
j'ai recupere sur cette page http://code.dlang.org/download, le fichier :
http://code.dlang.org/files/dub-0.9.22-linux-x86.tar.gz
decompresse et copie dans le repertoire /usr/bin
5 - installer DerelictSDL2
DerelictSDL2 fait partie de la repository DerelictOrg sur Github. On a egalement besoin de DerelictUtil pour installer DerelictSDL2!
Pour installer tout ca, on a besoin de recuperer les sources en passant par git (pour installer git: sudo apt-get install git).
Dans le repertoire DerelictOrg:
git clone https://github.com/DerelictOrg/DerelictUtil.git
git clone https://github.com/DerelictOrg/DerelictSDL2.git
cd DerelictUtil
dub build
cd ../DerelictSDL2
dub build
6 - on peut programmer en D avec SDL2 !
Copier le texte suivant dans un fichier test.d, dans le repertoire DerelictOrg :
--------------------------------------
import std.stdio;
import std.conv;
import derelict.sdl2.sdl;
void main()
{
DerelictSDL2.load();
if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
writeln( "SDL could not initialize! SDL_Error: "~ to!string( SDL_GetError() ) );
return;
}
SDL_Window *sdlWindow;
SDL_Renderer *sdlRenderer;
SDL_CreateWindowAndRenderer( 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP, &sdlWindow, &sdlRenderer );
SDL_SetRenderDrawColor( sdlRenderer, 0, 100, 0, 255 );
SDL_RenderClear( sdlRenderer );
SDL_RenderPresent( sdlRenderer );
SDL_Delay( 2000 );
SDL_DestroyWindow( sdlWindow );
SDL_Quit();
}
--------------------------------------
Ca se contente d'afficher un ecran vert pendant 2 secondes avant de quitter.
Copier le texte suivant dans un fichier Makefile, dans le repertoire DerelictOrg :
--------------------------------------
test: test.d
dmd test.d -IDerelictSDL2/source/ -IDerelictUtil/source/ -LDerelictSDL2/lib/libDerelictSDL2.a -LDerelictUtil/lib/libDerelictUtil.a -L-ldl
--------------------------------------
et on tape:
make
./test
Il n'y a plus qu'a jouer avec SDL et D...
jeudi 25 septembre 2014
recherche anti-cancer open-source et au financement collaboratif
Les fonds seront utilises pour tester la molecule sur des souris de laboratoire, premiere etape obligatoire avant des tests sur humains.
C'est l'occasion de s'acheter des objets, bijoux et/ou vetement "science-style" tout en particiapant a la recherche scientifique.
X-Prize spécial apprentissage global
http://learning.xprize.org/
Tout le monde peut s'inscrire pour tenter de développer le nec plus ultra des solutions logicielles open source qui va permettre à n'importe quel enfant d'apprendre à lire, écrire et compter tout seul au moyen d'une tablette!
En fouillant un peu dans le site, le programme semble viser d'abord l'enseignement de l'anglais MAIS il est dis qu'il doit quand même pouvoir s'adapter à l'enseignement d'une autre langue.
On peut participer en solo ou en groupe, il suffit de s'inscrire avant le 31/03/2015 en remplissant un formulaire et en payant les 500 $ de frais d'inscription.
vendredi 29 août 2014
Apprendre les réseaux de neurones et le "deep learning"
Base de donnee Oracle et XML
1 - Un peu de preparation
(on considere que l'on range nos fichiers a lire et a ecrire dans le repertoire /home/user/xml)
- bien evidemment, il faut donner les droits de lecture et ecriture pour ce repertoire a l'utilisateur qui va lancer les procedures. Si on file les droits a tout le monde:
sudo chmod 777 /home/user/xml
- il faut declarer a Oracle que l'on va utiliser un repertoire physique sur le disque du serveur. Pour se faire, on exécute une commande pl/sql:
CREATE OR REPLACE DIRECTORY XMLREP AS '/home/user/xml';
- le package XML DB est bien installe dans Oracle?
lancer la requete:
SELECT * FROM ALL_USERS;
et verifier que l'utilisateur XDB est bien dans la liste
2 - Lecture d'un fichier XML physique
exemple de script qui fait un peu de tout:
declare
sch varchar2(200);
xt xmltype;
ordre_no varchar2(35);
tst_sch number;
begin
-- un schema de base, il en faut au moins un pour la lecture des elements
xt := xmltype( convert( DBMS_XSLPROCESSOR.read2clob('XMLREP','monFichier.xml'), 'US7ASCII', 'AL32UTF8' ) );
tst_sch := xt.isSchemaValid( 'fichierxsd', 'Noyau' );
IF tst_sch <> 1 THEN
dbms_output.put_line( 'fichier xml ne correspond pas au schema voulu!' );
return;
END IF;
-- test si il y a l'element voulu dans le fichier XML:
IF xt.existsNode( '/Noyau/Ordre[1]' ) = 0 THEN
dbms_output.put_line( 'xml ne contient pas ordre!' );
return;
END IF;
ordre_no := xt.extract( '/Noyau/Ordre[1]/@No', sch ).getStringVal();
end;
jeudi 28 août 2014
petite deception pour les voitures automatiques Google
Alors que je pensais qu'on etait bon pour se la couler douce en voiture dans les bouchons dans quelques annees, il reste plusieurs challenges a surmonter avant de pouvoir lacher le volant en tout quietude.
- Pour l'instant, les voitures gerent assez mal les routes inconnues: elles roulent surtout sur des routes prealablement mappees avec des indications claires concernant les panneaux, les feux et le marquage au sol.
- Il n'y a pas d'interpretations des objets autour: si un policier fait la circulation, il est evite mais ces indications sont ignorees.
- Un nid de poule ou un trou sur la route? Et bam, tes roues, amortisseurs, voire meme ta carrosserie!
- De la neige, de l'eau, ou une cargaison de noisettes eparpillee sur la route? Ca va serieusement fausser la detection des limites de la route et il reste a gerer la vitesse en fonction des conditions de la route.
...
Un commentateur precise, a juste titre, qu'une reelle automatisation complete de la conduite necessite une intelligence artificielle tres proche de l'humain afin de gerer de facon efficace tous les cas qui pourraient se presenter.
La, on explose les deadline..
Bref, il y a du boulot!
Rien qui ne soit pas surmontable par une equipe d'ingenieurs/chercheurs/techniciens/creatifs, mais ca va repousser de quelques annees leur sortie et leur adoption publique.
Le boss du projet chez Google se donne 5 ans, rendez vous dans 10!
...meme la, la voiture sera probablement encore au stade semi-automatique: interdiction de se regarder un film dans les bouchons!
vendredi 6 juillet 2012
Installer Windows XP sur un ordinateur sous Ubuntu
Comment installer Windows XP sur une partition de mon ordinateur sous Ubuntu (12.04) a partir d'un fichier .iso?
La solution vient de : http://superuser.com/questions/99478/make-a-bootable-usb-to-install-windows-xp-from-linux1) on installe VirtualBox:
sudo apt-get install virtualbox
2) on donne l'acces au disque dur (sur ma machine, /dev/sda3) pour VirtualBox:
VBoxManage internalcommands createrawvmdk -filename ~/hdd.vmdk -rawdisk /dev/sda -partitions 3
En cas de message d'erreur, on ajoute les droits
sudo adduser `whoami` disk
sudo chown 666 /dev/sda*
3) on lance VirtualBox
4) ajout d'un nouveau systeme.
Pour le disque dur, on selectionne le fichier ~/hdd.vmdk
Pour le cdrom, on indique le fichier .iso contenant l'image du DVD d'installation de Windows XP
5) Demarre la machine virtuelle sous VirtualBox: appui sur une touche pour lancer l'installation sur la premiere partition du premier disque dur. Ca va ecraser tout ce qu'il y a dessus!!
6) croiser les doigts..
7) quitter VirtualBox
8) mettre a jour le "demarreur" pour pouvoir booter linux egalement (Si pas ecrase par Windows!):
9) redemarrer l'ordinateursudo update-grub
sudo grub-install /dev/sda
jeudi 5 janvier 2012
utiliser un clavier usb externe sur macbook pro
La reconnaissance guidee de macos ne me sort qu'un clavier ISO europeen standard dont les 3/4 des touches ne correspondent pas.
Pour s'en sortir, recuperer Ukelele, un logiciel qui permet de definir les caracteres relatifs aux touches (a part quelques touches systemes).
- Ouvrir le keyboard layout fourni "logitech french", verifier que toutes les touches sont correctement definies et sauvegarder le fichier layout (ou bundle).
- Placer le fichier sauvegarde dans Macintosh HD/Bibliotheque/Keyboard Layouts/ ou dans Macintosh HD/Systeme/Bibliotheque/Keyboard Layouts/
- Redemarrer la machine
- Dans l'application Preferences Systemes, aller dans "Langue et texte", onglet "Methodes de saisie", selectionner la methode "Logitech french" (ou le nom que vous lui avez donne) et activer l'option "afficher le menu Saisie dans la barre des menus".
- cliquer sur le petit clavier en haut a droite dans la barre des menus et selectionner le clavier a utiliser!
Verifie ton code C/C++ avec valgrind
Heureusement, le petit utilitaire Valgrind est la pour nous sauver (sous Linux ou Mac)!
L'installation est simple:
- on recupere les dernieres soures ici
- on extrait les fichiers
- on va dans le repertoire cree
- depuis le terminal, on tape "./configure", puis "make", et enfin "sudo make install"
on verifie que tout marche bien en tapant un petit "valgrind ls -l"
Pour tester son programme, que l'on lance d'habitude comme ceci: "./mon_prog arg1 arg2"
il faut s'assurer que l'on a compile avec l'option -g, Ex: "gcc -o mon_prog -g mon_prog.c"
Le test se fait en lancant une commande du genre: "valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes ./mon_prog arg1 arg2"
Remarque: sous macos 10.6 au moins, un printf() (voire d'autres fonctions utilisant stout) dans le code va allouer une zone memoire qui ne sera pas liberee en sortie explicitement par le programme (Ca sera purge par l'OS normalement!).
On se retrouve avec un message sous Valgrind du style:
4,096 bytes in 1 blocks are still reachable in loss record 2 of 2
at 0x100012679: malloc (vg_replace_malloc.c:266)
by 0x10006FF4D: __smakebuf (in /usr/lib/libSystem.B.dylib)
by 0x10006FEB9: __swsetup (in /usr/lib/libSystem.B.dylib)
by 0x10002CC13: __vfprintf (in /usr/lib/libSystem.B.dylib)
by 0x10006FE0A: vfprintf_l (in /usr/lib/libSystem.B.dylib)
by 0x10009D482: printf (in /usr/lib/libSystem.B.dylib)
by 0x10000224C: main (mon_prog.c:547)
Pas besoin de s'en occuper!
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 4,096 bytes in 1 blocks
Si ca derange, on peut fermer a la main stdout avec un petit: fclose( stdout );
..en esperant qu'il n'y ait pas de fonction executee a la terminaison ( atexit() ) qui utilise stdout..
mercredi 2 février 2011
Google Art Project - Visite virtuelle de musee
La navigation se fait facon Google Street View donc ca n'est pas tres fluide mais on s'en fout un peu en fait.. du moment qu'on a l'apercu de la piece sous differents angles avec des gros plans des decors et peintures, ca nous permet de voir des details que l'on ne peut apercevoir en tant que simple visiteur.
Communication des neurones du cerveau par champs electro-magnetique faibles
Actuellement, la communication entre les neurones est principalement consideree comme etant effectuee en passant par les synapses (..il faut aussi garder a l'esprit le role des cellules gliales ou des communications chimiques hors synapses).
Costas Anastassiou et ses collegues montrent que les ondes electro-magnetiques engendrees par les neurones peuvent etre recues et utilisees par d'autres neurones pour s'activer.
Des champs d'1mV/mm semblent suffisant pour influencer un neurone.
Ca promet de remettre en question beaucoup de modele de traitement de l'information dans le cerveau!
Ca pose egalement la question de l'influence de champs exterieurs sur le cerveau.
Voir l'article "Ephaptic coupling of cortical neurons" dans Nature Neuroscience du 16 janvier.
mardi 25 janvier 2011
main robotique DLR
Cette technologie provient de l'institut DLR, en Allemagne, qui produit un certain nombres de travaux impressionnants: Justin, locomotion bipede...
Les doigts sont articules par un systeme de tendons dont l'elasticite peut etre modifiee.
Cette nouvelle main semble surpasser la "shadow hand" de Shadow Robot Company. Les muscles pneumatiques sont moins facilement parametrisables que la main du DLR.
lundi 17 janvier 2011
Le boulot de google pour traduire la poesie
Voir le blog post et le papier correspondant, presente a la conference EMNLP!
Voir aussi les autres boulots presentes par Google a cette conference.
Dans le domaine du traitement du langage naturel, il faut noter le systeme Watson de IBM qui est capable de jouer au Jeopardy!
Mise a jour: la video de sa performance est sortie!
jeudi 19 août 2010
commandes de survie linux
- 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
- 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)
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
- 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
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++
mercredi 17 février 2010
mes premiers pas blender
mes premieres questions tres basiques resolues pour blender 2.49b:
- 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.
- 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
lundi 18 janvier 2010
probleme 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:solution: installer le package texlive-latex-extra -> sudo apt-get install texlive-latex-extra... .File 'nomencl.sty' not found( ..si texlive-full n'avait pas ete installe avant..)
lundi 4 janvier 2010
probleme Kile (Ubuntu 8.04 H)
- 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..
jeudi 28 mai 2009
des jeux pour stimuler le cerveau
Siri, assistant virtuel intelligent
D'apres l'article, Siri est capable de comprendre une requete en language naturel et trouver les reponses sur internet: guider quelqu'un vers le magasin voulu, reserver les tickets pour un voyage, etc.
L'application devrait etre disponible en fin d'annee.
jeudi 2 avril 2009
l'algorithme qui decouvre des lois physiques
Le programme cree par Michael Schmidt and Hod Lipson, de la Cornell University, a pu trouver des lois de mouvement pour des systemes physiques dynamiques non lineaires.
Le plus interessant est qu'il peut ensuite utiliser ces lois de base pour tenter de trouver des lois plus complexes.
La NSF (National Science Foundation) a un article de presse avec plus de commentaires!
mercredi 1 avril 2009
A la surface d'un trou noir
Bien evidemment, cela reste une supposition et ce qui se passe a l'interieur du trou noir est encore completement inconnu.
lundi 16 mars 2009
Humanoid Robotics Project
Destine au marche du loisir, HRP-4C prend la forme, le visage et le poids d'une japonaise moyenne: 1m58 pour 43 kg.
La voici en premier plan sur la photo, a cote d'HRP-3 (blanc) et HRP-2 au fond.
"Elle" peut marcher de facon plus naturelle qu'HRP-2, peut bouger les bras, les levres, les paupieres et les yeux. Elle peut egalement parler et est dotee d'une reconnaissance vocale (..qui marche mieux quand il n'y a pas trop de bruit autour).
Le visage vient de la societe kokoro qui a deja produit plusieurs humanoides a forme humaine. Personnellement je trouve les visages fait par Hanson robotics un peu mieux faits mais ils sont peut etre plus compliques a animer..
Des videos de presentation sont accessibles sur le site de l'AIST.
Je n'arrive pas a les regarder depuis Ubuntu donc je me suis rabattu sur les quelques unes disponibles sur youtube.
dimanche 15 mars 2009
Illusions tactiles
lundi 9 mars 2009
comprendre le langage naturel
La plus part des programmes arrivent a compenser les erreurs d'orthographe sur les mots courants, les fautes de grammaire sont plus compliquees a gerer mais cela s'arrange egalement.
Par contre, le tres gros challenge qui reste a relever en Intelligence Artificielle est le fait qu'un mot peut avoir plusieurs sens suivant le contexte de la phrase, voire meme l'actualite.
C'est ce qui fait encore defaut aux traducteurs automatiques de nos jours.
Wolfram, createur du logiciel Mathematica et auteur du bouquin "A New Kind of Science" (disponible gratuitement sur le site), s'est apparemment lance dans ce creneau et projette dans 2 mois de sortir un moteur de "connaissance" sur internet: Wolfram|Alpha (..en attente).
Un serieux concurrent a Google!
J'espere que ca n'est pas que du marketing..
Si cela se revele efficace, ca ouvrirait peut etre une voie interessante vers une Intelligence Artificielle Generale (AGI en anglais) et vers la resolution du prix Loebner (..implementant le test de Turing).
Futura-sciences a fait un article un peu plus fourni!
Nova Spivack a pu jouer un peu avec le systeme et donne ses impressions.
A noter 2 acteurs jouant dans la meme cour, l'avenir dira qui a la meilleure technologie:
- START, provenant d'un labo du MIT
- True Knowledge, une boite anglaise