samedi 21 août 2010

Silicode Valley, la ou ça parle de startups, de géo-localisation, d'événements et de conférences Hi-Tech mondiales...

Je me suis lancé il n'y a pas si longtemps de cela dans la création d'une nouvelle vitrine sur le net. Je me souviens avoir trouvé le nom alors que je je faisais le pont entre ma cuisine et mon laptop ! il fallait d'un coté surveiller la casserole que j'avais mis sur le feu pour éviter que ça ne crame et d'un autre coté suivre et être au taquet sur ce qui se déroulait du coté de San Francisco à l'occasion de la f8 conférence de facebook ^^ ! Je me souviens avoir trouvé le nom assez original pour ce que je voulais créer !


Au départ en créant silicode valley je pensais mettre en place un site à travers lequel je pouvais facilement véhiculer des news , des news sur tout ce qui touche au monde des startups , du « branding » (comme aime l'appelé nos amis US) en parlant de tout ce qui se prépare dans le monde comme événements et conférences à grande échelle. Je m’intéressais particulièrement à ce qui se préparait de l'autre coté de l'atlantique, et plus précisément sur la cote Ouest Americaine. Tout cela avait donné naissance à la rubrique "News". Mais vu que je reste aussi un gros geek (Je l'assume parfaitement en tout cas ^^) je bossais sur pas mal de projet web, je trouvais toujours du plaisir à expérimenter toutes les nouvelles APIs mise en lignes, tout ce qui touche le web 2.0, le real time web, le geo-localization m'intéressais fortement . je prenais énormément de plaisir à coder, tester, mettre en place de nouvelles technos/ techniques et cela m'a en quelques sorte fait réfléchir sur tout ce que silicode valley pouvait bien contenir.

Je trouvais que le fait de se limiter seulement aux news me faisait jouer un rôle qui n'était pas le mien celui de journaliste, blogueur alors qu'avant toute chose c'était surtout la technique qui me passionnait vraiment, j'ai vite compris alors que silicode valley devait aussi contenir du code et tout ce que je réalisais au cours de chacun de ces folie qui me prenait à chaque fois que je lisais un tweet ou des articles sur la sortie d’une nouvelle techno.

Oula, je vois que je blablate toujours autant, je vais m'arrêter la et je vous propose d'apprécier les articles qui ont été mis en ligne depuis la création de SilicodeValley, ça parle de Géo-Localisation avec la sortie de la dernière version de Google Map API, la version 3 , du framework symfony, auquel je m'intéresse particulièrement, d'événements web, le dernier article explicite en détail la démarche à suivre pour s'en sortir dans tout ce qui est authentification web 2.0. Vous y trouverez des exemples complet sur l’utilisation des deux APIs facebook et twitter. je vous laisse donc apprécier tout ça ...

Il faut savoir aussi que je ne blogue plus en français depuis un certain temps et que les articles sur silicodeValley sont exclusivement en Anglais ...

Je vous propose les articles sous formes de tweet , ceux qui ne sont pas trop twitter devront juste comprendre que le titre de l'article est suivie par un lien qui vous redirigera automatiquement vers l'article , suivie lui aussi par des mots clefs tous précédé de hashtag "#"


- [Silicode-Valley] Oauth open protocol, all about web 2.0 authentications ... http://bit.ly/d5udOT#oauth #facebook #twitter #authentication


- [Silicode-Valley] Real Time localization notifications using GMapAPIv3, Ajax & Symfony … http://bit.ly/bISjeg #symfony #gouglemapsapi #ajax

- [Silicode-valley] Hi-Tech & Web upcoming large scale events ! http://bit.ly/axbTVi#linuxcon #leweb #brighttalks

- [Silicode-Valley] Location-based social networks:new Emerging startups http://bit.ly/8Znv30#startup #plyce #foursquare #nomao #localization

- [Silicode-Valley] Symfony rocks!! Streets Localization using Symfony & GMap API … http://bit.ly/9uDYjS #syfmony #googlemapsapi #localization

