Comment utiliser la librairie SDL dans son programme en langage D?
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...
mardi 18 novembre 2014
jeudi 25 septembre 2014
recherche anti-cancer open-source et au financement collaboratif
Le projet Marilyn tente de recolter des fonds pour relancer la recherche sur une molecule prometteuse contre certaines formes de cancer (peau, sein, rein).
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.
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
X-prize, la fondation(?) qui lance des grandes compétitions façon DARPA mais sans but militaire, s'attaque au problème de l'éducation pour tous:
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.
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"
Un livre en ligne gratuit qui présente (très prochainement) les méthodes de base pour différents problèmes de reconnaissance automatique:
Les chapitres sont ajoutés au fur et à mesure.
A nous les secrets de la dernière technique à la mode dans toutes les grosses boîtes de la silicon valley!
Base de donnee Oracle et XML
Comment faire pour lire un fichier XML a partir d'une procedure stockee dans Oracle 9?
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
Comment creer un fichier XML?
..C'est pas trop complique, en fait, une fois qu'on a ecume internet.
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:
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
sch := 'xmlns:xs="http://www.w3.org/2001/XMLSchema"';
-- enregistre dans Oracle le schema xsd utilise pour verifier les fichiers xml, si on en a un sous la main
-- on donne le nom banal 'fichierxsd' a notre schema
-- le schema est base sur le fichier 'monFichier.xsd' present dans le repertoire accessible par Oracle lie a XMLREP
-- la, il y a une conversion de UTF-8 vers ascii car le ficdhier xsd est en UTF-8 et la base de donnees est en ascii
DBMS_XMLSCHEMA.registerSchema( 'fichierxsd', convert( DBMS_XSLPROCESSOR.read2clob( 'XMLREP', 'monFichier.xsd'), 'US7ASCII', 'AL32UTF8' ), True, False, False, False );
-- on lit le fichier physique 'monFichier.xml' qui doit etre present dans le repertoire lie a XMLREP.
-- les donnees du fichier sont rangees dans un CLOB
-- on convertit les donnees de UTF-8 (le format du fichier) vers ascii us (format des donnees de ma base de donnees) -> pas necessaire si la base de donnee utilise UTF-8 (..ce qui est mieux!)
-- on cree un xmltype avec ces donnees
xt := xmltype( convert( DBMS_XSLPROCESSOR.read2clob('XMLREP','monFichier.xml'), 'US7ASCII', 'AL32UTF8' ) );
xt := xmltype( convert( DBMS_XSLPROCESSOR.read2clob('XMLREP','monFichier.xml'), 'US7ASCII', 'AL32UTF8' ) );
-- si le fichier n'existe pas, il y a une exception!
-- si on veut tester les donnees XML par rapport a un XSD avec un element racine 'Noyau':
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;
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;
-- recupere l'attribut No
ordre_no := xt.extract( '/Noyau/Ordre[1]/@No', sch ).getStringVal();
end;
ordre_no := xt.extract( '/Noyau/Ordre[1]/@No', sch ).getStringVal();
end;
3 - Ecriture d'un fichier xml a partir de donnees de tables
declare
xmlval clob;
tstXsd number;
xt xmltype;
begin
-- on cree une requete a base de xmlelement, xmlattributes et xmlagg
-- xmlagg va ranger a la suite toutes les lignes renvoyees par la requete sql
-- j'utilise des case when pour eviter d'afficher un element si aucun attribut de l'element n'est initialise
SELECT XMLELEMENT("Noyau"
,xmlattributes('02' as "XMLVersion" )
,XMLELEMENT("FileDate", xmlattributes( to_char( sysdate, 'YYYY') as "Y", to_char( sysdate, 'MM') as "M", to_char( sysdate, 'DD') as "D", to_char( sysdate, 'HH24:MI') as "T" ) )
,XMLELEMENT("ListDetails", xmlattributes( 'France' as "OriginID", 'Tahiti' as "DestinationID", ) )
,XMLAGG(
XMLELEMENT( "Ordre", xmlattributes( osta.no as "No")
,case when osta.state is not null then
XMLELEMENT( "Event", xmlattributes( osta.state as "StateCd" )
,XMLELEMENT( "Date", xmlattributes( to_char( osta.evtlcldt, 'YYYY') as "Y", to_char( osta.evtlcldt, 'MM') as "M", to_char( osta.evtlcldt, 'DD') as "D", to_char( osta.evtlcldt, 'HH24:MI') as "T" ) )
) end
)
)).extract('/*').getclobVal()
INTO xmlval
FROM ORDER_STATUS osta;
-- Ecriture du fichier physique
dbms_xslprocessor.clob2file( xmlval, 'XMLREP', 'monFichier.xml', nls_charset_id('AL32UTF8') );
-- verifier que le fichier a bien ete cree
-- et qu'il est valide par rapport au xsd
xt := xmltype( convert( DBMS_XSLPROCESSOR.read2clob( 'XMLREP', 'monFichier.xml' ), 'US7ASCII', 'AL32UTF8' ) );
tstXsd := xt.isSchemaValid( 'fichierxsd', 'Noyau' );
IF tstXsd <> 1 THEN
dbms_output.put_line( 'Erreur: fichier xml non valide!' );
return;
END IF;
end;
et voila!!
Libellés :
base de donnee,
Oracle 9,
pl/sql,
XML,
xsd
jeudi 28 août 2014
petite deception pour les voitures automatiques Google
MIT Review sort une mise au point sur les capacites et limitations des google car.
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!
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!
Libellés :
google,
mit review,
voiture
Inscription à :
Articles (Atom)