<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Blog MTI</title>
	<atom:link href="http://www.mti.epita.fr/blogs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mti.epita.fr/blogs</link>
	<description>Multimédia et Technologies de l'Information</description>
	<pubDate>Thu, 02 Sep 2010 08:57:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>fr</language>
			<item>
		<title>Tutoriel iPhone : Web Service avec SOAP</title>
		<link>http://www.mti.epita.fr/blogs/2010/09/02/tutoriel-iphone-web-service-avec-soap/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/09/02/tutoriel-iphone-web-service-avec-soap/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 08:42:42 +0000</pubDate>
		<dc:creator>Simon Hau</dc:creator>
		
		<category><![CDATA[Apple]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[connexion]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[objective-c]]></category>

		<category><![CDATA[rtc]]></category>

		<category><![CDATA[soap]]></category>

		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8128</guid>
		<description><![CDATA[Ce tutoriel va vous permettre de développer un outil permettant de communiquer avec un Web Service à l'aide du protocole SOAP. 
Pré-requis
Ce tutoriel est destiné, de préférence, aux développeurs ayant au moins une première expérience dans l'univers iPhone SDK. Dans le cas contraire, je vous invite à lire un tutoriel pour vous familiariser avec le [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: normal;">Ce tutoriel va vous permettre de développer un outil permettant de communiquer avec un Web Service à l'aide du protocole SOAP. </span></p>
<h3><span style="font-weight: normal; font-size: 13px;"><span style="font-weight: normal;"><span style="font-size: medium;"><span><strong>Pré-requis</strong></span></span></span></span></h3>
<p><span style="font-weight: normal; font-size: 13px;"><span style="font-weight: normal;">Ce tutoriel est destiné, de préférence, aux développeurs ayant au moins une première expérience dans l'univers iPhone SDK. Dans le cas contraire, je vous invite à lire un tutoriel pour vous familiariser avec le langage Objective-C et l'iPhone SDK (Vous pouvez en trouver un sur ce blog : </span><a title="Programmation iPhone : pré-requis" href="http://www.mti.epita.fr/blogs/2009/06/20/programmation-iphone-13-pre-requis/" target="_blank"><span style="font-weight: normal;">Programmation iPhone : Pré-requis</span></a><span style="font-weight: normal;">).</span></span></p>
<p><span id="more-8128"></span></p>
<h2>Généralités</h2>
<h3>Web Service</h3>
<p>Un Web Service est une interface de programmation (Application Programming Interface ou API), et permet plus particulièrement la communication entre applications et/ou systèmes hétérogènes. Dans notre cas, nous souhaitons faire communiquer une application iPhone et une solution Web Service mise en place sur un serveur.</p>
<h3>SOAP</h3>
<p>Simple Object Access Protocol (SOAP) est un protocole permettant l'échange d'informations dans un Web Service. Un message SOAP est de format XML. Ce message contient la requête demandée et décrit plus particulièrement le nom de l'action désirée, éventuellement précisée d'arguments. Nous verrons plus loin dans le tutoriel les particularités des messages envoyés par ce protocole. Nous utiliserons la version 1.2 de SOAP dans ce tutoriel.</p>
<h2>Développement</h2>
<div>Nous allons développer une application iPhone qui va communiquer avec le Web Service déployé sur le site suivant : <a href="http://www.nanonull.com/TimeService/TimeService.asmx">http://www.nanonull.com/TimeService/TimeService.asmx</a></div>
<p>Nous désirons appeler la méthode <em>getCityTime</em>; celle-ci prend en argument le nom d'une ville et le serveur est censé nous envoyer l'heure courante de la ville en question.</p>
<h3>L'application</h3>
<div>Commencez par ouvrir Xcode et créez une application de type Window-Based Application (nous appellerons le nôtre : <em>MySoap</em>).</div>
<div>Créez ensuite une classe <em>SoapBuilder</em>. Son interface est la suivante :</div>
<div>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">@interface SoapBuilder <span style="color: #339933;">:</span> NSObject <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Request</span>
	NSString	<span style="color: #339933;">*</span>address<span style="color: #339933;">;</span>
	NSString	<span style="color: #339933;">*</span>xmlNamespace<span style="color: #339933;">;</span>
	NSString	<span style="color: #339933;">*</span>operation<span style="color: #339933;">;</span>
	NSString	<span style="color: #339933;">*</span>parameters<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Connection</span>
	BOOL		recordResults<span style="color: #339933;">;</span>
	BOOL		connectionFinished<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Xml Parsing</span>
	NSMutableString	<span style="color: #339933;">*</span>soapResults<span style="color: #339933;">;</span>
	NSMutableData	<span style="color: #339933;">*</span>webData<span style="color: #339933;">;</span>
	NSXMLParser	<span style="color: #339933;">*</span>xmlParser<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
@property<span style="color: #009900;">&#40;</span>nonatomic<span style="color: #339933;">,</span> retain<span style="color: #009900;">&#41;</span> NSString <span style="color: #339933;">*</span>address<span style="color: #339933;">;</span>
@property<span style="color: #009900;">&#40;</span>nonatomic<span style="color: #339933;">,</span> retain<span style="color: #009900;">&#41;</span> NSString <span style="color: #339933;">*</span>xmlNamespace<span style="color: #339933;">;</span>
&nbsp;
@property<span style="color: #009900;">&#40;</span>nonatomic<span style="color: #339933;">,</span> retain<span style="color: #009900;">&#41;</span> NSString <span style="color: #339933;">*</span>operation<span style="color: #339933;">;</span>
@property<span style="color: #009900;">&#40;</span>nonatomic<span style="color: #339933;">,</span> retain<span style="color: #009900;">&#41;</span> NSString <span style="color: #339933;">*</span>parameters<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>execute<span style="color: #339933;">;</span>
&nbsp;
@end</pre></div></div>

</div>
<p>Nous verrons au fur et à mesure l'intérêt de chaque attribut.</p>
<p>Dans le fichier d'implémentation (.m) commençons par faire la méthode d'initialisation :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span>init <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>super init<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	address		<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	xmlNamespace	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	operation	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	parameters	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> self<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>La requête</h3>
<p>On désire effectuer la requête suivante avant de se connecter sur le serveur :</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;
    http://www.nanonull.com/TimeService/TimeService.asmx
    http://www.Nanonull.com/TimeService/getCityTime
&nbsp;
    Chicago</pre></div></div>

<p>On implémente la méthode principale <em>execute </em>qui va se charger de :</p>
<li>Créer le message SOAP</li>
<li>Créer la requête</li>
<li>Créer la connexion (utilisant la requête)</li>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>execute <span style="color: #009900;">&#123;</span>
	recordResults <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
&nbsp;
	NSString <span style="color: #339933;">*</span>operatorTag <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&amp;amp;lt;%@ xmlns=<span style="color: #000099; font-weight: bold;">\&quot;</span>%@<span style="color: #000099; font-weight: bold;">\&quot;</span>&amp;amp;gt;%@&lt;!--%@--&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> operation<span style="color: #339933;">,</span> xmlNamespace<span style="color: #339933;">,</span> parameters<span style="color: #339933;">,</span> operation<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	NSString <span style="color: #339933;">*</span>soapMessage <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSString stringWithFormat<span style="color: #339933;">:</span>
							 @<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;  <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;    %@<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;    %@%@<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;  <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;  <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;    %@&quot;</span>
							 <span style="color: #ff0000;">&quot;  <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
							 <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> address<span style="color: #339933;">,</span> xmlNamespace<span style="color: #339933;">,</span> operation<span style="color: #339933;">,</span> operatorTag
							 <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>			
&nbsp;
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Requête SOAP = <span style="color: #000099; font-weight: bold;">\n</span>%@<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> soapMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Requête</span>
	<span style="color: #666666; font-style: italic;">// On spécifie l'adresse du Web Service</span>
	NSURL <span style="color: #339933;">*</span>url <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSURL URLWithString<span style="color: #339933;">:</span>address<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	NSMutableURLRequest <span style="color: #339933;">*</span>theRequest <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSMutableURLRequest requestWithURL<span style="color: #339933;">:</span>url<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// On précise le type de données, ici : application/soap+xml (spécifique à SOAP 1.2)</span>
	<span style="color: #009900;">&#91;</span>theRequest addValue<span style="color: #339933;">:</span> @<span style="color: #ff0000;">&quot;application/soap+xml; charset=utf-8&quot;</span> forHTTPHeaderField<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Content-Type&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>theRequest setHTTPMethod<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;POST&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// On insère alors le message SOAP construit auparavant</span>
	<span style="color: #009900;">&#91;</span>theRequest setHTTPBody<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>soapMessage dataUsingEncoding<span style="color: #339933;">:</span>NSUTF8StringEncoding<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Connexion</span>
	NSURLConnection <span style="color: #339933;">*</span>theConnection  <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSURLConnection alloc<span style="color: #009900;">&#93;</span> initWithRequest<span style="color: #339933;">:</span>theRequest delegate<span style="color: #339933;">:</span>self<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> theConnection <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		webData <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSMutableData data<span style="color: #009900;">&#93;</span> retain<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;La connexion ne peut s'établir&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Le message SOAP est créé manuellement à l'aide d'un <em>NSString</em> en insérant l'adresse, l'opérateur et les éventuels arguments aux bons endroits.</p>
<p>Par la suite, on construit un <em>NSMutableURLRequest</em> qui prend en argument le message SOAP que l'on vient de créer. On y précise également les spécifications nécessaires telles que le type de données (<em>application/soap+xml</em>).</p>
<p>Ensuite, le <em>NSURLConnection</em> theConnection peut enfin se faire en prenant en argument le <em>NSMutableURLRequest</em> précédemment alloué et préparé. On précise également que l'instance de la classe courante est le delegate du <em>NSURLConnection</em>; ceci afin d'implémenter les méthodes déléguées dans cette même classe (et donc dans ce même fichier).</p>
<h3>La connexion</h3>
<p>La méthode suivante est appelée quand la connexion et établie.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>connection<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection didReceiveResponse<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLResponse <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>response <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>webData setLength<span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>La méthode suivante est appelée dès lors que des données nous sont envoyées. Tout n'est pas envoyé en même temps et cette méthode sera appelée autant de fois que nécessaire pour recevoir entièrement la réponse. Nous allons donc utiliser un NSMutableString (webData) pour pouvoir concaténer les différentes portions envoyées afin de restituer intégralement cette réponse.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>connection<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection didReceiveData<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSData <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>data <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>webData appendData<span style="color: #339933;">:</span>data<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Lorsque tout est bien reçu, nous arrivons sur la méthode <em>connectionDidFinishLoading</em>. On peut dès lors faire afficher la réponse en format XML.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>connectionDidFinishLoading<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection <span style="color: #009900;">&#123;</span>
	NSString <span style="color: #339933;">*</span>theXML <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSString alloc<span style="color: #009900;">&#93;</span> initWithBytes<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>webData mutableBytes<span style="color: #009900;">&#93;</span> length<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>webData length<span style="color: #009900;">&#93;</span> encoding<span style="color: #339933;">:</span>NSUTF8StringEncoding<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Réponse SOAP = <span style="color: #000099; font-weight: bold;">\n</span>%@<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> theXML<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>theXML release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>	
&nbsp;
	<span style="color: #666666; font-style: italic;">// Appel futur du parser</span>
&nbsp;
	<span style="color: #009900;">&#91;</span>connection release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>webData release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	connectionFinished <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Si jamais la connexion échoue en cours de route, nous arrivons sur la méthode suivante. Nous libérons tout avant de sortir.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>connection<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection didFailWithError<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSError <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>error <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>connection release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>webData release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Echec de la connexion&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Premier test</h3>
<p>Dans la classe du delegate de l'application (<em>MySoapAppDelegate</em> dans notre cas), dans la méthode <em>applicationDidFinishLaunching</em>, insérez les lignes suivantes afin de tester notre classe <em>SoapBuilder</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">	SoapBuilder <span style="color: #339933;">*</span>soapBuilder <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>SoapBuilder alloc<span style="color: #009900;">&#93;</span> init<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>soapBuilder setAddress<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;http://www.nanonull.com/TimeService/TimeService.asmx&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>soapBuilder setXmlNamespace<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;http://www.Nanonull.com/TimeService/&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>soapBuilder setOperation<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;getCityTime&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>soapBuilder setParameters<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Chicago&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>soapBuilder execute<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Le code est suffisamment explicite : nous voulons faire une requête sur le Web Service déployé à l'adresse <em>http://www.nanonull.com/TimeService/TimeService.asmx</em>, faire appel à la méthode nommée <em>getCityTime</em> avec comme argument <em>Chicago</em> (à placer entre les balises du nom de l'argument attendu)</p>
<p>Vous pouvez compiler et voir ce qui est affiché dans la console (n'oubliez pas d'importer la classe <em>SoapBuilder</em>). La réponse obtenue dans notre cas est la suivante (elle dépend évidemment de l'heure à laquelle on fait appel au serveur) :</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;
                                    6:18PM</pre></div></div>

<p>Dans ce texte en format XML, on peut distinguer la réponse qui se trouve entre les balises <em>getCityTimeResult</em>.</p>
<h3>Le parser</h3>
<p>Dans la pratique, cette donnée n'est pas réellement utilisable. Nous allons donc parser toute la réponse envoyée par le serveur.</p>
<p><em>NSXMLParser</em> est une classe qui propose un parser XML (de type SAX) qui nous servira à parser la réponse.</p>
<p>Dans la méthode connectionDidFinishLoading, remplacez la ligne :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">	<span style="color: #666666; font-style: italic;">// Appel futur du parser</span></pre></div></div>

<p>Par le code suivant :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>xmlParser<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#91;</span>xmlParser release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Allocation du NSXMLParser</span>
	xmlParser <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSXMLParser alloc<span style="color: #009900;">&#93;</span> initWithData<span style="color: #339933;">:</span> webData<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Désigne l'instance de la classe courante comme étant le delegate du NSXMLParser</span>
	<span style="color: #009900;">&#91;</span>xmlParser setDelegate<span style="color: #339933;">:</span> self<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>xmlParser setShouldResolveExternalEntities<span style="color: #339933;">:</span> YES<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>xmlParser parse<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ceci va préparer et allouer un <em>NSXMLParser</em> qui va pouvoir par la suite parser la réponse en XML. Il faut néanmoins spécifier le Delegate comme étant l'instance de la classe courante. On va pouvoir implémenter (à la suite) les trois méthodes du Delegate nécessaires au parsing.</p>
<p>Tout d'abord, la méthode qui sera appelée dés que le parser rencontre une balise d'ouverture. Il faut alors vérifier qu'il s'agit de la balise qui nous intéresse, en l'occurrence <em>getCityTimeResult. </em>S'il s'agit de la bonne balise, nous préparons la sauvegarder du résultat. Sachant que le parser va lire les portions d'information petit à petit, nous faisons allouer un <em>NSMutableString</em> afin de concaténer le résultat.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>parser<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSXMLParser <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>parser didStartElement<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>elementName namespaceURI<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> namespaceURI qualifiedName<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>qName
   attributes<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>NSDictionary <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>attributeDict <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// On vérifie si la balise est celle que l'on recherche, c'est-à-dire &quot;NomDeNotreOperationSuiviDuMotResult&quot;</span>
	NSString <span style="color: #339933;">*</span>operation_result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>operation stringByAppendingFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Result&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#91;</span>elementName isEqualToString<span style="color: #339933;">:</span>operation_result<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Nous débuttons une balise XML, on prépare la sauvegarde du résultat</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>soapResults<span style="color: #009900;">&#41;</span>
			soapResults <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSMutableString alloc<span style="color: #009900;">&#93;</span> init<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		recordResults <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>La méthode suivante est appelée dès que l'on trouve des caractères dans le texte XML. Si on est au sein de la balise qui nous intéresse, on concatène les chaînes de caractères sur <em>soapResults</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>parser<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSXMLParser <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>parser foundCharacters<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #993333;">string</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// On concatène toutes les portions de résultats lues</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> recordResults <span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#91;</span>soapResults appendString<span style="color: #339933;">:</span> <span style="color: #993333;">string</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Quand on arrive sur la balise fermante, la méthode suivante est appelée :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>parser<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSXMLParser <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>parser didEndElement<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>elementName namespaceURI<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>namespaceURI qualifiedName<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>qName <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// De même que précédemment, on vérifie si l'on se trouve dans la balise correspondante à notre résultat</span>
	NSString <span style="color: #339933;">*</span>operation_result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>operation stringByAppendingFormat<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Result&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#91;</span>elementName isEqualToString<span style="color: #339933;">:</span>operation_result<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// On arrive à la fin du résultat, on arrête l'enregistrement-concaténation</span>
		recordResults <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Affichage du résultat attendu</span>
		NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Resultat = %@&quot;</span><span style="color: #339933;">,</span> soapResults<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// On libère le NSMutableString si nous n'en avons plus besoin</span>
		<span style="color: #009900;">&#91;</span>soapResults release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		soapResults <span style="color: #339933;">=</span> nil<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>On obtient finalement la réponse voulue :</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">Resultat = 7:08 PM</pre></div></div>

<h3>Certificat</h3>
<p>Pour des raisons de sécurité, certains Web Services peuvent demander la signature d'un certificat. Pour se faire, il suffit d'implémenter les deux méthodes suivantes :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>BOOL<span style="color: #009900;">&#41;</span>connection<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection canAuthenticateAgainstProtectionSpace<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLProtectionSpace <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>space
<span style="color: #009900;">&#123;</span>
	BOOL	shouldAllowSelfSignedCert <span style="color: #339933;">=</span> YES<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>space authenticationMethod<span style="color: #009900;">&#93;</span> isEqualToString<span style="color: #339933;">:</span>NSURLAuthenticationMethodServerTrust<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>shouldAllowSelfSignedCert<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> YES<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">else</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> NO<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	UIAlertView	 <span style="color: #339933;">*</span>alert <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIAlertView alloc<span style="color: #009900;">&#93;</span> initWithTitle<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Le service est actuellement indisponible.&quot;</span> message<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;&quot;</span>
													delegate<span style="color: #339933;">:</span>self cancelButtonTitle<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;Ok&quot;</span> otherButtonTitles<span style="color: #339933;">:</span>nil<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>alert show<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>alert release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> NO<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>connection<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLConnection <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>connection didReceiveAuthenticationChallenge<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSURLAuthenticationChallenge <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>challenge
&nbsp;
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>challenge previousFailureCount<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
        NSURLCredential <span style="color: #339933;">*</span>newCredential<span style="color: #339933;">;</span>
        newCredential<span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span>NSURLCredential credentialWithUser<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;UN_IDENTIFIANT&quot;</span>
                                                 password<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;UN_MOT_DE_PASSE&quot;</span>
                                              persistence<span style="color: #339933;">:</span>NSURLCredentialPersistenceNone<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>challenge sender<span style="color: #009900;">&#93;</span> useCredential<span style="color: #339933;">:</span>newCredential forAuthenticationChallenge<span style="color: #339933;">:</span>challenge<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span>
	<span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>challenge sender<span style="color: #009900;">&#93;</span> cancelAuthenticationChallenge<span style="color: #339933;">:</span>challenge<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Le parser peut bien sûr être adapté pour traiter plus d'un résultat par réponse.</p>
<h3>Asynchronisme</h3>
<p>Dans la méthode <em>execute</em>, l'appel suivant</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">NSURLConnection <span style="color: #339933;">*</span>theConnection  <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSURLConnection alloc<span style="color: #009900;">&#93;</span> initWithRequest<span style="color: #339933;">:</span>theRequest delegate<span style="color: #339933;">:</span>self<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>est asynchrone avec le thread courant; c'est-à-dire que le reste de l'application va continuer à s'exécuter, peu importe ce que fait <em>theConnection</em>. Parfois, il est nécessaire de rendre cette tâche synchrone : pour se faire, ajoutez les lignes suivantes dans la méthode <em>execute</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>connectionFinished<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSRunLoop currentRunLoop<span style="color: #009900;">&#93;</span> runMode<span style="color: #339933;">:</span>NSDefaultRunLoopMode beforeDate<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>NSDate distantFuture<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Sources</h3>
<p>Les sources de l'application peuvent être récupérées ici : <a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/mysoap.zip">MySoap</a></p>
<h2>Conclusion</h2>
<p>Ce tutoriel a permis de développer aisément un outil pour pouvoir communiquer avec un Web Service à l'aide de SOAP.<br />
Il suffit au final de le configurer rapidement pour pouvoir se connecter sur différents points d'accès (à condition qu'ils utilisent SOAP 1.2).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/09/02/tutoriel-iphone-web-service-avec-soap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Débuter avec Adobe InDesign CS4</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/30/utiliser-adobe-indesign-cs4/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/30/utiliser-adobe-indesign-cs4/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 08:42:54 +0000</pubDate>
		<dc:creator>ducauz_c</dc:creator>
		
		<category><![CDATA[Adobe]]></category>

		<category><![CDATA[Autres]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8204</guid>
		<description><![CDATA[Adobe Indesign CS4 est un logiciel de PAO (Publication Assisté par Ordinateur) et de mise en page numérique proposé par Adobe. Il autorise un contrôle précis de la typographie et des outils de création  intégrés pour la conception, le contrôle en amont et la publication de  documents pour l'impression et le web. Il [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Adobe Indesign CS4</strong> est un logiciel de PAO (Publication Assisté par Ordinateur) et de mise en page numérique proposé par Adobe. Il autorise un contrôle précis de la typographie et des outils de création  intégrés pour la conception, le contrôle en amont et la publication de  documents pour l'impression et le web. Il met en avant son accès total sur la mise en page (contrairement à un logiciel de traitement de texte). Ce logiciel fait parti de la   suite logiciel Adobe CS4.</p>
<p style="text-align: left;">À travers cet article, nous allons entrer dans l'univers d'InDesign et créer notre premier document.</p>
<p style="text-align: left;"><span id="more-8204"></span></p>
<h3 style="text-align: left;">Créer un nouveau document</h3>
<p style="text-align: left;">Lors du lancement d'Adobe InDesign la première chose qui nous est demandée est de créer un nouveau document ou d'en ouvrir un existant (cf image ci-dessous). Pour le sujet de cet article, nous allons créer un nouveau document.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home.jpg"><img class="size-medium wp-image-8251  aligncenter" title="Accueil InDesign" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home-300x227.jpg" alt="" width="300" height="227" /></a></p>
<p style="text-align: center;"><em>Accueil InDesign</em></p>
<p style="text-align: left;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau1.tiff"><img class="aligncenter size-medium wp-image-8219" title="Nouveau Document" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau1.tiff" alt="" /></a></p>
<p style="text-align: left;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home.tiff"><img class="aligncenter size-medium wp-image-8207" title="Créer un document" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home.tiff" alt="" /></a></p>
<p style="text-align: left;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home1.tiff"><img class="alignnone size-medium wp-image-8208" title="home1" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home1.tiff" alt="" /></a></p>
<h3 style="text-align: left;">Options d'un document</h3>
<p style="text-align: left;">Dès que nous avons validé notre choix, une seconde pop-up s'ouvre, il  s'agit des propriétés du document (cf ci-dessous)</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau.jpg"><img class="size-medium wp-image-8252       aligncenter" title="Nouveau Document" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau-300x210.jpg" alt="" width="300" height="210" /></a></p>
<p style="text-align: center;"><em>Paramètres du nouveau document</em></p>
<p style="text-align: left;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home2.tiff"><img class="aligncenter size-medium wp-image-8221" title="Options d'un document" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/home2.tiff" alt="" /></a></p>
<p style="text-align: left;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau.tiff"><img class="aligncenter size-medium wp-image-8209" title="Créer un nouveau document" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/nouveau.tiff" alt="" /></a></p>
<p style="text-align: left;">Plusieurs options nous sont proposées :</p>
<ul style="text-align: left;">
<li><strong>Document prédéfini</strong> : Il permet de choisir un style de document qu'on aurait déjà enregistré, par exemple une charte graphique pour une circulaire d'entreprise. Dans notre cas nous n'en avons pas donc on va laisser [Par défaut]</li>
<li><strong>Nombre de pages</strong> : il s'agit du nombre de pages que va faire notre document (il sera possible de rajouter des pages par la suite si l'on souhaite).</li>
<li><strong>Pages en vis-à-vis</strong> : InDesign souhaite savoir si nos pages seront face-à-face comme dans un livre. Si l'on coche cette option, la page 1 sera seule alors que les pages 2 et 3 seront collées. Cochons cette case pour voir le résultat.</li>
<li><strong>Format de la page</strong> : Des formats de pages sont prédéfinis A3, A4, A5, etc ... il est possible de préciser un format particulier en rentrant directement la valeur dans les cases en-dessous.</li>
<li><strong>Orientation</strong> : Page au format portrait ou paysage</li>
<li><strong>Colonnes</strong> : Il est possible d'avoir des repères de colonnes dans notre document, cela peut être pratique si on utilise le logiciel pour éditer un journal par exemple. On pourra facilement disposer notre contenu dans des colonnes parfaites. Pour montrer cette fonctionnalité nous allons demander un document avec 2 colonnes.</li>
<li><strong>Gouttière</strong> : Il ne s'agit pas d'une partie d'un toit mais de l'espace entre deux colonnes. Cela permet d'aérer un peu notre texte pour éviter la sensation d'un seul gros bloc. Je laisse la valeur par défaut ici.</li>
<li><strong>Marges</strong> : il y a 4 types de marge : En-tête (en haut), De-Pied (en bas), Petit fond (à gauche), Grand fond (à droite). Il s'agit de la taille des bordures que l'on veut laisser autour de notre document.</li>
<li><strong>Fond perdu</strong> (option disponible si l'on a cliqué sur "plus d'options") : il s'agit des bordures que les imprimeurs coupent lorsqu'ils utilisent leurs machines, ils demandent généralement à "ajouter" une zone en plus au document (0,5 cm par exemple) qui n'apparaitra pas sur le document. Nous allons donc rajouter des fonds perdus à notre document pour voir le résultat.</li>
<li><strong>Ligne-bloc</strong> (option disponible si l'on a cliqué sur "plus d'options") : il s'agit de zones supplémentaires pour écrire des annotations le plus généralement pour l'imprimeur, comme des notes, par exemple : "Attention, les deux pages sont bien face-à-face", cela peut aussi être un petit rappel pour nous sur un document en cours.</li>
</ul>
<h3 style="text-align: left;">Résultat du document créé</h3>
<p style="text-align: left;">Suite à nos choix lors de la création du document nous obtenons le résultat que l'on peut apercevoir ci-dessous. Tout d'abord on reconnait au premier coup d'œil l'environnement de travail des logiciels Adobe, la palette d'outils à gauche, les propriétés de l'outil sélectionné en haut et enfin le menu de travail à droite. Dans un second temps, nous apercevons la première page de notre document avec plusieurs cadres de couleur.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/screenshot.jpg"><img class="size-medium wp-image-8223  aligncenter" title="Rendu Indesign" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/screenshot-300x187.jpg" alt="Rendu Indesign" width="300" height="187" /></a></p>
<p style="text-align: center;"><em>Screenshot de notre document</em></p>
<p style="text-align: left;">Étudions donc ces différents cadres :</p>
<ul style="text-align: left;">
<li>Le cadre <strong>noir</strong> : il représente notre page physique, notre papier A4.</li>
<li>Le cadre <strong><span style="color: #ff00ff;">rose</span></strong> : on aperçoit que les lignes en haut et en bas de la page, il symbolise les marges que nous avions définies lors de la création.</li>
<li>Le cadre <span style="color: #cc99ff;"><strong>violet</strong></span> : il s'agit des deux colonnes que nous avons demandées. Celles-ci prennent toute la largeur du document (jusqu'aux marges). Entre les colonnes, on retrouve notre gouttière qui va "séparer" nos deux colonnes.</li>
<li>Le cadre <span style="color: #ff0000;"><strong>rouge</strong></span> : il est en dehors du cadre noir c'est-à-dire que tout ce qu'on va mettre dedans n'apparaîtra pas sur le document final. Rappelez-vous, c'est la marge dont a besoin l'imprimeur lors de son travail.</li>
</ul>
<p style="text-align: left;">Maintenant qu'on a vu la structure de notre document passons donc au remplissage !</p>
<h3 style="text-align: left;">Les gabarits</h3>
<p style="text-align: left;">Les gabarits sont un élément indispensable d'Adobe InDesign à connaître, ils permettent de définir les éléments que l'on souhaite retrouver sur les différentes pages. Imaginons que l'on souhaite toujours avoir le même pied de page sur toutes les pages de notre document, plutôt que copier notre pied de page sur chacune des pages on va définir un gabarit avec le pied de page et l'appliquer sur l'ensemble du document.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/gabarit.png"><img class="size-medium wp-image-8262  aligncenter" title="Gabarit" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/gabarit-300x264.png" alt="Gabarit" width="300" height="264" /></a></p>
<p style="text-align: left;">Lorsque l'on clique dans le menu de droite sur Pages nous avons 2 gabarits [Sans] un gabarit vide sur une page et A-Gabarit qui est un gabarit vide sur deux pages. On va en créer un nouveau, pour cela il suffit de faire un clic droit dans cette zone contenant les gabarits et cliquer sur "Nouveau gabarit...". InDesign va nous demander un préfixe pour les gabarits, par défaut cela va de A à Z, prenons donc B (puisque le A est déjà pris) et demandons pour une page.</p>
<p style="text-align: left;">Pour savoir sur quelle page vous travaillez, il suffit de regarder quel nom de page est écrit en blanc sur fond noir. Sur l'image du dessus, on voit que nous sommes sur la page 1. Par défaut après avoir créé un gabarit, vous vous retrouvez "dessus".</p>
<p style="text-align: left;">Il ne reste plus qu'à créer votre pied de page sur votre gabarit, pour cela utilisez l'outil texte (symbolisé par un T ) qui se trouve dans la palette à gauche. Centrez le, mettez de la couleur, tout ce que vous voulez. Vous devriez obtenir quelque chose comme ça :</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/pied.png"><img class="size-medium wp-image-8265  aligncenter" title="Gabarit - Pied de page" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/pied-300x29.png" alt="Gabarit - Pied de page" width="300" height="29" /></a></p>
<p style="text-align: left;">Pour appliquer ce gabarit à votre page 1, il suffit d'aller dans le menu "Pages" à droite et faire un clic droit sur votre page 1 et sélectionner "Appliquer un gabarit aux pages...". Sélectionnez votre gabarit (B-gabarit pour moi) et cliquez sur OK. La lettre B va apparaître en haut à droite de la représentation de votre page 1 pour vous informer que ce gabarit a bien été utilisé.</p>
<h3 style="text-align: left;">Gérer du texte sur plusieurs colonnes</h3>
<p style="text-align: left;">Lors de la création du document nous avons demandé deux colonnes dans notre document, il est l'heure de les remplir ! Pour commencer pour mettre du texte il faut créer une zone de texte avec l'outil symbolisé par un "T". Comme vous avez dû faire pour le pied de page. Tracez une zone (couleur <span style="color: #00ccff;"><strong>bleue</strong></span>) prenant toute la colonne de gauche puis faites de même dans la colonne de droite. Si cela ne colle pas parfaitement avec les colonnes, utilisez l'outil symbolisé par un curseur noir pour mettre la zone à la bonne taille.</p>
<p style="text-align: left;">Pour remplir rapidement une zone, il est possible d'y insérer du texte de substitution, c'est très simple : clic droit sur la zone de texte puis cliquez sur "Remplir avec le texte de substitution". La zone de texte va se remplir instantanément de texte en latin. Faites de même sur la colonne de droite.</p>
<p style="text-align: left;">Maintenant que les deux colonnes sont remplies on va compliquer les choses, rajoutez à la fin de la colonne de gauche du texte. Ce dernier n'a pas la place pour s'afficher, InDesign nous avertit en affichant un <span style="color: #ff0000;"><strong>+ rouge</strong></span> en bas à droite de la zone de texte.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/erreur.png"><img class="size-medium wp-image-8274  aligncenter" title="erreur" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/erreur.png" alt="" width="23" height="27" /></a></p>
<p style="text-align: center;"><em>Erreur : Du texte n'est pas affiché</em></p>
<p style="text-align: left;">Ce que nous aimerions, c'est que le texte continue dans la seconde colonne. Pour cela il suffit de cliquer sur ce "+", puis de cliquer dans la seconde colonne ou l'on souhaite voir le reste du texte s'inscrire. Et voilà le reste de notre texte s'affiche dans la nouvelle colonne ! Si vous allez dans le menu "Affichage" (en haut) et que vous cliquez sur "Afficher le chaînage du texte" vous verrez un lien bleu montrant l'enchainement des deux colonnes (ce qui est pratique quand on a des zones de texte dans tous les sens).</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/final.png"><img class="size-medium wp-image-8277 aligncenter" title="final" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/final-221x300.png" alt="" width="221" height="300" /></a></p>
<p style="text-align: center;"><em>Document final</em></p>
<h3 style="text-align: left;">Conclusion</h3>
<p style="text-align: left;">En suivant bien mes conseils dans cet article, vous devez être capable de :</p>
<ul>
<li>Créer un document InDesign</li>
<li>Configurer les propriétés du document</li>
<li>Gérer les gabarits (créer et lier à une page)</li>
<li>Créer des zone de textes et les relier entre elles</li>
</ul>
<p>Il vous reste encore de nombreux outils à connaitre dans InDesign pour utiliser au mieux ce logiciel, jouez donc avec la palette d'outil à gauche pour dessiner des formes, mettre de la couleur ou encore mettre des images exactement où vous voulez.</p>
<p>Pour continuer à découvrir ce logiciel vous pouvez regarder les podcasts d'Adobe sur leur site dédié : <a href="http://tv.adobe.com/fr/show/apprendre-indesign-cs4/">http://tv.adobe.com/fr/show/apprendre-indesign-cs4/</a></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/30/utiliser-adobe-indesign-cs4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gérez votre e-réputation et celle de vos sociétés sur les médias sociaux</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/27/gerer-votre-e-reputation-et-celle-de-vos-societes-sur-les-medias-sociaux/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/27/gerer-votre-e-reputation-et-celle-de-vos-societes-sur-les-medias-sociaux/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 08:42:10 +0000</pubDate>
		<dc:creator>Pierre-Lou Dominjon</dc:creator>
		
		<category><![CDATA[SEO]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[identite]]></category>

		<category><![CDATA[management]]></category>

		<category><![CDATA[numerique]]></category>

		<category><![CDATA[reputation]]></category>

		<category><![CDATA[Social Networks]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8002</guid>
		<description><![CDATA[Cet article est un complément à l'article de Jordan Amar, datant d'aout 2008 et traitant de la "réputation managment" d'une façon générale.
Nous aborderons ici deux aspects seulement survolés dans le précédent article : la gestion de la réputation des sociétés et cela, sur les réseaux sociaux en particulier.


D'après Wikipédia, la réputation est
"l'opinion (plus techniquement, l'évaluation [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article est un complément à l'<a href="http://www.mti.epita.fr/blogs/2008/08/29/reputation-management/">article de Jordan Amar</a>, datant d'aout 2008 et traitant de la "réputation managment" d'une façon générale.</p>
<p>Nous aborderons ici deux aspects seulement survolés dans le précédent article : la gestion de la réputation des sociétés et cela, sur les réseaux sociaux en particulier.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/reseaux_sociaux.jpg"><img class="size-medium wp-image-8158 aligncenter" title="reseaux_sociaux" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/reseaux_sociaux-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p><span id="more-8002"></span></p>
<p>D'après Wikipédia, la réputation est</p>
<blockquote><p>"l'opinion (plus techniquement, l'évaluation sociale) du public envers une personne, un groupe, ou une organisation."</p></blockquote>
<p>L'e-réputation n'est ni plus ni moins que son pendant, sur internet.</p>
<p>Avant d'être bonne ou mauvaise, une e-réputation doit exister. Cela implique que vous ou votre marque soyez présents sur internet.</p>
<p>A première vue, ne pas être présent sur internet semble une bonne solution pour éviter d'avoir une mauvaise e-réputation. Nous allons voir qu'il n'en est rien. Il suffit qu'un inconnu dise du mal de vous ou de votre entreprise de façon nominative pour que son avis apparaisse dans les résultats des moteurs de recherches, en particulier si vous êtes peu présents sur ces derniers.</p>
<p>L'idéal est donc de gérer votre réputation sur internet. Actuellement, en plus des sites institutionnels pour les sociétés, ce sont les réseaux sociaux qui permettent cela. Pour commencer, nous allons donc voir quels sont les réseaux sociaux à utiliser selon vos objectifs.</p>
<h2>Quel réseau, dans quel but ?</h2>
<p>Chaque réseau social possède ses avantages et ses inconvénients. Dans le domaine de l'e-réputation, il en va de même.</p>
<p>Nous allons couper cette étude en trois grands types de réseaux sociaux, en fonction des objectifs de votre présence sur internet.</p>
<p>Dans un premier temps, nous verrons les réseaux sociaux pour votre réputation personnelle. Dans un second temps, nous verrons les réseaux sociaux à destination professionnelle. Pour finir, nous verrons les réseaux sociaux utilisés dans un but publicitaire (car oui, la publicité sur les réseaux sociaux affecte l'e-reputation des marques).</p>
<h3>La réputation personnelle</h3>
<p>La réputation personnelle sur internet est un phénomène nouveau. Mais quand on sait que 60% des employeurs consultent ces derniers avant d'embaucher quelqu'un, on imagine tout de suite à quel point votre présence sur ces médias peut impacter votre futur. Que pensera un employeur de votre soirée d'anniversaire arrosée ... 35% des recruteurs indiquent avoir déjà refusé un candidat suite à la visite de son profil sur un réseau social.</p>
<p>En 2010, Facebook est <strong>le</strong> réseau social par excellence pour les particuliers. Compte tenu de la domination du marché qu'il exerce, il y a fort à parier que cela ne changera pas de si tôt.</p>
<p>Nous verrons dans le chapitre suivant comment gérer votre identité sur ce réseau.</p>
<p>Il existe d'autres réseaux (Hi5, Beebo, MySpace) mais votre présence sur ces dernier ne vous apportera pas grand chose et se concrétisera plus par une perte de temps qu'autre chose. En effet, leur visibilité est bien moindre que celle de Facebook, et peu de vos amis s'y trouveront. Petite exception pour Twitter qui peut être un bon moyen de faire connaître votre travail si vous travaillez dans le monde du web (développeur, graphiste, etc.) ou si vous êtes une entreprise.</p>
<p>D'une façon générale, faites attention aux relations que les gens peuvent faire. Vous postez par exemple des vidéos sur Youtube sous un pseudonyme, mais ce pseudonyme n'est-il pas associé à votre nom quelque part sur le web ?</p>
<h3>La réputation professionnelle</h3>
<p>Tout comme pour les particuliers, la présence d'une marque ou d'une entreprise sur les réseaux sociaux n'est plus quelque chose de facultatif en 2010.</p>
<p>Les réseaux sociaux permettent entre autre :</p>
<ul>
<li>De développer la notoriété de votre marque.</li>
<li>Créer de la communication à faible coût.</li>
<li>Recruter des "fans".</li>
<li>Écouter les clients.</li>
</ul>
<p>Il est important de savoir communiquer vers les inconditionnels de la marque. En effet, à l'ère des réseaux sociaux, votre réputation ne dépend plus de ce que vous dites de vous (ère de la télévision) mais de ce que les autres disent de vous. C'est aussi ça, le web 2.0.</p>
<p>Il est primordial de choisir votre cible avant de déterminer les réseaux sur lesquels vous allez communiquer et la façon avec laquelle vous allez le faire.</p>
<p>Tout d'abord, votre entreprise fait elle du B to B (Businness to Businness) ou du B to C (Businness to Consumers). En d'autre termes, souhaitez vous communiquer vers des utilisateurs finaux, ou bien vers des partenaires commerciaux ?</p>
<p>Avant de lancer votre plan de communication sur les médias sociaux, posez-vous quelques questions simples : Qui parlera au nom de mon entreprise ? Quel contenu puis-je proposer ? Où se trouve ma cible ?</p>
<p>Typiquement, les entreprises faisant du B2B trouveront une écoute sur Twitter, et pourront partager de courts messages sur ses activités, sur ses nouvelles acquisitions, ses nouveaux services. En revanche, la présence d'une marque souhaitant communiquer vers le consommateur n'a pas sa place sur Twitter. Facebook compte 17 millions d'utilisateurs en France. Twitter 200 000. Twitter n'est clairement pas (à ce jour) un outil B2C.</p>
<p>En revanche, Facebook vous permet de créer une "Page" sur laquelle vous pouvez mettre vidéos, images, jeux concours, animations, ou tout autre contenu. Des agences web se sont même spécialisées dans la conception de page sur Facebook pour de grandes marques.</p>
<h3>Publicitaire</h3>
<p>Besoin de promouvoir votre entreprise ? Envie de toucher du monde à faible coût ? Les réseaux sociaux sont l'une des solutions.</p>
<p>Une fois de plus, c'est Facebook qui remporte la palme du réseau social le plus adapté.</p>
<p>La page "fan" est l'un des plus puissants outils publicitaires qui ait été inventé. En effet, toute personne fan de votre page recevra sur sa homepage Facebook vos publications sur le mur de la page. En d'autres termes, il vous est possible d'envoyer directement de la publicité sur la homepage facebook de vos fans (elle sera au final vue en moyenne par 50% de vos fans). Et comme si cela ne suffisait pas, le taux de clic sur le mur dépasse tout ce que l'on peut trouver sur de la publicité web classique (4 à 6% en moyenne).</p>
<p>On en conclut donc qu'il faut attirer un maximum de fans sur sa page (campagnes de pub, buzz, jeux concours, etc.).</p>
<h2>Gérer votre e-réputation sur les grands réseaux sociaux</h2>
<h3>Facebook</h3>
<p>Tout d'abord, il est important d'avoir un profil public "propre". En effet, le profil public contient toutes les informations accessibles à tous, sur vous.</p>
<p>Veillez à configurer vos paramètres de confidentialité. Facebook propose une gestion avancée de ces paramètres - il est toujours bon de le savoir.</p>
<p>Pour finir, il est possible sur Facebook de savoir comment un autre utilisateur voit votre compte. Très utile pour gérer des réglages spécifiques pour des groupes de contacts donnés.</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/fb2.png"><img class="alignnone size-full wp-image-8175" title="fb2" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/fb2.png" alt="" width="500" height="205" /></a></p>
<p>Plutôt que de masquer toutes les informations sur vous et de passer pour quelqu'un de renfermé, prenez le temps de laisser des informations pertinentes sur votre profil public (expériences professionnelles, études, compétences, etc.). En d'autres termes, utilisez votre profil public Facebook comme un mini-CV. Les profils Facebook sont très bien représentés dans les moteurs de recherches, autant en tirer parti.</p>
<p>Attention tout de même, certaines informations sont publiques par défaut. Tel votre nom et votre prénom, mais surtout, les pages dont vous devenez fan. (ou les sites que vous aimez sur internet, via le bouton "like" fourni par Facebook !).</p>
<h3>Les site de réseautage social professionnel</h3>
<p>De nombreux sites de réseautage professionnel existent. Si vous souhaitez appuyer votre présence sur ces derniers, il vous faudra faire un choix.</p>
<p>Je vous conseille personnellement d'utiliser Viadeo (un petit français) et Linked'in. En effet, à eux deux, ils regroupent la grande majorité des recherches dans le domaine du réseautage professionnel, et la visibilité de votre profil sera alors presque à son maximum. Adhérer à d'autres sites pourrait même avoir l'effet inverse. En effet, si vous êtes sur trop de réseaux, vos profils seront forcement moins à jour, et les informations seront donc moins pertinentes.</p>
<h3>Twitter</h3>
<p>Twitter, c'est un peu comme les CV vidéos, mieux vaut savoir manier l'outil ou vous risquez de vous attirer les foudres des internautes. En effet, il est assez facile de tomber dans des stéréotypes tels que "je raconte ma vie" ou "je montre que je suis riche" ou "j'ai vraiment une vie pas intéressante".</p>
<p>Il faut éviter de tomber dans le "top 10 des relous sur twitter", disponible <a href="http://www.henrymichel.com/humour/top10-relous-twitter/">ici</a>.</p>
<h2>Gérer l'e-réputation de votre société/marque sur les grands réseaux</h2>
<p>Selon l'orientation de votre entreprise, le choix du réseau social à utiliser est primordial. Il est même possible d'en utiliser plusieurs. Il faut simplement éviter de faire de la simple duplication d'information de l'un à l'autre.</p>
<p>Typiquement, alors que Facebook s'oriente plus vers du B2C, Twitter s'oriente plus vers du B2B.</p>
<h3>Facebook</h3>
<p>Comme nous l'avons évoqué précédemment, Facebook est LE lieu où votre société doit être présente actuellement.</p>
<p>Que peut faire au juste une marque sur Facebook ?</p>
<ul>
<li>Promouvoir ses produits.</li>
<li>Avoir un échange avec des clients</li>
<li>Connaître le taux de retour sur ses publications (articles, commentaires, likes).</li>
<li>Une solution quasi-gratuite.</li>
<li>Cible potentielle : 17M d'utilisateurs en France.</li>
</ul>
<p>Mais surtout, Facebook est le lieu idéal pour créer une communauté. Point essencière à l'ère du web 2.0 où votre réputation est faite de ce que les autres disent de vous, et non de ce que vous dites de vous.</p>
<p>Les actions à mettre en place pour promouvoir votre activité :</p>
<ul>
<li>Pages Fan (à animer !)</li>
<li>Publicité sur la plateforme et les applications</li>
<li>Développement d'applications et de mini-jeux au nom de votre marque</li>
</ul>
<p>Les risques à évaluer :</p>
<ul>
<li>Dérives (pas de possibilité de modération du contenu partagé par les utilisateurs hors de votre page)</li>
<li>Outils de mesure du ROI (retour sur investissement perfectives)</li>
<li>Buzz négatif. Exemple de<a href="http://www.culture-buzz.fr/Nestle-et-la-gestion-du-scandale-Kit-kat-3515.html"> l'affaire Nestlé (KitKat)</a>.</li>
</ul>
<h3>Twitter</h3>
<p>Twitter a la particularité d'être un outil où, pour les entreprises, le flux est "bilatéral". En effet, on considère souvent que les réseaux sociaux sont un lieu d'expression pour les entreprises. Il en va de même sur Twitter. Mais Twitter peut aussi être utilisé comme un puissant outil de veille. Suivre les bonnes personnes permet de rester au courant de ce qui se passe dans votre domaine d'activité.</p>
<p>Attention, la communauté présente sur Twitter est globalement plus expérimenté sur internet, et moins à même d'accepter la publicité. Évitez donc d'utiliser le compte Twitter de votre entreprise uniquement pour de la promotion. Gardez bien dans l'esprit la notion d'échange !</p>
<h2>Quelques outils utiles</h2>
<p>Voici une liste d'outils fort utiles dans la gestion au quotidien de l'e-réputation de votre marque sur les réseaux sociaux.</p>
<h3>Alertes Google</h3>
<p>Pour savoir ce que l'on dit sur votre marque. Définissez en détail votre alerte pour suivre de nombreux médias : actualités, blogs, web, vidéos et groupes.</p>
<h3>Wikio</h3>
<p>C'est un moteur de recherche qui indexe en temps réel les articles provenant des médias online et des blogs. Il est possible de définir des alertes ou de créer un flux RSS spécifique à partir de mots clés.</p>
<h3>twirus.com</h3>
<p>Ce site permet de faire de la veille sur ce qui se dit sur Twitter.</p>
<h3>MonitorThis</h3>
<p>Il s'agit d'un métamoteur. C'est à dire un moteur de recherche permettant de rechercher dans plusieurs moteurs à la fois. En l'occurrence plus de 20.</p>
<h3>Tweetbeep</h3>
<p>C'est une sorte de Google alertes, dédié à Twitter. Il est possible de créer des alertes sur des mots clés, etc.</p>
<h2>Conclusion</h2>
<p>Nous avons donc eu un rapide aperçu de la puissance des réseaux sociaux dans la promotion de votre activité ou dans la mise en valeur de votre profil. Par rapport à cela nous avons vu de quelle façon il est possible de maîtriser au mieux son identité et sa présence, et donc de fait son e-réputation.</p>
<p>N'hésitez pas à poster dans les commentaires si vous souhaitez que l'un des points évoqués ci-dessous soit éclairci !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/27/gerer-votre-e-reputation-et-celle-de-vos-societes-sur-les-medias-sociaux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Aegisub : Sous-titrage Vidéo Avancé !</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/24/aegisub-sous-titrage-video-avance/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/24/aegisub-sous-titrage-video-avance/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:42:32 +0000</pubDate>
		<dc:creator>Guillaume Cisco</dc:creator>
		
		<category><![CDATA[Autres]]></category>

		<category><![CDATA[Aegisub]]></category>

		<category><![CDATA[Sous-titrage]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8297</guid>
		<description><![CDATA[Présentation
Aegisub est un outil très puissant d’édition de sous-titres vidéo gratuit. Il est aujourd’hui très utilisé par une communauté d’amateurs voulant sous-titrer eux-mêmes leurs vidéos favorites ou bien réaliser des karaokés.
De par sa gratuité et son énorme potentiel, Aegisub est aujourd’hui considéré comme une référence dans l’édition avancée de sous-titres.
En effet Aegisub propose un vaste [...]]]></description>
			<content:encoded><![CDATA[<h2>Présentation</h2>
<p class="MsoNormal">Aegisub est un outil très puissant d’édition de sous-titres vidéo gratuit. Il est aujourd’hui très utilisé par une communauté d’amateurs voulant sous-titrer eux-mêmes leurs vidéos favorites ou bien réaliser des karaokés.</p>
<p class="MsoNormal">De par sa gratuité et son énorme potentiel, Aegisub est aujourd’hui considéré comme une référence dans l’édition avancée de sous-titres.</p>
<p class="MsoNormal">En effet Aegisub propose un vaste choix de configuration, une interface intuitive, une multitude d’outils annexes ainsi qu’un large choix d’effets applicables à ses vidéos.</p>
<p class="MsoNormal">Nous ne pourrons pas aborder toutes les fonctionnalités dont dispose Aegisub dans cet article, nous nous concentrerons sur la création de sous-titres, à proprement dit, ainsi que de leurs styles et de la présentation de quelques effets de base.</p>
<p class="MsoNormal">Les fichiers produits par Aegisub sont des fichiers à l’extension .ass ce qui signifie Advanced SubStation Alpha en opposition avec le format qui le précédait .ssa qui signifie SubStation Alpha. En effet, auparavant, le logiciel SubStation Alpha était la référence en matière d’édition de sous-titres, mais il fut vite dépassé par les versions plus abouties nommées ass, aujourd’hui à la version 5 (finalisée en 2004).</p>
<p><span id="more-8297"></span></p>
<h3>Pré-requis:Installation</h3>
<p class="MsoNormal">Aegisub est disponible sur plusieurs plateformes : Linux, Windows, Mac, Free BSD que vous pouvez télécharger sur la page du site : <a href="http://www.aegisub.org/"><span style="font-size: 9.0pt;line-height:115%;font-family:">http://www.aegisub.org/</span></a><span style="font-size:9.0pt;line-height:115%;font-family:">.</span></p>
<p class="MsoNormal">Cet article et les astuces qui y sont présentées sont destinés à la plateforme Windows.</p>
<p class="MsoNormal">Pour le bon fonctionnement de l’affichage de toutes vos vidéos, je vous recommande d’installer un pack de codec nommé Statsuki Decoder Pack disponible à cette adresse : <a href="http://yatoshi.com/fr/index.php?p=downloads"><span style="font-size:9.0pt; line-height:115%;font-family:">http://yatoshi.com/fr/index.php?p=downloads</span></a><span style="font-size:9.0pt;line-height:115%;font-family:">.</span></p>
<p>Il est également recommandé de posséder les codecs DivX/Xvid sur sa machine ainsi que le codec WMV9 pour les vidéos High Definition et Full High Definition.</p>
<h2>Environnement</h2>
<p>L’interface de base est très sommaire et ne semble pas accueillante, mais nous allons voir que cela est pourtant très facile à utiliser :</p>
<p style="text-align: center"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/interface-de-base.png"><img class="size-full wp-image-8302 aligncenter" title="interface-de-base" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/interface-de-base.png" alt="" width="500" height="387" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">Tout d’abord, il nous suffit de charger la vidéo sur laquelle nous voulons travailler.</p>
<p class="MsoNormal">Pour cela, nous allons cliquer sur l’onglet Vidéo, puis « Ouvrir une Vidéo… » et sélectionner notre vidéo. Une fois cela fait, pour plus de confort, nous allons charger le spectre audio de la vidéo. Pour cela, il suffit de cliquer sur l’onglet Audio puis « Ouvrir l’audio de la vidéo ».</p>
<p>Nous obtenons alors une interface bien plus ergonomique avec ses éléments bien définis :</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/interface-video-audio.png"><img class="aligncenter size-full wp-image-8303" title="interface-video-audio" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/interface-video-audio.png" alt="" width="500" height="388" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">Nous avons donc notre interface découpée en plusieurs parties que je vais expliquer.</p>
<p class="MsoNormal">Tout d’abord, le menu avec les boutons principaux d’action sont listés tout en haut de l’application.</p>
<p class="MsoNormal">Ensuite, la partie en haut gauche affiche la vidéo (ici la présentation d’un site internet) sur laquelle nous allons travailler. Elle contient des boutons de lecture et mise en pause ainsi qu’une timeline et plusieurs informations sur les temps et frames (images) de la vidéo.</p>
<p class="MsoNormal">La partie en haut à droite est découpée en deux sous-parties, une partie haute et une partie basse :</p>
<ul>
<li>La partie haute permet de voir le spectre audio de la vidéo, et va ainsi nous permettre de « timer » (fixer les temps de début et de fin d’un sous-titre) la vidéo très facilement à la souris. Les boutons présents vont également nous être très utiles à la sélection exacte de temps de début et de fin de notre sous-titre.</li>
<li>La partie basse se compose d’un champ d’édition de texte, c’est ici que nous allons pouvoir écrire notre sous-titre. Elle comporte également quelques boutons, mais nous allons très vite voir que seuls quelques-uns sont intéressants.</li>
</ul>
<p>Enfin, la partie basse affiche l’historique de nos sous-titres et nous permet de naviguer entre eux, en les sélectionnant par clic, ou bien d’effectuer des actions via le clique droit.</p>
<p>Maintenant que nous avons vu une légère présentation de l’interface de ce logiciel, nous allons pouvoir passer à la pratique.</p>
<p class="MsoNormal">
<h2>Pratique</h2>
<h3>Paramètres du fichier de sous-titre</h3>
<p class="MsoNormal">Il est très important de fixer les paramètres du fichier de sous-titre en tout premier lieu.</p>
<p>Pour cela, nous allons cliquer que le bouton « Ouvrir les propriétés » (petit carré gris) sous l’onglet Automatisme et obtenir ceci :</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/proprietes-du-script.png"><img class="aligncenter size-full wp-image-8305" title="proprietes-du-script" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/proprietes-du-script.png" alt="" width="500" height="387" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">Il est extrêmement important de cliquer sur le bouton « De la vidéo » afin d’avoir la bonne résolution d’affichage de sous-titre sur notre vidéo en phase de production (modifier cette résolution est destiné aux utilisateurs avancés du logiciel et permet de produire des scripts pours des vidéos de différentes résolutions : SD, HD, FHD)</p>
<h3>Mon premier sous-titre</h3>
<p class="MsoNormal">Nous allons créer notre premier sous-titre. Pour cela, nous allons rentrer dans notre champ de saisie de texte à droite une phrase, par exemple : « Mon premier sous-titre » et ensuite appuyer sur les touches Ctrl+Entrée de notre clavier afin de la valider.</p>
<p class="MsoNormal">Note : le fait d’appuyer sur les touches Ctrl+Entrée permet de valider notre sous-titre ainsi que de pouvoir continuer à travailler sur celui-ci. Si nous effectuons seulement un appui sur la touche Entrée, le sous-titre sera validé, et nous passerons automatiquement au sous-titre suivant.</p>
<p class="MsoNormal">Par défaut, un sous-titre possède une durée de cinq secondes. Notre sous-titre va donc durer cinq secondes de 0 à 5 secondes de vidéo.</p>
<p>Nous pouvons bien évidemment tester en lançant la vidéo depuis le début et nous apercevoir sur la prévisualisation que notre sous-titre apparaît bel et bien :</p>
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/premier-sous-titre.png"><img class="aligncenter size-full wp-image-8304" title="premier-sous-titre" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/premier-sous-titre.png" alt="" width="500" height="388" /></a></p>
<p class="MsoNormal">On s’aperçoit donc que par défaut, il est placé en bas de l’écran, la position du sous-titre est biensûr configurable et plusieurs presets sont prédéfinis.</p>
<p class="MsoNormal">A présent nous allons passer au Time !</p>
<h3>Time</h3>
<p class="MsoNormal">Le time est l’action qui permet de fixer un temps de début et de fin à notre sous-titre. Nous allons pour cela voir deux modes de time, le mode par temps et le mode par frame.</p>
<p class="MsoNormal">Pour le mode par temps nous allons utiliser le spectre audio de la vidéo. En effet, nous pouvons facilement sélectionner à la souris, un espace du spectre audio en déplaçant les petites tirettes.</p>
<p class="MsoNormal">Sur le côté droit de cette partie, nous apercevons également des tirettes permettant d’agrandir verticalement ou horizontalement notre spectre pour plus de visibilité, par exemple pouvoir détecter le début et la fin d’un son.</p>
<p class="MsoNormal">L’autre partie très intéressante est la zone contenant les boutons. En laissant la souris au dessus des boutons, nous avons une description de leurs actions. Ici nous allons nous pencher plus particulièrement sur les boutons au milieu, à savoir :</p>
<ul>
<li>Lit 500 ms avant la sélection (Q)</li>
<li class="MsoNormal">Lit 500 ms après la sélection (N)</li>
<li>Lit les 500 ms du début de la sélection (E)</li>
<li>Lit les 500 ms de fin de la sélection (D)</li>
</ul>
<p>Ces boutons vous seront très utiles pour placer correctement vos temps de début et de fin de sous-titre, n’hésitez pas à les utiliser et à en abuser !</p>
<p>Vous remarquerez également que lorsque vous déplacez les tirettes de la durée du sous-titre dans le spectre audio, les valeurs se mettent à jours dans la partie historique.</p>
<p class="MsoNormal">ATTENTION, cela ne veut pas dire que les temps ont été sauvegardés ! Il faut pour cela appuyer sur le bouton de validation (coche verte F8/G)) ou bien se positionner dans la zone de saisie de texte et exécuter un ctrl+Entrée afin de bien valider les modifications.</p>
<p class="MsoNormal">Le mode par frame est plus délicat mais pas plus difficile.</p>
<p class="MsoNormal">En réalité, il permet d’être beaucoup plus précis que le time par temps, puisqu’il se base directement sur les images et est donc utile si vous voulez qu’un sous-titre dure la longueur d’un plan.</p>
<p class="MsoNormal">Pour activer le mode par frame, il suffit de cocher la case Image tout à droite dans les boutons du champs de saisie, on bascule alors en mode Frame, et l’on s’aperçoit maintenant dans l’historique et dans les cases au dessus, que nous n’avons plus de valeur en unité de temps, mais seulement des entiers (le numéro de la frame).</p>
<p class="MsoNormal">En se déplaçant sur la vidéo, on peut s’apercevoir que nous avons les informations de temps et de frame qui s’affiche, nous pouvons alors à tout moment connaître la valeur de la frame en cours, et ainsi poster dans les cases prévues à cet effet dans la zone de champ de saisie, les valeurs de début et de fin désirées.</p>
<h3>Edit</h3>
<p class="MsoNormal">Notre sous-titre par défaut n’est pas très joli. Heureusement, nous pouvons le customiser à souhait.</p>
<p class="MsoNormal">Vous avez sans doute remarqué que la zone de saisie de champ texte possède des actions de bases comme mettre en gras/italique/etc. le texte. Nous n’utiliserons pas ces fonctions, car elles ajoutent directement du code dans notre champ de saisie et il devient alors beaucoup moins lisible.</p>
<p class="MsoNormal">C’est pour cela que nous allons créer des styles !</p>
<p class="MsoNormal">Pour cela, nous allons ouvrir le gestionnaire de Styles (le petit S rose sous l’onglet Automatisme) et obtenir ceci :</p>
<p class="MsoNormal">
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/gestionnaire-de-styles.png"><img class="aligncenter size-full wp-image-8300" title="gestionnaire-de-styles" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/gestionnaire-de-styles.png" alt="" width="500" height="388" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">Ceci n’est en effet pas très parlant.</p>
<p class="MsoNormal">En réalité, nous pouvons créer des containers qui contiendront nos styles et ainsi pouvoir les charger à chaque projet car ils seront mémorisés par Aegisub.</p>
<p class="MsoNormal">Nous allons donc cliquer sur le bouton Nouveau en haut, et rentrer comme nom de container « Tutorial » par exemple. Nous avons donc créé un container, nous pouvons donc rajouter des styles à celui-ci. Pour cela, nous allons cliquer sur le bouton Nouveau correspondant au script actif (en bas à droite).</p>
<p class="MsoNormal">Nous avons alors une boîte de dialogue qui apparaît, avec énormément de configurations possibles ainsi qu’un aperçu.</p>
<p>Voici un exemple de configuration :</p>
<p style="text-align: center;">
<p style="text-align: center;"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/exemple-style.png"><img class="aligncenter size-full wp-image-8299" title="exemple-style" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/exemple-style.png" alt="" width="500" height="289" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">Une fois les configurations terminées, nous pouvons alors cliquer sur Accepter, et notre style apparaît dans le listing du script actif.</p>
<p class="MsoNormal">ATTENTION. Pour sauvegarder notre style, il ne faut pas oublier de cliquer sur le bouton « Copier dans le stockage » afin de pouvoir le retrouver sur d’autres projets.</p>
<p class="MsoNormal">Voilà, nous avons créé notre style, maintenant nous allons pouvoir l’appliquer sur notre sous-titre !</p>
<p class="MsoNormal">Pour cela, sur la partie de champ de saisie, nous pouvons voir une liste déroulante avec la valeur par défaut mise à Défault de base, nous pouvons à présent sélectionner le style que nous avons créé.</p>
<p class="MsoNormal">La méthode que nous venons de voir est la méthode la plus propre permettant d’appliquer un style à un sous-titre, puisqu’elle n’affiche pas de code directement dans le champ de saisie et permet des modifications simples à réaliser, ainsi qu’une utilisation et une portabilité optimale.</p>
<h3>Effets</h3>
<p class="MsoNormal">Maintenant que nous avons de jolis sous-titres et que nous pouvons leur donner des temps de début et de fin, il est intéressant de pouvoir également leur appliquer des effets !</p>
<p class="MsoNormal">Il existe énormément d’effets disponibles sous Aegisub, une liste ainsi que des exemples complets peuvent être vus sur <a href="http://aegisub.cellosoft.com/docs/ASS_Tags">ce lien</a>.<a href="http://aegisub.cellosoft.com/docs/ASS_Tags"><span style="font-size:9.0pt; line-height:115%;font-family:"></span></a></p>
<p class="MsoNormal">L’aide d’Aegisub est également très complète et la communauté y est très active. N’hésitez pas à vous y rendre (touche F1).</p>
<p class="MsoNormal">Nous allons ici décrire quelques effets qui sont les plus utilisés et qui permettent de jolis rendus.</p>
<p class="MsoNormal">Tout d’abord les effets de fondus.</p>
<p class="MsoNormal">Il y a deux méthodes pour créer un effet de fondu, une simple et une complexe, nous aborderons la simple.</p>
<p class="MsoNormal">À savoir la méthode fad.</p>
<p class="MsoNormal">Voici sa signature :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\fad<span class="br0">&#40;</span>fadein, fadeout<span class="br0">&#41;</span></pre></div></div>

<p class="MsoNormal">Cette fonction prend donc deux arguments fadein et fadeout.</p>
<p class="MsoNormal">Fadein sera le temps que met le sous-titre pour apparaitre de invisible à opaque. Et fadeout le temps que le sous-titre met pour disparaitre de opaque à invisible.</p>
<p class="MsoNormal">Par exemple dans mon champ de texte, j’aurai :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#123;</span>\fad<span class="br0">&#40;</span><span style="">1200</span>, <span style="">250</span><span class="br0">&#41;</span><span class="br0">&#125;</span> Mon premier sous-titre</pre></div></div>

<p class="MsoNormal">Pendant 1,2 s, le sous-titre apparait, il reste opaque, et sur le dernier quart de seconde de sa durée, il disparait.</p>
<p class="MsoNormal">Note : notez que nous devons insérer les fonctions dans des accolades. En effet, les accolades permettent d’informer au logiciel qu’il doit exécuter du code et non afficher le texte.</p>
<p class="MsoNormal">Voici des méthodes de transformation de taille de sous-titre :</p>
<p class="MsoNormal">Font Size :\fs size</p>
<p class="MsoNormal">Font Scale en x : \fscx scale</p>
<p class="MsoNormal">Font Scale en y : \fscy scale</p>
<p class="MsoNormal">Ces fonctions sont très faciles à comprendre, en leur passant un entier, on peut soit augmenter ou diminuer la taille du sous-titre, seulement augmenter ou diminuer sa longueur, ou seulement augmenter ou diminuer sa hauteur.</p>
<p class="MsoNormal">Passons à un effet un peu plus sympathique, le mouvement :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\pos<span class="br0">&#40;</span>X, Y<span class="br0">&#41;</span></pre></div></div>

</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\move<span class="br0">&#40;</span>x1, y1, x2, y2<span class="br0">&#41;</span></pre></div></div>

</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\move<span class="br0">&#40;</span>x1, y1, x2, y2, t1, t2<span class="br0">&#41;</span></pre></div></div>

<p>La fonction pos, permet simplement de fixer un sous-titre à l’écran suivant des coordonnées en x et en y c’est pourquoi il est très important au début de la création de notre fichier de sous-titre de spécifier la bonne résolution en paramètre.</p>
<p class="MsoNormal">On voit également que la fonction move est surchargée.</p>
<p class="MsoNormal">Dans le premier cas, la fonction prend en paramètres des coordonnées de départ et des coordonnées d’arrivées en x et y. Le mouvement va donc s’effectuer sur toute la durée du sous-titre.</p>
<p class="MsoNormal">Si nous voulons que notre sous-titre ne se déplace que pendant une certaine période de son affichage à l’écran, nous devons spécifier un temps de début et un temps de fin, ceux-ci biensûr, relatifs à la durée du sous-titre et non la durée entière de la vidéo.</p>
<p>Exemple :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#123;</span>\move<span class="br0">&#40;</span><span style="">100</span>, <span style="">150</span>, <span style="">300</span>, <span style="">350</span>, <span style="">500</span>, <span style="">1500</span><span class="br0">&#41;</span><span class="br0">&#125;</span></pre></div></div>

<p class="MsoNormal">Notre sous-titre ne va bouger qu’une demi-seconde après avoir été affiché, et va se déplacer des coordonnées (100,150) à (300,350) jusqu’à ce que le sous-titre ait atteint une durée d’affichage totale d’une seconde et demie. Il restera ensuite à cette position jusqu’à la fin de son affichage.</p>
<p class="MsoNormal">Enfin, la fonction la plus intéressante d’Aegisub et peut-être la plus utilisée, la transformation :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\t<span class="br0">&#40;</span>style modifiers<span class="br0">&#41;</span>
\t<span class="br0">&#40;</span>accel, style modifiers<span class="br0">&#41;</span>
\t<span class="br0">&#40;</span>t1, t2, style modifiers<span class="br0">&#41;</span>
\t<span class="br0">&#40;</span>t1, t2, accel, style modifiers<span class="br0">&#41;</span></pre></div></div>

<p>Nous allons ici nous concentrer sur la surcharge:</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">\t<span class="br0">&#40;</span>t1, t2, style modifiers<span class="br0">&#41;</span></pre></div></div>

<p>Nous avons en paramètres des temps de début et de fin ainsi qu’un appel de fonction.</p>
<p>Exemple :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#123;</span>\t<span class="br0">&#40;</span><span style="">0</span>,<span style="">5000</span>,\fscx <span style="">200</span><span class="br0">&#41;</span><span class="br0">&#125;</span>Sous-titre</pre></div></div>

<p>Cette action va simplement créer une animation d’élargissement du sous-titre sur une période de 0 à 5 secondes de la durée d’affichage. Facile !</p>
<p>Vous pouvez combiner les transformations, et créer alors des effets bien plus complexes. N’hésitez pas à regarder la multitude d’exemples sur l’aide en ligne.</p>
<p>Exemple :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#123;</span>\fscx0, \fscy0, \t<span class="br0">&#40;</span><span style="">0</span>,<span style="">500</span>,\fscx100, \fscy100<span class="br0">&#41;</span><span class="br0">&#125;</span>Boo!</pre></div></div>

<p>Le sous-titre est invisible au départ car sa taille est fixée à 0, et il apparaît en une demi-seconde via une animation d’agrandissement à sa taille réelle.</p>
<h2>Tips</h2>
<p>Maintenant que nous savons faire pas mal de choses sur les sous-titres, voici quelques astuces pour rendre vos sous-titres plus lisibles, ou vous aider dans votre utilisation d’Aegisub.</p>
<h3>Décaler des sous titres</h3>
<p>Une fonction très pratique d’Aegisub est de pouvoir décaler toute une série de sous-titres ensemble.</p>
<p>Cette fonction est d’ailleurs très facile et intuitive à utiliser. Si l’on ne veut modifier les temps que de certains sous-titres, on veillera à les sélectionner dans la zone d’historique.</p>
<p>Ensuite, on ouvre l’onglet Synchronisation puis Décalage Temporel (ou bien Ctrl+I).</p>
<p>On arrive sur cette fenêtre :</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/decaler-les-sous-titre.png"><img class="size-full wp-image-8298  aligncenter" title="decaler-les-sous-titre" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/decaler-les-sous-titre.png" alt="" width="500" height="297" /></a></p>
<p>Vous arrivez alors sur une page de configuration, vous permettant de décaler vos sous-titres.</p>
<p>Notez que si vous aviez sélectionné des sous-titres, il vous faudra cocher la case « Colonnes Sélectionnées ». Encore une fois, des descriptions apparaissent sur chaque case à cocher, lorsque vous laissez votre souris au dessus d’une de ces dernières.</p>
<p>Enfin, il ne vous reste plus qu’à accepter.</p>
<h3>Astuce de time</h3>
<p>Le time est souvent considéré comme un art.</p>
<p>En effet, voici une astuce vous permettant de créer des sous-titres qui ne feront pas mal à la tête au spectateur :</p>
<p>Ce qui est important, c’est que le sous-titre ne « saute » pas, qu’il ne « clignote » pas.</p>
<p>Pour cela, il est recommandé après avoir timé par temps, de timer par frame, pour qu’au maximum, un sous-titre ne commence pas sur un autre plan, et ne finisse pas sur un autre plan.</p>
<p>Bien évidemment, parfois il est impossible de réaliser cela. Mais sachez que couper quelques centièmes de seconde du temps de parole et plus agréable à l’œil du spectateur qu’un dépassement de plan.</p>
<h3>Fluidité du sous-titre</h3>
<p>Enfin, votre sous-titre doit être le plus lisible possible, préférez du blanc avec contour noir et évitez absolument les ombres. Aussi utilisez une police lisible et d’une taille correcte pour qu’un spectateur puisse lire correctement à une distance de plus de 2 mètres.</p>
<h2>Conclusion</h2>
<p>Une petite précision s’impose quant à la production de notre fichier de sous-titre. Une fois notre fichier terminé, il nous suffit de l’enregistrer et il portera une extension .ass.</p>
<p>Il y a alors deux méthodes de visualisation des sous-titres : une méthode dite SoftSub et une méthode dite HardSub.</p>
<p>La méthode de SoftSub, consiste simplement à avoir un fichier .ass et un fichier vidéo du même nom. En effet, la plupart des Media Players aujourd’hui supportent les fichiers de sous-titres .ass et importent directement les scripts.</p>
<p>Enfin, la méthode de HardSub qui est plus utilisée pour des sous-titres contenant beaucoup d’effets lourds ou bien contenant des polices non natives sur la plupart des plateformes. Également, lorsque le créateur ne veut pas donner les sources de sa création (effets avancés, karaoké).</p>
<p>Cette méthode consiste à directement incruster les sous-titres à la vidéo, et nécessite donc une phase d’encodage spécifique pour l’intégration du fichier via des plugins et scripts adaptés. Mais ceci ne rentre pas dans notre découverte et première utilisation d’Aegisub.</p>
<p>Bien que nous n’ayons vu qu’une toute petite partie des fonctionnalités offertes par Aegisub, nous pouvons à présent nous rendre compte de la puissance de ce logiciel et de son potentiel de création qui en font aujourd’hui une référence absolue !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/24/aegisub-sous-titrage-video-avance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Créer une vidéo Stop-motion avec Adobe Première Pro</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/21/creer-une-video-stop-motion-avec-adobe-premiere-pro/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/21/creer-une-video-stop-motion-avec-adobe-premiere-pro/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 08:42:05 +0000</pubDate>
		<dc:creator>Camille Blin</dc:creator>
		
		<category><![CDATA[Adobe]]></category>

		<category><![CDATA[Autres]]></category>

		<category><![CDATA[Adobe Premiere Pro CS4]]></category>

		<category><![CDATA[Tutoriel Stop Motion]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8015</guid>
		<description><![CDATA[Pour une définition détaillée et les best practices à avoir pendant la prise de photos, je vous redirige vers l'article d'Alexandre Gazuit traitant du stop-motion plus généralement.
Dans cet article, je vais supposer que vous avez déjà toutes les photos dont vous avez besoin pour commencer le montage de votre vidéo. Petite précision sur les photos [...]]]></description>
			<content:encoded><![CDATA[<p>Pour une définition détaillée et les best practices à avoir pendant la prise de photos, je vous redirige vers <a href="http://www.mti.epita.fr/blogs/2010/07/02/les-stop-motion-historique-et-techniques-actuelles/">l'article d'Alexandre Gazuit</a> traitant du stop-motion plus généralement.</p>
<p>Dans cet article, je vais supposer que vous avez déjà toutes les photos dont vous avez besoin pour commencer le montage de votre vidéo. Petite précision sur les photos avant de commencer: nous allons créer des vidéos au format HDTV, c'est-à-dire une résolution de 1920 x 1080, donc il serait préférable que vos photos soient d'une dimension équivalente. Utilisez Photoshop si vous voulez toutes les redimensionner.</p>
<p><span id="more-8015"></span></p>
<h2>Utiliser Adobe Première Pro pour réaliser sa vidéo</h2>
<h3>Configuration de Adobe Première Pro</h3>
<p>Il est temps de lancer Adobe Première Pro. Je me base sur CS4 mais je pense que les manipulations sont quasi-identiques sur le CS5. Petite précision: ma version est en anglais, désolé pour les termes anglais mais vous pourrez vous y retrouver grâce aux images. Une fois lancé, cliquez sur « New Project » (Nouveau projet), cela va ouvrir cet écran :</p>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/new_project.jpg"><img class="alignnone size-full wp-image-8020" title="new_project" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/new_project.jpg" alt="" width="445" height="465" /></a><br />
Donnez à votre projet un nom et un répertoire ou enregistez-le. Le deuxième onglet contient les différents chemins où Premiere va enregistrer vos captures et vos aperçus ; il est préférable de les spécifier sur un disque dur rapide et avec de l'espace libre. Enfin cliquez OK.</p>
<p>Une nouvelle fenêtre s'ouvre. Dans le premier onglet, choisissez HDV 1080p presets, donnez un nom à votre séquence, puis dans le 2<sup>ème</sup> onglet vous n'avez normalement rien à changer, mais vérifiez qu'il utilise bien le mode d'édition : HDV 1080p a 23,976 images/secondes. Le dernier onglet n'est pas important pour le moment, vous pourrez ajouter vos musiques plus tard.</p>
<p>Puis Premiere va charger tout ce dont vous avez besoin et vous présenter un écran identique à celui ci-dessous. Pour plus de confort, vous pouvez redimensionner chaque élément de l'interface comme si c'était une fenêtre classique.</p>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/premier_ecran.jpg"><img class="alignnone size-full wp-image-8021" title="premier_ecran" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/premier_ecran.jpg" alt="" width="588" height="351" /></a></p>
<p>Il reste encore une étape importante avant de commencer à importer nos photos: celle de la configuration de l'importation. En effet vous pouvez configurer la durée par défaut de chaque image importées, sinon vous devrez changer cette durée sur toutes les photos.</p>
<p>Donc allez dans Edit, Preferences, General, vous allez avoir la fenêtre suivante :</p>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/settings.jpg"><img class="alignnone size-full wp-image-8022" title="settings" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/settings.jpg" alt="" width="500" height="470" /></a></p>
<p>Maintenant, dans le champ Still Image Default Duration changez sa valeur par ce que vous voulez. 2 frames est la configuration classique pour du Stop-Motion, cela permet d'avoir 12 photos par secondes pour une video de 24 fps ;</p>
<h3>Espace de Travail</h3>
<p>Nous allons maintenant faire un bref tour d'horizon de l'interface de Premiere Pro.</p>
<ul class="unIndentedList">
<li> Projet: Vous retrouverez ici tous vos fichiers</li>
<li> Effets: Liste des effets disponibles</li>
<li> Informations: Petit aperçu de vos fichiers, et autres informations</li>
<li> Aperçu: Aperçu de votre vidéo finale</li>
<li> TimeLine: Espace où vous placez vos fichiers et modifiez le comportement de votre vidéo</li>
<li> Niveau Audio: Réglage du volume</li>
<li> Outils: Petite palette d'outils utiles</li>
</ul>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/description.jpg"><img class="alignnone size-full wp-image-8023" title="description" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/description.jpg" alt="" width="500" height="304" /></a></p>
<h3>Importation</h3>
<p>Quand vous utilisez Premiere ou un autre logiciel, vous avez 3 façons pour faire des choses:</p>
<ol>
<li>Le clic droit</li>
<li>Aller dans le menu</li>
<li>Ou déplacer les fichiers depuis un dossier dans l'application</li>
</ol>
<p>Et donc pour importer, c'est la même chose. Vous pouvez :</p>
<ol>
<li>Cliquer droit dans la partie projet</li>
<li>Aller dans File puis Import</li>
<li>Ou déplacer les fichiers d'un dossier dans la partie projet</li>
</ol>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/import.jpg"><img class="alignnone size-full wp-image-8024" title="import" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/import.jpg" alt="" width="238" height="133" /></a></p>
<p>Après avoir utilisé une de ces façons, Première va vous indiquer qu'il est en train d'importer vos photos et ensuite elles vont apparaître dans la partie Projet de l'interface avec tous les autres fichiers que vous utilisez.</p>
<p>C'est toujours pratique de rester organisé dans cette partie. Pour cela, vous pouvez créer des dossiers et l'arborescence que vous désirez.</p>
<p>Une fois toutes vos photos importées, vous pouvez désormais toutes les sélectionner (Ctrl-clic ou Shift-clic pour faire une sélection précise) et les glisser vers la timeline video1. Première va ensuite créer un aperçu de chacune d'elles; cela peut prendre plusieurs minutes si vous avez glissé beaucoup de fichiers.</p>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/zoom.jpg"><img class="alignnone size-full wp-image-8025" title="zoom" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/zoom.jpg" alt="" width="500" height="299" /></a></p>
<p>Si vous trouvez que vos photos sont trop serrées dans votre timeline, vous pouvez zoomer en utilisant la barre encadrées en rouge ci-dessus, ou alors utiliser les raccourcis clavier pour Agrandir (=) ou Réduire (-).</p>
<p>La ligne rouge au-dessus de vos photos dans la timeline indique que l'aperçu vidéo n'a pas encore été généré, et que si vous jouez la vidéo, elle ne sera pas dans sa meilleure qualité. Pour y remédier, tapez sur la touche Entrée. Cette boîte de dialogue va s'ouvrir pendant que Premiere crée les fichiers pour la création de l'aperçu et va les sauvegarder sur le disque que vous avez spécifié en début de projet.</p>
<p><!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/render.jpg"><img class="alignnone size-full wp-image-8026" title="render" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/render.jpg" alt="" width="374" height="265" /></a></p>
<p>Par défaut, Première joue la vidéo une fois le rendu terminé. Sinon, appuyez sur la barre d'espace une fois la partie aperçue sélectionnée. Nous pouvons maintenant faire les ajustements et donc éditer.</p>
<h3>Édition</h3>
<p>Maintenant, nous allons voir les différentes formes basiques d'édition que vous pouvez faire sur vos photos.</p>
<ul class="unIndentedList">
<li> Remplacer</li>
</ul>
<p>Ceci est le comportement par défaut, si vous glissez ou copiez un fichier dans la timeline il va remplacer tout ce qu'il doit pour prendre sa place.</p>
<ul class="unIndentedList">
<li> Insertion</li>
</ul>
<p>Si vous voulez juste rajouter une photo car vous en avez oubliée une, vous le pouvez en pressant Ctrl quand vous glissez ce nouveau fichier dans votre timeline, ou utilisez Ctrl + Shift + V si ce sont des fichiers déjà copiés.</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/edit.jpg"><img class="alignnone size-full wp-image-8027" title="edit" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/edit.jpg" alt="" width="500" height="245" /></a></p>
<ul class="unIndentedList">
<li> Supprimer</li>
</ul>
<p>C'est la suppression par défaut. Vous pouvez utilisez Retour ou Delete, cela va supprimer le fichier sélectionné mais il va rester un trou là où se trouvait le fichier dans la timeline.</p>
<ul class="unIndentedList">
<li> Suppression sans trou</li>
</ul>
<p>Alt + Retour ou Shift + Delete va supprimer les fichiers sélectionnés et supprimer les trous laissés dans la timeline par ces fichiers.</p>
<p>Vous pouvez ensuite vous amusez à appliquer des effets sur vos fichiers, mais pour cela je préfère encore utiliser Adobe After Effects.</p>
<p>Maintenant que vous avez votre vidéo avec son rendu final nous pouvons commencer l'exportation.</p>
<h3>Exporter</h3>
<p>Allez dans File <code>-&amp;gt;</code> Export <code>-&amp;gt;</code> Media pour ouvrir la fenêtre d'exportation.<br />
<!--[if gte vml 1]> <![endif]--><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/export.jpg"><img class="alignnone size-full wp-image-8028" title="export" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/export.jpg" alt="" width="500" height="257" /></a></p>
<p>Donc ici nous allons exporter dans un format de 1080p, mais grâce à Adobe Media Encoder vous serez capable de créer une liste de format dans lequel vous voulez exporter votre vidéo.</p>
<p>Donc, commençons notre procédure pour avoir notre vidéo en haute définition. Nous pourrions laisser tous les paramètres par défaut, mais vous ne verrez aucune différence entre la vidéo que nous aurons et celle par défaut. La seule différence notable sera le poids de la vidéo.</p>
<p>Donc au début, sélectionnez le format H.264 puis donnez un nom de sortie à votre fichier puis son emplacement d'enregistrement et pour finir, utilisez ses paramètres :</p>
<p><strong>Onglet vidéo</strong></p>
<ul type="disc">
<li>TV Standard: PAL video</li>
<li>Frame Width: Height: 1920 x 1080 pixels</li>
<li>Frame Rate: 23.976</li>
<li>Pixel Aspect Ratio: Widescreen 16:9</li>
<li>Bitrate Encoding: VBR, 1 Pass</li>
<li>Target Bitrate:      20 Mbps</li>
<li>Max Bitrate: 20 Mbps</li>
</ul>
<p><strong>Onglet audio</strong></p>
<ul type="disc">
<li>Codec: AAC</li>
<li>Output Channels: Stereo</li>
<li>Frequency: 48 kHz</li>
<li>Audio Quality: High</li>
<li>Bitrate: 128 (plus si vous pensez que cela peut faire une différence)</li>
</ul>
<p>Pour finir cliquez sur Ok, cela lancera Adobe Media Encoder et rajoutera votre fichier dans la queue du logiciel.</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/media-encoder.jpg"><img class="alignnone size-full wp-image-8029" title="media-encoder" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/media-encoder.jpg" alt="" width="500" height="395" /></a></p>
<p>Une fois tous vos formats créés, la dernière chose à faire est de cliquer sur Start Queue, et de partir faire quelque chose d'autre pendant que votre ordinateur encode vos vidéos.</p>
<p>Une fois l'encodage terminé, vous pouvez brancher votre PC à un video projecteur et montrer votre film à tous vos amis.</p>
<h2>Ajouter des effets avec After Effects</h2>
<h3>Tour rapide de l'interface de AE</h3>
<p>D'abord, voilà un bref aperçu de l'interface d'Adobe After Effects :</p>
<div id="attachment_10125" class="wp-caption alignnone" style="width: 310px"><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/07/ae.png"><img class="size-medium wp-image-10125" title="ae" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/07/ae-300x187.png" alt="interface AE CS4" width="300" height="187" /></a><p class="wp-caption-text">interface AE CS4</p></div>
<h3>Ajouter des effets à son film</h3>
<p>Pour cela, je vous renvoie sur l'article spécifique à After Effects CS5, il y a un tutoriel sur comment enlever un fond vert pour pouvoir faire de l'incrustation, en fin de l'article.</p>
<h2>Conclusion</h2>
<p>J'espère que cet article a pu vous être utile dans la création de votre première vidéo en Stop-Motion.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/21/creer-une-video-stop-motion-avec-adobe-premiere-pro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Initiation à la BI et à l’OLAP</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/18/initiation-a-la-bi-et-a-l%e2%80%99olap/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/18/initiation-a-la-bi-et-a-l%e2%80%99olap/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 08:42:32 +0000</pubDate>
		<dc:creator>Fabien BERNARD</dc:creator>
		
		<category><![CDATA[Autres]]></category>

		<category><![CDATA[BI]]></category>

		<category><![CDATA[Business Intelligence]]></category>

		<category><![CDATA[JPivot]]></category>

		<category><![CDATA[JRubik]]></category>

		<category><![CDATA[Mondrian]]></category>

		<category><![CDATA[OLAP]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8113</guid>
		<description><![CDATA[Tout les entreprises veulent se mettre à la BI, et elles ont raison. La valeur ajoutée que peut apporter un environnement de BI dans une entreprise est simplement stupéfiante : Wal-Mart, une grosse entreprise de distribution grand public a prouvé cela en démarrant un projet de BI très peu après la création de l'entreprise. Résultat, [...]]]></description>
			<content:encoded><![CDATA[<p>Tout les entreprises veulent se mettre à la BI, et elles ont raison. La valeur ajoutée que peut apporter un environnement de BI dans une entreprise est simplement stupéfiante : Wal-Mart, une grosse entreprise de distribution grand public a prouvé cela en démarrant un projet de BI très peu après la création de l'entreprise. Résultat, l'entreprise est indétrônable, sa gestion interne est impressionnante, la gestion des stocks impeccable, et sa capacité à prévoir les tendances et habitudes des consommateurs nous met à la fois en admiration et en crainte : ils sont capables de prévoir ce que le client moyen va acheter avant même qu'il ne rentre dans un magasin…</p>
<p><span id="more-8113"></span></p>
<h2>Définitions</h2>
<h3>Business Intelligence</h3>
<p>Le développement du décisionnel (« Business Intelligence ») et des entrepôts de données (« data-warehouses ») s’est réalisé sur le principe de fédération et de normalisation des données de l’entreprise, dans un but d’aide à la décision et de pilotage de l’activité de l’entreprise.<br />
L’entrepôt de données est l’élément du socle décisionnel intégrant tout ou partie du modèle de données de l’entreprise. Le modèle doit représenter une vue commune de l’entreprise et, à cet effet, est défini pour ne pas favoriser une vue métier par rapport à une autre. Cet entrepôt central est chargé d’intégrer, de stocker et d’historiser les données détaillées pertinentes pour les applications décisionnelles, de façon pérenne et neutre. Son organisation doit offrir une grande souplesse afin de pouvoir intégrer les sources de données issues  des lots d’applications successives, progressivement et de façon quasi transparente. Généralement, les accès des utilisateurs à cet environnement sont réduits. L’entrepôt central est la source d’alimentation des magasins de données (ou « datamarts »).</p>
<p>Les Datamarts sont orientés métier (CRM – «Customer Relationship Management» ou Gestion de la Relation Client, «Marketing Analytique», risque, finance, projets réglementaires, gestion des valorisations commerciales, Suivi des commandes, etc.). Ils sont, le plus fréquemment, accédés par les utilisateurs pour leurs besoins d’analyse et comptent généralement des agrégats pré-calculés afin d’optimiser les temps de réponse des requêtes.</p>
<h3>OLAP</h3>
<p>L’OLAP (pour «<strong>O</strong>n<strong>L</strong>ine <strong>A</strong>nalytical <strong>P</strong>rocessing») est un ensemble de méthodes et d’outils pour exploiter les données stockées dans ces data-warehouses et ces datamarts. Le terme OLAP viens en opposition avec l’OLTP (<strong>O</strong>n<strong>L</strong>ine <strong>T</strong>ransaction <strong>P</strong>rocessing) renvoie quant à lui  à une catégorie de systèmes qui facilitent la transaction et de gérer des applications orientées, généralement pour une entrée de données et le traitement des opérations de récupération. L’outil OLAP répond en général à deux besoins d’analyse :</p>
<ul>
<li> Le tableau de bord (ou reporting) pour obtenir une information récurrente, correspondant à une analyse prédéfinie, par exemple la décomposition des ventes par région.</li>
<li> L’analyse interactive et dynamique pour chercher une information en effectuant différentes analyses successives, les résultats de l’une amenant des questions nouvelles, qui demandent une nouvelle restitution des données.</li>
</ul>
<h2>Concept et vocabulaire</h2>
<p>Il existe trois grands types de moteur OLAP, ayant chacun ses forces et ses faiblesses:</p>
<ul>
<li><strong>M-OLAP</strong> pour Multidimensional OLAP est basé sur des bases de données multidimensionnelles où tous les agrégats sont pré calculés lors de la création ou de la modification de celle-ci. Il en résulte une création plus lente mais une exploitation plus rapide du fait qu’aucun post traitement n’est nécessaire.</li>
<li><strong>R-OLAP</strong> pour Relational OLAP est basé sur des bases de données relationnelles, il en découle la possibilité d’employer des agrégats tel que le distinct count, une plus grande flexibilité dans l’ajout de donnée (aucun agrégat à recalculer) mais des consultations plus lente car c’est la base de donnée qui se charge des calculs en temps réel.</li>
<li><strong>H-OLAP</strong> pour Hybrid OLAP est quant à lui et comme son nom l’indique un modèle hybride où se mêlent MOLAP et ROLAP. L’intérêt réside en l’utilisation du M-OLAP lorsque les données sont très agrégés et dans le recours au R-OLAP lorsque il est nécessaire de consulter des données à un niveau de détail élémentaire plus fin.</li>
</ul>
<p>Parmi les technologies OLAP, l’analyse multidimensionnelle des données à l’aide de cubes multidimensionnels est le mode d’analyse interactive et dynamique le plus courant.</p>
<p>Les cubes multidimensionnels sont basés sur des :</p>
<ul>
<li>Indicateurs numériques :</li>
<p>Des indicateurs numériques sont définis pour les analyses (nombres, montants, quantités, volumes…).  Ces indicateurs doivent avoir la propriété de pouvoir être agrégés pour calculer des sommes, des moyennes, des ratios…</p>
<li>Dimensions d’analyse :</li>
<p>Les dimensions constituent les axes d’analyse : dimensions client, produit, temps, … (Voir l’exemple ci-dessous)<br />
Ces dimensions sont construites de manière hiérarchique permettant ainsi d’avoir des vues plus ou moins détaillées des données selon le besoin.</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/article_olap_1.png"><img class="size-full wp-image-8114" title="article_olap_1" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/article_olap_1.png" alt="schéma du modèle en étoile" width="481" height="323" /></a></p>
<li>Cube :
<ul>
<li>Les faces du cube représentent les dimensions sur la hiérarchie désirée.</li>
<li>Les cellules du cube représentent les agrégats calculés au croisement de toutes les dimensions.</li>
</ul>
<ul>
<li><strong>Roll Up</strong> : pour remonter plus en amont dans une dimension à des niveaux plus élevés de la hiérarchie. Remonter des agences au groupe.</li>
<li><strong>Drill Down</strong> : pour descendre en aval dans une dimension, à des niveaux plus détaillés de la hiérarchie. Par exemple, passer des années aux mois.</li>
<li><strong>Drill Through</strong> : pour, à partir d’une cellule donnée, descendre jusqu’au niveau des informations des individus contenus dans la cellule.</li>
<li><strong>Slice</strong> : pour sélectionner certaines faces du cube (par filtrage sur certains éléments des dimensions). On ne conserve qu’une « tranche » du cube.</li>
</ul>
</li>
<p>Le croisement des dimensions et des indicateurs peut se représenter sous la forme de cubes (voir ci-dessous) :</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/article_olap_2.png"><img class="size-full wp-image-8115" title="article_olap_2" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/article_olap_2.png" alt="schéma d'un cube OLAP" width="500" height="198" /></a></p>
<p>Dans ces cubes, l’analyste peut naviguer facilement entre les différentes dimensions. Cette navigation se fait avec les possibilités suivantes :</ul>
<h2>Outils</h2>
<p>Dans cet article, nous parlerons des outils suivants : le serveur ROLAP Mondrian, les clients OLAP JRubik et JPivot.</p>
<h3>Serveur OLAP</h3>
<h4>Mondrian</h4>
<p>Mondrian est un serveur OLAP utilisant un moteur ROLAP écrit en Java majoritairement développé par Julian Hyde. Il permet d’exploiter n’importe quel type de base de données SQL (à l’heure actuel, Mondrian est compatible avec plus de 17 bases de donnée différentes et est supposé fonctionner avec toutes les bases possédant des pilotes JDBC) sans pour autant avoir besoin d’écrire la moindre ligne de SQL. En effet, Mondrian s’appuie sur le langage de requête MDX (pour MultiDimensional eXpressions) pour générer les cubes.<br />
Avant toutes choses, il faut créer le schéma Mondrian permet de décrire la modèle dans la base de donnée. Celui-ci, se résume à un fichier XML.<br />
Dans celui-ci, figure en premier lieu la table de fait. Cette table de la base de données a pour rôle de représenter toutes les informations au niveau le plus bas de la granularité de chaque dimension. Apres la définition des dimensions qui composeront le cube, il reste à définir les mesures ainsi que l’agrégateur (l’opérateur utilisé pour passer d’un niveau hiérarchique à celui du dessus) qu’elles utiliseront.<br />
Ceci se résume à un fichier XML ressemblant à :</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/schema.png"><img class="size-full wp-image-8116" title="schema" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/schema.png" alt="schéma logique d'un cube OLAP" width="500" height="369" /></a></p>
<h3>Client OLAP</h3>
<p>Le rôle du client OLAP est d’exploiter les données renvoyées par le serveur OLAP et de les mettre en forme. Nombreux sont les clients OLAP permettant de visualiser la structure du cube ainsi d’explorer le cube en générant les requêtes MDX correspondantes.<br />
Dans la suite, nous présenterons deux client OLAP JPivot et JRubik respectivement un client léger et un client lourd. (Un client léger de requiert pas d’installation du côté client contrairement à un client lourd)</p>
<h4>JPivot</h4>
<p>JPivot est une bibliothèque de balise JSP qui permet de restituer des cubes OLAP.  De ce fait, il doit être installé au sein d’un serveur Apache. La configuration se résume à copier le pilote JDBC dans le bon répertoire du serveur Apache et de fournir la bonne chaine de connexion. Du type :<em>jdbc:mysql://localhost:3306/foodmart</em> pour se connecter à la base foodmart d’une base de données de type MySql.</p>
<h4>JRubik</h4>
<p>JRubik est un client OLAP écrit en Java/Swing et basé sur JPivot qui se connecte au moteur OLAP Mondrian. Il est pour l’instant en version 0.9.7, bien qu’il ne soit pas encore finis (certaines fonctionnalité ne sont pas encore implémenté, d’autres ne sont pas traduites et sont encore affichées en espagnol) ce logiciel est déjà complet et fonctionnel. Autre point positif sont interface est nettement moins austère que celle de JPivot. La configuration de celui-ci est assez simple quoiqu’un peu plus longue que pour JPivot. Il faut premièrement configurer un driver de base de donnée si celui si n’existe pas déjà (les drivers pour MySQL et derby sont préexistant) pour cela faire  <em>File &amp;gt; Settings &amp;gt; Wizard Driver &amp;gt; New Driver</em> puis renseigner le nom, le type de base et fournir le fichier Jar du pilote JDBC puis  après avoir redémarré l’application (un problème de jeunesse) il faut crée la source de donnée <em>File &amp;gt; Setting &amp;gt; Datasources Setting &amp;gt; Build new datasource</em> en précisant le connecteur, les informations relatives à la base de donnée ainsi que le schéma Mondrian représentant le cube. Une fois ces étapes réalisées vous pouvez désormais explorer votre cube.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/18/initiation-a-la-bi-et-a-l%e2%80%99olap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Le framework Jboss Seam</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/15/le-framework-jboss-seam/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/15/le-framework-jboss-seam/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 08:42:37 +0000</pubDate>
		<dc:creator>bellan_d</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[RIA/RDA]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[framework]]></category>

		<category><![CDATA[Jboss]]></category>

		<category><![CDATA[Seam]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8374</guid>
		<description><![CDATA[Seam est une plateforme de développement open source permettant de concevoir des RIA (Rich Internet Application) en Java. Seam défini un modèle de composants uniforme pour l'ensemble des processus métiers de votre application.
Un composant seam peut être Stateful et être associé à l'un des contextes suivants :

 long-running persistent  : session classique
 business process  : [...]]]></description>
			<content:encoded><![CDATA[<p>Seam est une plateforme de développement open source permettant de concevoir des RIA (Rich Internet Application) en Java. Seam défini un modèle de composants uniforme pour l'ensemble des processus métiers de votre application.</p>
<p>Un composant seam peut être Stateful et être associé à l'un des contextes suivants :</p>
<ul>
<li> long-running persistent  : session classique</li>
<li> business process  : les données restent en mémoire le temps du déroulement d'un processus métier</li>
<li> conversation  : les données sont conservées en mémoire le long de plusieurs requètes effectuées par les utilisateurs et effacées lorqu'on le désire (session classique bien plus affinée)</li>
</ul>
<p>Seam ne fait pas de distinction entre la couche présentation et la couche métier. Aussi il est possible d'architecturer son application de la manière que l'on souhaite sans être forcé d'utiliser une architecture imposée ce qui est le cas dans la majorité des autres frameworks j2EE.</p>
<p>Contrairement aux composants J2EE classiques, les composants Seam peuvent simultanément accéder à la fois aux états associés aux requêtes web et aux états contenus dans les ressources transactionnelles sans avoir à programmer manuellement les requêtes web avec des méthodes paramétrées.</p>
<p>Les personnes préférant utiliser l'architecture des anciens framework J2EE peuvent toujours créer une architecture équivalente en utilisant Seam. La différence est qu'elles devront définir quelles sont les différentes couches et comment elles fonctionnent ensembles.</p>
<p><span id="more-8374"></span></p>
<h2>Les outils que fournit le framework</h2>
<h3><em>JSF (Java Server Facelet) intégrées avec les EJB 3.0 (Entity Java Beans):</em></h3>
<p>JSF et EJB 3.0 sont deux des fonctionnalités majeures comprises dans Java EE 5.</p>
<p>EJB 3 est un modèle de composant pour la gestion des processus métiers coté serveur et la persistence des objets.</p>
<p>JSF est un modèle de composant utilisé pour mettre en place la couche présentation.</p>
<p>Malheureusement, aucun de ces modèles de composant n'est capable de résoudre l'ensemble des problèmes de développement par lui-même. En effet, JSF et EJB 3.0 fonctionnent bien mieux ensembles. Cependant, les spécifications de Java EE 5 ne proposent pas de solution standard pour intégrer ces deux solutions ensembles.</p>
<p>Fort heureusement, les créateurs de ces deux modèles ont prévu la situation et ont créé une extension standard permettant de les intégrer ensembles dans d'autres frameworks.</p>
<p>Seam unifie les modèles de composants de JSF et EJB 3.0 en éliminant la création de code de liaison et en permettant aux développeur de ne réfléchir que sur le code métier.</p>
<p>Il est possible de développer une application Seam où tout est un EJB. Au contraire, si vous le souhaitez, il est possible de ne pas en utiliser. En effet, n'importe quelle classe Java peut être un composant Seam.</p>
<h3><em>AJAX intégre :</em></h3>
<p>Seam supporte les toutes dernières solutions JSF open source basées sur des solutions AJAX :</p>
<ul>
<li> Jboss RichFaces</li>
<li> ICEfaces</li>
</ul>
<p>Ces solutions permettent d'ajouter les possibilités d' AJAX à votre interface utilisateur sans avoir besoin d'écrire du code Javascript.</p>
<p>En tant qu'alternative, Seam propose une couche Javascript intégrée permettant d'appeler un composant de manière asynchrone depuis le Javascript de la couche client sans utiliser d'actions supplémentaires.</p>
<h3>Gestionnaire des processus métiers :</h3>
<p>Seam propose aussi un gestionnaire transparent des processus métiers à l'aide de jBPM. Celui-ci permet d'élaborer simplement des workflows  complexes ainsi que des systèmes de collaboration et des gestionnaires de tâches.</p>
<p>Seam vous permet aussi de définir un pageflow de la couche présentation en utilisant le même langage que jBPM utilise pour ses définitions de processus métiers (jPDL).</p>
<p>JSF propose un gestionnaire d'événements très riche pour la couche présentation. Seam s'inspire de ce gestionnaire en utilisant le même mécanisme de listeners ce qui au final donne un gestionnaire d'événements uniforme dans votre application.</p>
<h3>Bijection :</h3>
<p>Les notions d'inversion de contrôle et d'injection de dépendances existent à la fois dans JSF, dans EJB3 et dans beaucoup d'autres conteneurs. La plupart de ces conteneurs permettent l'injection de composant qui implémentent uniquement des services stateless.</p>
<p>Même lorsque l'injection de composants stateful est supportée (JSF), celle-ci est peu utile car le scope des composants stateful ne peut pas être défini avec assez de précision et que des composants appartenant à des scopes larges ne peuvent être injectés dans des scopes plus étroits.</p>
<p>La bijection diffère de l'inversion de contrôle dans le fait qu'elle est dynamique, contextuelle et bidirectionnelle. La bijection permet la compilation automatique des composants stateful par le conteneur. Cela permet aussi au composant de manipuler facilement la valeur d'une variable contextuelle en l'assignant juste à un attribut du composant.</p>
<h3>Gestion de l'espace de travail et de la naviguation dans plusieurs onglets du navigateur :</h3>
<p>Les applications Seam permettent à l'utilisateur de changer d'onglet dans son navigateur comme il le souhaite. Chaque onglet est associé à une conversation isolée avec sécurité.</p>
<p>Une application Seam peut aussi permettre aux utilisateurs de changer de conversation au sein d'un même onglet du navigateur.</p>
<h3>Annotations plutôt que XML :</h3>
<p>La plupart des frameworks J2EE proposent des descripteurs de déploiement basés sur du XML pour configurer les choses qui peuvent être vraiment différentes selon les types de déploiement de l'application et pour toute autre déclaration qui ne peut pas être facilement déclarée en Java.</p>
<p>L'arrivée des annotations dans Java 5 changea la donne. EJB 3.0 comprend les annotations et la configuration par exception. Il s'agit d'une manière simple de déclarer les informations au conteneur d'une façon claire.</p>
<p>Malheureusement, JSF est toujours très dépendant des fichiers de configuration XML très verbeux. Seam étend les annotations proposées par EJB 3.0 avec un pack d'annotations pour les déclaration d'états et de contextes. Ainsi, les informations contenues dans les fichiers XML de configuration des JSF ne sont plus que les règles de navigation.</p>
<h3>Les tests d'intégration sont simples à réaliser :</h3>
<p>Les composants Seam qui sont des classes Java sont, par nature, testables de manière unitaire. Cependant, pour des applications complexes les tests unitaires seuls sont insuffisants. Seam propose donc une fonctionnalité intégrée au framework permettant de créer ses tests unitaires.</p>
<p>Il est possible de développer rapidement des tests Junit ou TestNG qui :</p>
<ul>
<li>Reproduisent des interactions complètes avec un utilisateur</li>
<li>Testent l'ensemble des composants du système en ignorant les vues.</li>
</ul>
<p>Il est possible de lancer les tests directement dans l'IDE. Seam déploiera automatiquement les composants EJB nécessaires en utilisant Jboss Embedded</p>
<h3>Autre fonctionnalités :</h3>
<p>Seam intègre de nombreuses autres fonctionnalités :</p>
<ul>
<li> JPA et Hibernate 3 pour gérer la persistance</li>
<li> Meldware Mail pour la gestion des emails.</li>
<li> Hibernate Search et Lucene pour la recherche</li>
<li> JAAS et Jboss Rules pour la sécurité</li>
<li> Des bibliothèques de tags JSF pour les rendus en PDF</li>
<li> Générateurs de graphiques, de tableaux et de cartes</li>
<li> Web Services</li>
<li> Génération de code</li>
</ul>
<h2>Génération d'un CRUD à partir d'une base de données</h2>
<p>Dans cette partie nous allons voir comment générer un CRUD en ligne de commande sur un système UNIX à partir d'une base de données MySQL à l'aide des outils de génération de Seam.</p>
<p>Pré requis:</p>
<ul>
<li>MySQL 5.1</li>
<li>JDK 1.6</li>
<li>JBoss 5.0.1 (compilé pour JDK 1.6),</li>
<li>Seam 2.2</li>
<li>Mysql connector pour Java</li>
</ul>
<p>Dans un premier temps il est nécessaire de créer une base de données dans MySQL. Ensuite placez-vous dans le répertoire d'installation de Jboss Seam :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> $ <span style="color: #7a0874; font-weight: bold;">cd</span> chemin_vers_seam;</pre></div></div>

<p>Nous allons ensuite configurer Seam pour qu'il génère notre application à partir de notre base de données. Pour cela il faut exécuter la commande :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>seam setup;</pre></div></div>

<p>Un questionnaire apparaît dans la console. Il va falloir répondre aux questions posée. Dans un premier temps il faut indiquer le répertoire où vous souhaitez installer votre site ainsi que le chemin vers le répertoire où se situe Jboss.</p>
<p>Une fois cela fait il faut noter le domaine (laisser default pour la démo) puis le chemin vers Glassfish et le domaine Glassfish (laisser les paramètres par défaut car nous ne ne l'utilisons pas).</p>
<p>Il faut alors entrer le nom du projet. On nous demande alors si l'ont souhaite utiliser RichFaces ou ICEfaces. Nous  utiliseront RichFaces qui comprend un peu moins de composants mais qui est plus fiable (certains composants d'ICEfaces sont encore buggés). Le skin RichFaces pour notre CRUD est alors demander. Nous allons choisir emerald.</p>
<p>Il faut ensuite préciser si l'on souhaite déployer le site en ear ou en war. Ici nous choisirons ear  car cela va nous générer un site zippé qui sera pratique pour un déploiement futur. On peut alors rentrer le nom du package de base de nos classes java (com.mon_domain.mon_projet), le nom du package pour nos bean de session : com.mon_domaine.mon_projet, le nom du package pour nos bean d'entités (com.mon_projet.entity) et enfin le nom du package pour nos tests(com.mon_projet.test).</p>
<p>On spécifie alors le type de base de données utilisée (mysql) ainsi que le chemin vers notre connecteur MySql. Il faut ensuite rentrer le dialecte hibernate (org.hibernate.dialect.MySQLDialect) ainsi que la classe du driver JDBC (com.mysql.jdbc.Driver) et la classe JDBC procurant les données (com.mysql.jdbc.jdbc2.optional.MysqlDataSource) et enfin l'adresse jdbc de notre base (jdbc:mysql:///).</p>
<p>On doit alors rentrer le login puis mot de passe de la base de données. Un nom de catalogue est alors demandé (ne rien mettre).</p>
<p>Pour finir le questionnaire il faut spécifier qu'il existe des tables en base et qu'on ne souhaite pas recréer les tables en base à chaque redéploiement et exécuter import.sql.</p>
<p>Il faut ensuite exécuter : </p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>seam create-project</pre></div></div>

<p>Cette commande va générer un squelette vide du site. On exécute ensuite la commande suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>seam generate</pre></div></div>

<p> </p>
<p>Cette commande va utiliser la base de données et générer tous les fichiers nécessaires à notre CRUD. L'avant dernière étape est de lancer la commande :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>seam deploy</pre></div></div>

<p> qui va déployer le site sur le serveur Jboss. Enfin, il faut lancer le serveur :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span> puis $ run.sh</pre></div></div>

<p>Une fois le serveur lancé allez à l'adresse http://localhost:8080/mon_projet. Vous devez y voir votre CRUD. L'ensemble des entités a été généré. Il est donc intéressant d'utiliser cet outil pour n'importe quelle création de site.</p>
<h2>Avantages</h2>
<ul>
<li> Création de RIA avec simplicité, sans configuration particulière et sans utilisation de Javascript (RichFaces, ICEfaces).</li>
<li> Manière simplifier d'apprendre à utiliser des EJB 3.0</li>
<li> Génération de code très simple</li>
<li> Utilisation des annotations (simplification de la configuration)</li>
<li> Gestion simplifiée de la persistance</li>
<li> Tests d'intégration inclus dans le framework</li>
<li> Open Source</li>
</ul>
<h2>Inconvénients</h2>
<p>L'inconvénient majeur de Seam est la complexité de compréhension du framework. Il est nécessaire  de passer beaucoup de temps à lire la documentation afin de pouvoir créer quelque chose de viable. De plus, comme il s'agit d'une plateforme assez jeune, sa communauté est peu répandue. Il est donc parfois difficile de trouver des réponses à des problèmes basiques.</p>
<p>Un autre inconvénient de ce framework est son adaptabilité. En effet, lorsque l'on souhaite créer quelque chose qui n'est pas spécialement prévu dans le framework cela met plus de temps que si nous passions par une solution classique.</p>
<h2>Comparaison avec d'autres framework J2EE</h2>
<p>Dans cette section nous allons rapidement comparer Seam avec Spring et Struts afin de voir dans quel cas il vaut mieux utiliser un framework plutôt qu'un autre. Cette comparaison va se faire sous forme de liste de critère. Pour chaque critère nous allons préciser ce que le framework propose pour le vérifier.</p>
<ul>
<li>Utilisation d'AJAX</em> : Seam, Struts</li>
<li><em>ORM</em> : Struts</li>
<li><em>JPA, Hibernate</em> ; Spring, Seam</li>
<li><em>Framework de sécurité intégré</em> : Seam (JAAS, OpenID, etc.), Spring (Spring security)</li>
<li><em>Form Validation</em> : Spring (Commons Validator), Seam (Hibernate Validators), Struts</li>
<li><em>Tests unitaires</em> : Spring(mock objects et unit test), Struts (unit test), Seam (JUnit, TestNG)</li>
<li><em>Framework de cache</em> : Spring (ehcache), Seam (ehcache, Jboss Cache)</li>
</ul>
<h2>Conclusion</h2>
<p>Finalement, le framework Jboss Seam propose un très grand panel de fonctionnalités et facilite grandement la configuration des projets. Le développeur n'a plus qu'à se focaliser sur le développement de la partie métier de son application. De plus, il peut être couplé avec RichFaces ou ICEfaces très simplement et permettre le développement de RIA de manière simple. Il apporte aussi de nouvelles fonctionnalités comme les conversations ou la bijection qui rendent le framework encore plus riche.</p>
<p>Il est tout de même important de noter que la communauté autour de ce framework n'est pas encore très développée et qu'il faut parfois s'armer de patience pour résoudre un simple problème.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/15/le-framework-jboss-seam/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installation d&#8217;un serveur Apache tomcat en environnement ubuntu 10.04</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/12/installation-dun-serveur-apache-tomcat-en-environnement-ubuntu-1004/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/12/installation-dun-serveur-apache-tomcat-en-environnement-ubuntu-1004/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 08:42:44 +0000</pubDate>
		<dc:creator>guillaumebadin</dc:creator>
		
		<category><![CDATA[Autres]]></category>

		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Serveur]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[tomcat6]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8555</guid>
		<description><![CDATA[Nous allons aujourd'hui installer un serveur Apache Tomcat sur un Ubuntu serveur 10.04. Ce besoin est ressenti par la différence d'une installation de Tomcat sous Windows ou Ubuntu.
Sous Windows, une fois Apache Tomcat d'installé vous aurez probablement aucun problème de développement, vos applications ne seront tous bonnement pas sécurisées, ce qui est fort intéressant lorsque l'on développe mais [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons aujourd'hui installer un serveur Apache Tomcat sur un Ubuntu serveur 10.04. Ce besoin est ressenti par la différence d'une installation de Tomcat sous Windows ou Ubuntu.</p>
<p>Sous Windows, une fois Apache Tomcat d'installé vous aurez probablement aucun problème de développement, vos applications ne seront tous bonnement pas sécurisées, ce qui est fort intéressant lorsque l'on développe mais qui pose problème si l'on veut faire un serveur de production.</p>
<p>Sous Linux, lorsque vous installez un serveur Tomcat vous aurez par défaut une gestion fine des droits dans vos dossiers, ce qui vous empêchera de faire n'importe quoi avec votre serveur de production.</p>
<p>Le but de cet article est donc de montrer comment on peut customiser plus finement la configuration d'un serveur de production pour pouvoir installer des applications web qui demandent des droits d'éxécution (Hudson, Nexus etc..).</p>
<p><span id="more-8555"></span></p>
<h2>Installation</h2>
<p>Tout d'abord, nous aurons comme pré-requis d'avoir une installation Ubuntu serveur 10.04 fraîche avec le port 8080 libre.</p>
<p>Installons le serveur :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">sudo apt-get install tomcat6</pre></div></div>

<p>
Cela aura pour effet d'installer un serveur Tomcat avec par défaut une webapp ROOT qui affichera un message d'accueil "It Works !!!".</p>
<h2>Configuration</h2>
<p>Les fichiers de configuration se trouvent dans le dossier <em>/etc/tomcat6 </em>. Par convention, c'est dans /etc/programme que l'on retrouve les fichiers de configuration sous Linux.</p>
<h3>Changer le port de Tomcat</h3>
<p>Par défaut, Tomcat s'affiche sur le port 8080, si votre serveur contient déjà une application qui utilise ce port, votre serveur Tomcat ne marchera pas.</p>
<p>Pour le changer, il vous suffit d'aller dans le fichier <em>/etc/tomcat6/server.xml</em> et de trouver la ligne xml suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">connectionTimeout=&quot;<span style="">20000</span>&quot;
redirectPort=&quot;<span style="">8443</span>&quot; /&amp;amp;gt;;</pre></div></div>

<p>
Comme vous pouvez le remarquer, c'est dans la balise <em>Connector </em> que l'on va modifier l'attribut <em>port="le_numéro_de_port_que_l'ont_veut"</em>.<br />
Il est d'usage que lorsque il est libre, on utilise le port 8081 qui est généralement utilisé comme autre port par défaut.</p>
<h3>Changer la JVM</h3>
<p>Par défaut c'est la JVM Open JDK qui est utilisée; on a beau aimer le libre l'open source etc. La JVM Open JDK est moins robuste et rapide que celle de SUN. Je vous conseille donc fortement d'installer celle de SUN.</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">sudo apt-get install sun-java6-jdk</pre></div></div>

<p>
Il vous suffit de setter la variable d'environnement dans le fichier <em>/etc/default/tomcat6</em></p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">JAVA_HOME=/usr/lib/jvm/java-<span style="">6</span>-sun</pre></div></div>

<p>
Pour des raisons de sécurité, un utilisateur de Tomcat ne peut pas écrire dans un dossier <em>/etc/tomcat6</em>.<br />
Pour donner les droits, il faut exécuter les lignes suivantes :</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">sudo chgrp -R tomcat6 /etc/tomcat6
sudo chmod -R g+w /etc/tomcat6</pre></div></div>

<p>
Avec ces quelques informations, vous pourrez avoir une installation de Tomcat qui marche. Je vous invite à lire la documentation officielle pour aller au fond des choses.</p>
<h2>Bibliographie</h2>
<p><a href="http://tomcat.apache.org/tomcat-6.0-doc/index.html">http://tomcat.apache.org/tomcat-6.0-doc/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/12/installation-dun-serveur-apache-tomcat-en-environnement-ubuntu-1004/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Créer un site avec une partie administration et les web services associées en 10 minutes avec Grails</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/09/creer-un-site-avec-une-partie-administration-et-les-web-services-associees-en-10-minute-avec-grails/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/09/creer-un-site-avec-une-partie-administration-et-les-web-services-associees-en-10-minute-avec-grails/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 08:42:10 +0000</pubDate>
		<dc:creator>guillaumebadin</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Serveur]]></category>

		<category><![CDATA[grails]]></category>

		<category><![CDATA[Groovy]]></category>

		<category><![CDATA[REST]]></category>

		<category><![CDATA[Webservices]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8530</guid>
		<description><![CDATA[Nous allons montrer aujourd'hui la puissance du framework Grails (Groovy on Rails).
L'objectif est de créer facilement un site web pouvant fournir des web services. Le site sera réalisé en 10 mn.
Je prendrai comme pré-requis le fait que vous avez déjà une installation du framework valide et que vous avez déjà créé un mini-site (Vous connaissez le groovy et vous [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons montrer aujourd'hui la puissance du framework Grails (Groovy on Rails).</p>
<p>L'objectif est de créer facilement un site web pouvant fournir des web services. Le site sera réalisé en 10 mn.</p>
<p>Je prendrai comme pré-requis le fait que vous avez déjà une installation du framework valide et que vous avez déjà créé un mini-site (Vous connaissez le groovy et vous avez compris le principe de Grails).</p>
<p><span id="more-8530"></span></p>
<p>Le but du site est de faire un Twitter-like très simple,</p>
<p>Nous allons d'abord créer les classes qui serviront de modèle :</p>
<ul>
<li>Premièrement, la classe qui représentera l'utilisateur:</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> User
<span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #aaaadd; font-weight: bold;">String</span> name
    <span style="color: #aaaadd; font-weight: bold;">String</span> mail
    <span style="color: #aaaadd; font-weight: bold;">String</span> password
    <span style="color: #993333;">boolean</span> isBlocked
    <span style="color: #aaaadd; font-weight: bold;">Date</span> dateCreated
    <span style="color: #aaaadd; font-weight: bold;">Date</span> lastUpdated
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> constraints <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> mapping <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
        table <span style="color: #ff0000;">'tb_user'</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Tout d'abord plusieurs choses :</p>
<ul>
<li>Les champs <em>dateCreated</em> et <em>lastUpdated</em> écrits de cette façon seront mis à jour automatiquement par Grails.</li>
<li>Le fait de remplir l'attribut mapping avec la propriété <em>table tb_user'</em> permet d'éviter certains problèmes dus à l'utilisation de SGBD (La table User est réservée en Mysql)</li>
</ul>
<div>Continuons en créant la table des posts :</div>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Comment <span style="color: #66cc66;">&#123;</span>
&nbsp;
  User user
  <span style="color: #aaaadd; font-weight: bold;">String</span> content
  <span style="color: #aaaadd; font-weight: bold;">Date</span> dateCreated
  <span style="color: #aaaadd; font-weight: bold;">Date</span> lastUpdated
&nbsp;
  <span style="color: #000000; font-weight: bold;">static</span> constraints <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Il vous suffit ensuite de générer toute la partie administration des deux domaines.</p>
<p>Vous pourrez alors accéder à la partie administration du site :</p>
<p>Après avoir généré tous les modèles, vues et contrôleurs nous allons modifier le fichier <em>UrlMappings.groovy.</em></p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> UrlMappings <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">static</span> mappings <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
        <span style="color: #ff0000;">&quot;/$controller/$action?/$id?&quot;</span> <span style="color: #66cc66;">&#123;</span>
            constraints <span style="color: #66cc66;">&#123;</span>
                <span style="color: #808080; font-style: italic;">// apply constraints here</span>
            <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #ff0000;">&quot;/rest/$controller&quot;</span> <span style="color: #66cc66;">&#123;</span>
            action <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>GET: <span style="color: #ff0000;">&quot;restList&quot;</span>, POST: <span style="color: #ff0000;">&quot;restSave&quot;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #ff0000;">&quot;/rest/$controller/$id&quot;</span> <span style="color: #66cc66;">&#123;</span>
            action <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>GET: <span style="color: #ff0000;">&quot;restShow&quot;</span>, PUT: <span style="color: #ff0000;">&quot;restUpdate&quot;</span>, DELETE: <span style="color: #ff0000;">&quot;restDelete&quot;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #66cc66;">&#40;</span>view: <span style="color: #ff0000;">&quot;/index&quot;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        <span style="color: #ff0000;">&quot;500&quot;</span><span style="color: #66cc66;">&#40;</span>view: <span style="color: #ff0000;">'/error'</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Comme vous pouvez le remarquer l'accès à la partie Rest de l'application se fera en prefixant l'adresse par /rest/le_nom_du_controlleur.</p>
<p>Il faut ensuite aller modifier chaque fichier contrôleur en ajoutant les méthodes que l'on va appeler en faisant du rest.</p>
<p>Example :</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> UserController <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> scaffold <span style="color: #66cc66;">=</span> User
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> restList <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
    render User.<span style="color: #006600;">list</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000000; font-weight: bold;">as</span> JSON
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> restSave <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> userInstance <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> User<span style="color: #66cc66;">&#40;</span>params<span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>userInstance.<span style="color: #006600;">save</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
      render <span style="color: #000000; font-weight: bold;">true</span>
    <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
      render <span style="color: #000000; font-weight: bold;">false</span>
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> restShow <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
    render User.<span style="color: #663399;">get</span><span style="color: #66cc66;">&#40;</span>params.<span style="color: #006600;">id</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000000; font-weight: bold;">as</span> JSON
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> restDelete <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
    User.<span style="color: #663399;">get</span><span style="color: #66cc66;">&#40;</span>params.<span style="color: #006600;">id</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">delete</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    render <span style="color: #ff0000;">&quot;user $params.id deleted&quot;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Voilà, maintenant vous n'avez plus qu'à copier/coller le code dans chaque contrôleur.</p>
<p>En quelques minutes, vous avez un site que vous pouvez administrer facilement avec une interface d'administration basique; de plus, vous pouvez facilement ajouter des webservices.</p>
<h2>Bibliographie</h2>
<p><a href="http://www.grails.org/plugin/home">http://www.grails.org/plugin/home</a></p>
<p>Je vous conseille de parcourir avec attention la page de plugin; certains vous feront gagner de longues heures de développement.</p>
<p><a href="https://www.ibm.com/developerworks/java/library/j-grails01158/">https://www.ibm.com/developerworks/java/library/j-grails01158/</a></p>
<p>Un article vous permettant de bien démarrer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/09/creer-un-site-avec-une-partie-administration-et-les-web-services-associees-en-10-minute-avec-grails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installation et mise en route d&#8217;une base de données No-SQL : Apache CASSANDRA</title>
		<link>http://www.mti.epita.fr/blogs/2010/08/06/installation-et-mise-en-route-dune-base-de-donnee-no-sql-apache-cassandra/</link>
		<comments>http://www.mti.epita.fr/blogs/2010/08/06/installation-et-mise-en-route-dune-base-de-donnee-no-sql-apache-cassandra/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 08:42:32 +0000</pubDate>
		<dc:creator>guillaumebadin</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Serveur]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[cassandra]]></category>

		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://www.mti.epita.fr/blogs/?p=8373</guid>
		<description><![CDATA[Voilà quelques mois qu'un raz de marée déferle sur la planète des bases de données !
Facebook, Twitter, FourSquare ont honteusement lâché les bases de données SQL classiques tels que MySQL...
Trop lourd à administrer, pas assez rapide, manque de scalabilité - peut difficilement être mis à grande échelle -, les bases de donnés SQL commencent à accumuler trop [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà quelques mois qu'un raz de marée déferle sur la planète des bases de données !</p>
<p>Facebook, Twitter, FourSquare ont honteusement lâché les bases de données SQL classiques tels que MySQL...</p>
<p>Trop lourd à administrer, pas assez rapide, manque de scalabilité - peut difficilement être mis à grande échelle -, les bases de donnés SQL commencent à accumuler trop de points faibles pour les sites web qui accueillent des millions d'internautes.</p>
<p>La solution no-SQL que nous étudierons sera le projet Apache CASSANDRA.</p>
<p><span id="more-8373"></span></p>
<p>Le projet Apache CASSANDRA fut initié par facebook en 2008, il est en version stable (0.6.1) depuis le 18 avril 2010. Il est Open Source et supporté par la fondation Apache.</p>
<p>Les grands principes de CASSANDRA sont :</p>
<ul>
<li>Décentralisation</li>
</ul>
<p>Chaque nœud dans un cluster est identique.</p>
<ul>
<li>Tolérance aux erreurs</li>
</ul>
<p>Les données sont automatiquement répliquées dans plusieurs nœuds. Les nœuds en erreur peuvent être remplacés sans temps d'arrêt</p>
<ul>
<li>Cohérence configurable</li>
</ul>
<p>Les écritures et les lectures offrent un niveau de cohérence configurable allant de "les écritures n'échouent jamais" à "bloque la lecture des copies".</p>
<ul>
<li>Élasticité</li>
</ul>
<p>Le débit de lecture/écriture augmente de manière linéaire avec l'augmentation du nombre de machines</p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/cassandra_logo.png"><img class="aligncenter size-full wp-image-8423" title="cassandra_logo" src="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/cassandra_logo.png" alt="" width="500" height="100" /></a></p>
<p>Nous allons maintenant voir comment installer et mettre pour la première fois en route la base de données Cassandra.</p>
<h2>Installation</h2>
<p>Veuillez télécharger la dernière version stable de Cassandra sur le site web (actuellement à l'heure où je vous parle, la 0.6.1) à cette adresse :</p>
<p><a href="http://cassandra.apache.org/">http://cassandra.apache.org/</a></p>
<p>Veuillez télécharger une archive que vous décompresserez dans un répertoire quelconque</p>
<p>Vous aurez un dossier <em>apache-cassandra-0.6.1. </em></p>
<p>Veuillez définir une variable d'environnement nommée CASSANDRA_HOME = chemin du dossier oà se trouve Cassandra.</p>
<p>Avant de lancer le tout, il vous faut aller configurer le fichier de conf $CASSANDRA_HOME/conf/storage-conf.xml.</p>
<p>Changez les valeurs du dossier de log et du dossier de stockage (par défaut sous Linux, les dossiers se trouvent dans /var/lib/cassandra, ce qui nécéssite les droits administrateurs).</p>
<p>Ici, j'ai décidé de les mettre dans un dossier nommé Cassandra se trouvant dans le dossier que nous venons de décompresser.<br />
<span style="font-family: monospace;"><br />
</span></p>
<p>Ensuite vous n'avez plus qu'à lancer Cassandra avec le script l$CASSANDRA_HOME/bin/casssandra (cassandra.bat pour les utilisateurs windows)</p>
<p>Si Cassandra marche bien vous aurez des logs de ce genre sur votre console.</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">589</span> Enqueuing flush of Memtable<span class="br0">&#40;</span>Authors<span class="br0">&#41;</span>@<span style="">533262289</span>
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">590</span> Writing Memtable<span class="br0">&#40;</span>Authors<span class="br0">&#41;</span>@<span style="">533262289</span>
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">763</span> Completed flushing /home/guillaume/IdeaProjects/projectzeus/apache-cassandra-0.6.1/bin/../cassandra/data/Blog/Authors-<span style="">10</span>-Data.db
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">804</span> Log replay complete
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">867</span> Saved Token found: <span style="">132603563302232281894719216760064339929</span>
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">867</span> Saved ClusterName found: Test Cluster
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">875</span> Starting up server gossip
INFO <span style="">10</span>:<span style="">18</span>:<span style="">20</span>,<span style="">946</span> Binding thrift service to localhost/127.0.0.1:<span style="">9160</span></pre></div></div>

<h2>Quelques TIPS pour développer :</h2>
<p>Lorsque vous lancerez apache Cassandra sur votre machine de développement vous aurez peut-être des problèmes car Cassandra prendra le port 8080 (Alors que le port de connexion est le 9160).</p>
<p>Ce port est utilisé par la connexion jmx qui pourra servir à manager la base de données en production.</p>
<p>Le problème, c'est lorsque comme moi, votre machine de développement contient Cassandra et un serveur J2EE (comme Tomcat ou Jetty) vous allez avoir des problèmes car ils vont se battre pour avoir le port 8080.</p>
<p>Dans ce cas là, il vous suffira d'aller dans le fichier $CASSANDRA_HOME/bin/cassandra.in.sh et de changer la valeur -Dcom.sun.management.jmxremote.port=$LE_PORT_QUE_VS_VOULEZ  à la fin du script.</p>
<h2>Conclusion</h2>
<p>La base de données Cassandra est un peu la bombe atomique des sites de réseaux sociaux, l'écriture de données est 2500 fois plus rapide qu'avec des bases de données comme MySQL.</p>
<p>Mais il faut bien comprendre vous ne devez pas remplacer toutes vos bases par Cassandra. Ce qui permet à Cassandra d'être aussi rapide c'est son modèle de données.</p>
<p>Cassandra est basé sur un modèle clé valeurs, avec une consistance éventuelle.</p>
<p>Consistance éventuelle ? Cela veut dire que si on écrit rien pendant un temps assez long, tous les noeuds seront identiques.</p>
<p>Cela nous amène à une évidence: lorsqu'on a plusieurs clusters sous Cassandra et que vous faites une requête vous n'êtes pas sûr d'avoir la dernière version de l'enregistrement.</p>
<p>La plupart du temps dans 95% des cas, la consistance des données n'est pas essentielle dans un site. 3 secondes après, vous rafraîchissez votre page web et le poste s'y retrouve.</p>
<p>En perdant une partie des contraintes, vous avez permis à la base de données d'aller beaucoup plus rapidement. Cette contrainte est en fait la plupart du temps complètement inutile.</p>
<p>Si vous faite un site grand public, je vous conseille vivement d'adopter une solution No-SQL comme Cassandra.</p>
<h2>Bibliographie :</h2>
<p><a href="http://www.sodeso.nl/?p=108">http://www.sodeso.nl/?p=108</a></p>
<p><a href="http://cassandra.apache.org/">http://cassandra.apache.org/</a></p>
<p><a href="http://www.mti.epita.fr/blogs/wp-content/uploads/2010/05/etude-ycsb-v4.pdf">etude-yahoo</a></p>
<p>Benchmark des différentes solutions de stockage comparant Cassandra avec 3 autres solutions de stockage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mti.epita.fr/blogs/2010/08/06/installation-et-mise-en-route-dune-base-de-donnee-no-sql-apache-cassandra/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 2.990 seconds -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 01:46:36 -->
<!-- Compression = gzip -->