- [Silicode-Valley] San Francisco : The 3rd f8 conference ! A new web era announced ! http://bit.ly/dDmBAF #facebook #f8 #SF

Si vous avez déja bosser sur de la geo-loco, symfony, de l'authentification,si tout ce qui est web2.0 et real time web vous interesse n'hesitez surtout pas à partager vos experiences sur le site ...

 

 

 

 

lundi 24 mai 2010

Moteur de recherche, Lémmatisation , pretraitement ...


J'ai bossé ces deux derniers jours sur un nouvel outil fonctionnel en C, j'ai finalement réussi à ecrire une mini-librairie qui se charge de pré-traiter des articles, si je vous parle de pré-traitement c'est qu'il y aura forcement du traitement derrière, avant d'introduire cette librairie parlons d'abord un peu du context dans lequel ce travail a été effectué ...

Nous nous sommes interessés dans le cadre d'un projet à l'INSA à l'élaboration d'un module de traitement et de classification de textes. Quand je parle de classification, je fais allusion à tout ce qui utilise une base de donnnée d'articles, de templates, de models dans un but bien précis, celui par exemple d'identifier l'appartenance d'un article à une catégorie ... Nous travaillons à plusieurs sur ce projet, et la repartition des tẽches a voulu que je travaille sur la partie la plus générique, celle du pré-traitement,

En quoi consiste ce prétraitement ou encore en quoi consiste cette généricité?

Les moteurs de recherches actuels se base sur des algorithmes sémantiques qui parsent tout type de contenu disponible sur le web, principalement du texte, quand je dis texte, ça peut aussi bien aller du contenu réel d'un site que de méthadonnées decrivants le contenu du site. Quelque soit le type de traitement qu'on devra effectuer sur un contenu, ce dernier devra forcement subir auparavant un filtrage.

Avant de parler plus en detail de ce filtrage, je reviens sur le concept de généricité dont j'ai parlé un petit peu plus haut.
Quelque soit le type de traitement qu'on veut effectuer : recherche de mots clefs, classification et catégorisation de données (sites ou documents par exemples), ou autre chose
le pré-traitement effectué reste le mẽme, on s'interesse d'abord à ne prendre en considération que le contenu utile au traitement. Si on parle de contenu utile là ,c'est qu'il existe des mots inutiles, je vous donne un exemple. Lorsqu'un parseur d'un SearchEngine ^^ (désolé pour le franglais) parse un contenu ecrit en anglais, il tombera sur des mots qui ne lui seront pas d'une grand utilité, encore plus qui faussent l'operation, pour la recherche de mots clefs par exemple, on commencera par chercher les mots les plus redondants en prenant aussi en considération les synonymes. Le moteur tombera forcement sur des determinants, des pronoms qui se repetent très souvent dans n'importe quel contenu, une premiere operation de pré-traitement consistera à filtrer tout le contenu et à ne garder que l'information utile.

Dans notre cas, nous disposions d'une base de données d'articles (au format XML), provenant d'hyperGéo, en deux langues, francais et anglais, nous avions tout d'abord pensé à referencer tout ce qui peut constituer un terme inutile dans les deux langues, technologiquement parlant et vu que je disposais à la base d'article au format xml, j'ai préféré travailler sur le meme format : (lien vers les fichiers)

Aussi j'avais parlé au debut de mini-librairie, mini; car car elle se base elle aussi sur d'autres libraries, libXml2 utilisée pour parser, lire et modifier tout contenue au format xml et StemmerLibrary http://snowball.tartarus.org/texts/stemmersoverview.html qui comme son nom l'indique effectue toute opération de lémmatisation plus que necessaire, pour que notre moteur puisse detecter et reperer des relations entre plusieurs termes appartenant à des contenus differents. Il ne devra prendre en considaration que le lemme de ces termes sinon, vous modifiez juste le temps auquel le verbe est comjugé ou tout simplement en mettant un mot au pluriel et il ne considerera plus le mot comme le mẽme.

voilà, donc en gros, et puisqu'on bosse toujours dessus, j'arrive pour l'instant à l'aide de cette nouvelle librarie (celle sur laquelle je bosse) à effectuer des différentes operations, il ne nous reste plus qu'à synchroniser toutes ces operations en vue de lancer une chaine d'operations de pre-traitements pour alimenter une base ou constituer une requẽte qui sera traitée par notre moteur.

Structuration de la librarie :

-libXmlIO
-libClean_

80% du travail a déja été effectuer, si vous lancez le script principal d'execution vous pourrez déja palper un exemple fonctionnel de traitement d'un contenu provenant d'HyperGeo.
N'hesitez surtout pas à aller voir sur le site officiel de libxml2 pour adapter ces portions de codes à vos propres traitements. je vous conseille aussi de commmencer à tester dès maitenant la deuxieme librarie, elle est très riche, juste pour vous donner des chiffres; elle gere pas moins de 15 langues et son utilisation reste très simple: ne vous prenez pas trop la tẽte à essayer de dechiffrer tout le code source, jettez juste un petit coup d'oeil sur libstemmer.h et impregnez vous des méthodes proposées, et utilisez les boites noires proposées, "don't reinvent the weel" :)

Il nous reste maintenant à completer notre algorithme principal pour qu'il soit capable de lancer deux operations, la constitution d'une requẽte, c'est à dire prendre en consideration un et un seul contenu de telle sorte à pouvoir soit le classer, l'identifier par suite, ou bien encore lancer ce qu'on n'appelle la phase d'apprentissage pour tout ce qui concerne la classification de contenus.

Je vous re-donne donc rendez-vous dans une semaine sur ce mẽme article pour une librarie totalement autonome et fonctionnelle
PS : Le projet est actuellement terminé. Les fichiers sources sont maintenant dispo ICI .

Voila, si vous bossez sur un projet pareil ou si jamais vous avez déja bossé sur du sémantique n'hesitez surtout pas à partager votre experience :)

vendredi 26 février 2010

Oracle 11g : Prise en main & Administration


Oracle, administration & prise en main , autant de notions, autant de concepts à détailler, certains me diront surement qu'un livre tout entier ne suffira pas, j'ai pourtant essayé de résumer sur cet article en détails les points les plus critique quand à l'administration et à la prise en main d'oracle 11g .

Je tiens avant toute chose à vous signalez que je dispose d'un GNU/Linux Ubuntu 9_10 comme OS.

Et que les scripts fournis dans cet articles ont tous été testé avec succès sur cette distribution :)

Je décrirai au départ l'architecture générale d'Oracle 11g, on s'interessera juste apres à l'administration d'une telle structure et on terminera sur quelques exemples de création et de gestion d'une base de données sous Oracle 11g.

Instances & Base de données !

Voila pour mieux comprendre ces deux concepts je vous invite à lire ces quelques notes ...

La base de données est constituée de plusieurs fichiers de données , de fichiers de controls et de fichiers de journalisation .

L'instance est constituée d'une zone de mémoire partagée (SGA), d'un ensemble de processus background et d'un ensemble de processus serveur.

La mémoire partagées SGA est répartie sur plusieurs structures (le Shared pool, le

database buffer cache, redo log buffer et autres processus d'arrière plan)

Les processus d'arriere plan servent à synchroniser et à interragier avec es données alors que les processus serveur ne s'interessent qu'aux traitement des requetes utilisateurs.

Pour plus d'information sur l'architecture du gestionnaire de BD Oracle je vous conseille d'aller jetter un petit coup d'oeil ICI .


Ce qui important à savoir jusqu'ici c'est que la gestion de la mémoire partagée peut aussi bien se faire en automatique qu'en manuel . Meme chose pour la gestion mutuelle de la mémoire , je dis bien mutuelle car l'instance aussi dispose d'une mémoire appellée (PGA) (dites aussi mémoire de processus)

L'Administration d'une base oracle passe déjà par l'installation du produit , la création et le démarrage de la base, la gestion de l'espace de stockage , la gestion des utilisateurs , la restauration et la sauvegarde ainsi que l'administration des fichiers de contrôles et de journalisation.


Installation, pré-requis et testes …

On tachera lors de l'installation de respecter l'Optimal Flexible Architecture

Avant de commencer, parlons un peu de pré-requis , ben , déja … en matière de paquets vous aurez besoins d'installer les paquets suivants :

build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm odbcunix

un petit apt-get install et le tour est joué.

Par contre , les exigences matérielles ne sont pas trop discutables. Vous aurez besoin d'1Go de mémoire physique , un : free -m vous permettra de vous situez par rapport à ça.

Votre noyaux devra aussi etre configurer , je vous propose alors d'aller jeter un coup d'oeil sur la section 'mise à jour de la configuration du systeme' sur comment ça marche. Vous y trouvrez les modifs à apporter aussi bien au parametres du noyaux que pour definir les limites du shell du compte utilisateur (oracle dans notre cas.

Passons sans plus tarder à la création du compte oracle et aux repertoires de bases .

Le script suivant se charge de la création du groupe dba , du groupe propriétaire des inventaires Oracle et du compte utilisateur Oracle .


groupadd oinstall

groupadd dba

useradd -g oinstall -G dba oracle

passwd oracle


pour ce qui est de la création des répértoires de base …


mkdir -p /u01/app

chown -R oinstall:oracle /u01/app

chmod -R 750 /u01/app


Telecharger ensuite l'universal Installer d'Oracle ICI

Lancez le serveur graphique , ça se pourrai que vous aillez des problémes à le lancer , relancer votre session en changant d'utilisateur, en vous connectant sous le compte oracle et lancer l'universal installer en exécutant le script ./runInstaller

La suite est assez easy, Je vous propose quand meme ce petit Tutoriel sur les étapes à suivre sous Oracle Universal Installer jusqu'à l'installation finale du produit.

http://jaouad.developpez.com/oracle-11G/

Quand vous aurez terminer, vous aurez à fixer les variables d'environnement :

ORACLE_HOME

ORACLE_BASE

ORACLE_SID

PATH

pour cela ,n'hestiez surtout pas à aller rajouter quelques lignes ans votre bashrc ;)

vous disposez sous Oracle de script vous permettant de changer dynamiquement ses variables ,

/user/local/bin/oraenv

Notion importante apres l'installation d'Oracle , l'installation et la configuration d'Oracle Net, c'est à travers Oracle Net que des connections peuvent s'établir entre differentes machines.

Sur le serveur vous aurez donc à définie un service d'écoute. Le parametrage de ce processus d'écoute se fait à travers le fichier listener.ora présent dans le repertoire

$ORACLE_HOME/network/admin

Je prepare une seconde partie sur l'exploitation du SGBD oracle (création d'une base, gestion des utilisateurs, gestion des fichiers des ressources, dump et restauration des bases et tout ce qui va avec ) j'espere au moins que cette petit intro vous à été utile :) ...la suite juste après le week end ;)


mercredi 30 décembre 2009

JChess v 1.0: jeu d'echec en java ... sources & démo =)

Voila enfin du code, j'ai enfin pu avoir un peu de temps libre pour restructurer mon code, y ajouter une bonne documentation et le proposer sur mon blog :)
J'ai aussi reçu dernièrement plusieurs mails me demandant de fournir plus de sources, après mur réflexion , je vous avoue qu'il est beaucoup plus aisé de fournir un projet ou un package complet plutot que d'essayer de l'éxpliquer et de le detailler à travers plusieurs articles .
Il fallait donc avant tout que mon code devienne lisible, facilement comprehensible, pour que d'autres developpeurs puissent y touché sans trop de soucis :)

le projet est structuré comme tout projet de dev en plusieurs repertoires:

- un repertoire src : contenant les fichiers sources
- un repertoires classes : contenant les fichiers binaires (apres compilation)
- un repertoire ressource : contenant les resources images et sons necessaires à la compilation
et enfin, un repertoire doc : contenant la documentation necessaires à la bonne lisibilité du code.
Voila donc, le projet complet est téléchargeable ICI , ah , j'ai oublié un truc... le truc le plus important... Avant de vous incitez à y jouer , je vous incite d'abord à y toucher ^^ :) ne vous inquiétez pas trop ... quand vous lancerez votre première partie vous comprendrez rapidement ce que j'essaye de vous dire par la =)

Et pour finir et histoire de vous donner l'eau à la bouche ..., je vous propose cette petite démo ...




Ah avant que j'oublie, et avant de vous laisser partir tapoter sur vos petits claviers , faut que je vous dire un truc "Happy new year everybody ...especialy developers =) "

ps 1: ce jeu est encore en révision , il reste encore des fonctionnalités à coder, j'y reviendrai quand j'aurai un petit peu plus de temps ^^ :)

ps 2: à voir aussi : lancement d'un incubateur d'entreprises TIC au Cyberparc de Sidi Bouabdallah :)

...le monde des startups et de l'entreprenariat vous appelle =)

Chers Amis informaticiens , plus particulièrement ceux résidants en Algérie, le monde des startups et des idées libres vous appelle =)

j'ai discuté dernierement avec mon ami KT, et il m'a alors informé de l'organisation d'un concours destiné aux jeunes developpeurs, passionés d'informatique ou autres jeunes entrepreneurs Algériens . je vous fait donc parvenir l'annonce :

A l’occasion du lancement du premier incubateur d’entreprises TIC en Algérie en janvier 2010 au Cyberparc de Sidi Abdallah, un concours pour la création d’entreprises TIC (startups) sera organisé.

Les 20 meilleurs projets sélectionnés seront hébergés gratuitement dans des espaces de bureau world classe et équipés à l’incubateur du Cyberparc de Sidi Abdallah et bien d’autres avantages : financement, accompagnement spécifiques et un coaching adapté par des experts ...etc.

voila, et pour plus d'informations je vous conseille d'aller jeter un coup d'oeil ici

mardi 1 décembre 2009

mySQL / SAXBuilder /Cocoon2 pour interconnecter deux SI ...

Bon, histoire de prendre un peu de recul par rapport à la série de Tuto java sur le jeu d'échec, j'ai en quelque sorte changé de stratégie parce qu'au rythme ou ça avance il me faudra au minimum une vingtaine d'article pour tout expliquer.


Donc, je me suis simplement posé la question ; pourquoi ne pas fournir directement mes sources en leurs ajoutant une documentation de qualité , en tout cas, c'est ce que je suis en train de faire en ce moment et en attendant un dernier article récapitulatif infesté de codes sources ^^ et parsemé de commentaires je vais me permettre de m'étaler un petit peu plus sur un autre travail sur lequel je bosse toujours o-o !

je travaille actuellement dans le cadre de mon projet ECAO au département ASI de l'INSA de Rouen sur un projet d'interconnexion de deux systèmes d'information , celui du département et celui de l'INSA.

Une bonne partie des données utilisées par le département provient du SI de l'INSA , sauf que ces données étaient fournis avant sous format xml. Et que leurs exploitation se faisait à travers un serveur Apache-cocoon2 . Voilà, vous avez sans doute remarquer que cela nous laisse de la marge quand à l'automatisation de cette tache. Je m'explique :p


Ce projet consistait au début à proposer une vue des données utilisée par le département au DSI de l'INSA , et de programmer les pipelines cocoon nécessaires à l'interrogation direct de la base à travers ces mêmes vues , on n'aura donc plus à transiter par du xml statique ! Intéressant , non^^?

Un tel projet nécessite forcement une phase de test, puisqu'il existe une interaction entre plusieurs technologies ( Gestionnaire de base de donnée , programmation et configuration des pipelines...ect),

j'ai du alors avant de commencer à bosser dessus faire plusieurs choix quand aux technologies utilisées, plusieurs recherches sur internet ont été nécessaire et comme après chaque recherche je me pose toujours la même question: mais pourquoi personne n'a jamais pensé à rédiger un et un seul article assez détaillé sur tel ou tel truc pour ne pas qu'on ai toujours à basculer d'un site à un autre rien que pour savoir comment implémenter ceci ou comment utiliser telle ou telle librairie . Et c'est uniquement pour cette raison que j'ai voulu exposer ma démarche à travers cet article.


Pour ce qui est de la phase de test, On doit obligatoirement passer par plusieurs étapes :

L'élaboration de schéma xml et d'une modélisation UML ( il n'y a pas une réelle nécessité de détailler cette partie , puisqu'elle sert surtout à proposer un accès aux données, sauf que nous, pour cette phase de test, nous allons plutôt généré ces données à travers le fichier XML fournis et programmer les pipelines cocoon nécessaires à l'exploitation d'une base et non d'un fichier XML.

Les choix se sont finalement portés sur :
mySQL comme gestionnaire de base de données:
Java, plus particulièrement JDOM comme langage me permettant de parser mon document XML , et d'alimenter ma base.
SQLTransformer et XSP / ESQL afin de tenter deux approches permettant la
programmation de transformateurs sous cocoon2.

Commençons tout d'abord par une problématique assez simple , commet à partir d'un fichier XML , pourra-t-on alimenter une BDD? Une idée^^?


Si je vous dis JDOM ? Ça vous dit quelque chose, JDOM est une librairie java très puissante qui vous permet de parser votre document XML et d'avoir ainsi accès à tout les nœuds sans avoir vraiment à gérer une grosse arborescence , il est aussi possible d'utiliser DOM : mais bon, pour éviter toute la complexité que cela peut engendrer (génération d'une grosse arborescence regroupant tout les nœuds et j'en passe), j'ai plutôt opté pour JDOM.

Vous pouvez télécharger la librairie JDOM en cliquant ici .
Aussi et vue qu'on devra établir un programme java qui se chargera en plus du fait de parser notre document XML de remplir systématique notre BDD , nous devons aussi installer MySQL

je vous propose pour cela de taper dans votre terminal les deux lignes de commande suivantes :


apt-get install mysql-server
apt-get install mysql-client


vous pourrez alors tester votre connexion et créer ainsi une BDD en saisissant ...

mysql -h localhost -u UserName -pPassword


la phase de test se fera bien évidement en local d'ou l'utilisation d'une connexion sous localhost.

Mysqladmin -h localhost -uUsername -pPassword create ma_base


cette derniere ligne de commande vous permet de créer votre base de donnée ma_base.

je vous propose alors le programme java suivant :


import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import java.util.List;
import java.util.Iterator;
import java.sql.*;


public class remplissageBdd{

private static String pilote="org.gjt.mm.mysql.Driver";
static Document document;
static Element racine;

public static void main(String [] args){
try{
SAXBuilder sxb=new SAXBuilder();
document=sxb.build(new File("fichier.xml"));
}
catch(Exception e){
System.out.println("erreur : "+e);
}
racine=document.getRootElement();
inject();
}
static void inject(){

try{
Class.forName(pilote);
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost/ma_base","root","password");
Statement instruction=connection.createStatement();
String queryTable="create table etudiants(etudiants CHAR(20),classe CHAR(20));";
instruction.executeUpdate(queryTable);

List etudiants=racine.getChildren("etudiant");
Iterator j=ec.iterator();
while(j.hasNext()){

Element element=(Element)j.next();

String id=element.getAttributeValue("id");
String classe=element.getChild('classe').getText();
String query="INSERT INTO etudiants VALUES('"+etudiant+"','"+classe+"'')";
instruction.executeUpdate(query);
}
connection.close();
}
catch(Exception e){
System.out.println("erreur : "+e);
}
}
}


et comme fichier source quoi de plus interessant pour cette premiere phase de teste qu'un simple fichier XML regroupant des nœuds dépendant d'une racine et possédant des attributs : on aura donc à gérer à travers ce petit exemple tout les types de donnée composant un fichier XML,

arbre du fichier xml :
etudiants
------->etudiant(attribute:nom="toto")
-----classe=CM1
------->etudiant(attribute:nom="tata")
-----classe=CM2

testons alors ensemble cette phase de remplissage …


vérifiez juste après l'exécution du programme java que votre table a bien été créé et qu'elle contient tout ce que le fichier XML contenait comme information. Si ce n'ai pas le cas revoyez votre code^^ ...

une remarque par rapport à l'exécution du programme java remplissageBDD


l'exécution de ce fichier nécessite l'utilisation d'un connecteur java à mySQL , je vous propose alors de télécharger le bon connecteur sur ce lien :http://dev.mysql.com/downloads/connector/j/5.1.html

Passons maintenant à la deuxième partie du projet , la plus excitante^^ ! nous disposons maintenant d'une base de données contenant toute les données nécessaires à la génération de nos pages :
comment faire alors pour véhiculer ces donnés et les présenter sous format html .

Cocoon -apache 2 est le serveur par excellence pour ce genre de tache , avant de commencer , je vous conseille d'aller jeter un petit coup d'œil sur le site officiel cocoon-apache.

La transition de ces données sous cocoon se fait à travers des pipelines ; un pipeline ce n'ai ni plus ni moins qu'un chemin programmé, contenant trois modules :un module de génération, un autre de transformation et un dernier qui se charge de la séréalisation et qui permet de modifier les données en fonction de leur usage.


Vous vous posez surement la même question que moi au départ ^^ ,je me disais tout le temps : 'Des serveurs j'en ai vu tellement , de toutes sortes en tout cas en partant d'IIS jusqu'au Jboss, Tomcat, apache et compagnie..mais à aucun moment je n'ai eu affaire à un pipeline ou un truc du genre

c'est quoi donc finalement cette histoire de pipeline? Ne vous inquiétez pas aussitôt cette phase de test fini vous y verrez beaucoup plus clair pour tout ce qui concerne cocoon et ses pipelines ^^

ajoutez entre deux blocs 'pipeline' un bloc 'map:match' contenant une generateur 'map:generate' un transformateur 'map:transfort' et un séréaliseur 'map:serealize' ...

Le premier blocs sert à définir l'url qui pointera directement vers votre pipeline.
Les générateurs et les transformateur auront besoin comme source d'un fichier; un fichier de base. xml par exemple pour la génération et xslt comme fichier de transformation.

Par contre on aura surtout besoin lors de la serialisation de définir un type. Un format de sortie; xml ou html par exemple.

Pour configurer de pipeline je vous conseille fortement d'aller voir du coté du site officiel apache-coccon 2 , vous y trouverez plusieurs exemples .

J'ai du dans mon cas, définir une connexion à ma base dans mon cocoon.xconf et faire référence à ma connexion en ajoutant à mon transformateur un paramètre nommé use-connexion et qui pointe sur la connexion préalablement établie.

Attention , plusieurs approches restent possible. J'en ai testé deux : une en utilisant SQLTransformer et une autre sur la base d'un fichier xsp ...je ne vous cache pas que ma préférence va plutôt vers xsp . XSP vous laisse beaucoup de marge quand à votre présentation … tout est inclus dedans ^^ au grand bonheur des cocooniens :)

Enfin et pour finir, je vous propose d'aller faire un petit tour sur le site coocon plus spécialement sur ce lien : http://www.nongnu.org/sdx/docs/html/doc-sdx2/fr/reference/xsp.html

mardi 24 novembre 2009

Jeu d'echec en Java ...article 3

Le constructeur définie lors du précédent tutoriel , nous permet de générer la grille suivante , sans les icones bien sûr , je vais vous détailler sur ce tuto les deux fonctions permettant la génération de ces icones sur cette grille ...


Avant de passer aux fonctions d'initialisation , je reviens un peu en détail au précédent constructeur , en précisant que notre classe DisplayingTable herite de la classe mere Jframe , et qu'aussitôt une instance généré , son constructeur se charge de récupéré une référence vers le Container de cette page et d'y ajouter a la fin notre Jpanel surchargé d'éléments de jeu,

l'allocation du GridBaglayout s'est faite alors sur le Jpanel tables pour que table puisse être ajouter au Container.


Revenons maintenant à l'initialisation de nos éléments de jeu , deux fonctions ont été nécessaire à cela :


la classe initialisation , qui se charge d'importer une icône définissant chaque élément de jeu , en spécifiant comme paramètre , le chemin vers l'icone en String , et les coordonnées de l'élément auxquels elle devra être affecter .


public void initialisation(String url_file,int i,int j)

{

JLabel label=new JLabel();

label.setOpaque(true);

label.setIcon(new ImageIcon(url_file));

label.setBackground(colors[i][j]);

label.setPreferredSize(new Dimension(50,50));

label.addMouseListener(listener);

table.remove(labes[i][j]);

table.add(label,TransformerTool.GBTransformer(GBC,i,j,1,1));

}


tachez pour l'instant de ne pas trop vous focaliser sur les lignes de commandes permettant d'ajouter des listener à nos objets . Cette fonction d'initialisation , créer à chaque appel un nouvel objet lui alloue comme couleurs , la couleur de la case correspondante , et la on remarque l'utilité de la création d'un tableau de couleurs ,cette mémorisation s'avère donc être utile :) !


on supprimera par la suite l'élément visé à travers les coordonnées donnée en paramètres , cela bien sur afin de le remplacer par le nouvel élément instancié.


Cette fonction à été surtout crée pour être soliciter à travers plusieurs appels, par une fonction appelons la mere ^^ , qui initialisera tout les éléments du jeu :



public void ElementsInitialisation()

{

for(int i=0;i<8;i++)

{

this.initialisation("pion_blanc.gif",i,1);

}

for(int i=0;i<8;i++)

{

this.initialisation("pion_noir.gif",i,6);

}

this.initialisation("tour_blanche.gif",0,0);

this.initialisation("tour_blanche.gif",7,0);

this.initialisation("fou_blanc.gif",2,0);

this.initialisation("fou_blanc.gif",5,0);

this.initialisation("chevalier_blanc.gif",1,0);

this.initialisation("chevalier_blanc.gif",6,0);

this.initialisation("reine_blanche.gif",4,0);

this.initialisation("roi_blanc.gif",3,0);

this.initialisation("tour_noir.gif",0,7);

this.initialisation("tour_noir.gif",7,7);

this.initialisation("fou_noir.gif",2,7);

this.initialisation("fou_noir.gif",5,7);

this.initialisation("chevalier_noir.gif",1,7);

this.initialisation("chevalier_noir.gif",6,7);

this.initialisation("reine_noir.gif",3,7);

this.initialisation("roi_noir.gif",4,7);

}


la fonction ,ElementsInitialisation initialisera à travers plusieurs appels à la précédente fonction tout les éléments de jeu , tachez juste de mettre les bonnes coordonnées et à ne pas vous trompez lors de la spécification du chemin relatifs à chaque icône .

Voilà, pour cette toute première partie graphique, on développera dans les prochains tuto, l'utilisation de nos Listners pour en quelques sorte dynamiser ce graphisme... vous aurez aussi bien affaire aux classes du package Bakend qu'a ceux de EventHandlers … :p