<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
        <title>My 2 cents</title>
        <description>My 2 cents - Twixer</description>
        <link>http://dev.twixer.fr</link>
        <link>http://dev.twixer.fr</link>
        <lastBuildDate>2013-09-20T18:00:25+02:00</lastBuildDate>
        <pubDate>2013-09-20T18:00:25+02:00</pubDate>
        <ttl>1800</ttl>


        <item>
                <title>Awstats sur 1and1</title>
                <description>&lt;h1 id='introduction'&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Cette article va présenter la mise en place d&amp;#8217;&lt;a href='http://awstats.sourceforge.net/'&gt;Awstats&lt;/a&gt; sur mon serveur 1and1.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='awstats_en_deux_mots'&gt;Awstats en deux mots&lt;/h1&gt;

&lt;h2 id='a_quoi_a_sert_'&gt;A quoi ça sert ?&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://awstats.sourceforge.net/'&gt;Awstats&lt;/a&gt; est un outil d&amp;#8217;analyse de logs de connexion afin de produire des données statistiques. Les principaux serveurs Web (Apache, IIS, &amp;#8230;) sont pris en compte et les capacités de configuraiton des logs permettent à l&amp;#8217;outil de pouvoir analyser pratiquement tous les formats de logs.&lt;br /&gt;Awstats comporte plusieurs fonctionnalités qui en synthèse sont (cf. &lt;a href='http://www.awstats.org/#FEATURES'&gt;Awstats Features&lt;/a&gt;) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nombre de visites / visiteurs uniques&lt;/li&gt;

&lt;li&gt;Longueur de la visite et dernière visite&lt;/li&gt;

&lt;li&gt;Authentification de l&amp;#8217;utilisateur&lt;/li&gt;

&lt;li&gt;Représentation par jour de la semaine et par heure (pages, hits, taille pour chaque heure et jour de la semaine)&lt;/li&gt;

&lt;li&gt;Domaines/pays des hôtes des visiteurs (pages, hits, taille, 269 domaines/pays détectés, détéction par IP géographique),&lt;/li&gt;

&lt;li&gt;Liste des hôtes&lt;/li&gt;

&lt;li&gt;Top vues, pages d&amp;#8217;entrée et de sortie&lt;/li&gt;

&lt;li&gt;Type de fichier&lt;/li&gt;

&lt;li&gt;Statistiques sur la compression Web (mod_gzip ou mod_deflate)&lt;/li&gt;

&lt;li&gt;Système d&amp;#8217;exploitation utilisé (pages, hits, taille par OS, 35 OS détectés),&lt;/li&gt;

&lt;li&gt;Navigateur utilisé (pages, hits, taille, par version&lt;/li&gt;

&lt;li&gt;Visites des robots (319 robots détectés),&lt;/li&gt;

&lt;li&gt;Attaques de vers (5 famille de ver),&lt;/li&gt;

&lt;li&gt;Moteur de recherche, phrase et mot clé utilisés pour trouver le site (google, yahoo, altavista, etc&amp;#8230;)&lt;/li&gt;

&lt;li&gt;erreurs HTTP * &amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple de nombre de visites sur les derniers mois : &lt;img src='/assets/images/awstats_historique_mensuel.png' alt='' /&gt;&lt;br /&gt;Exemple de nombre de visites par pays :&lt;br /&gt;&lt;img src='/assets/images/awstats_visites_pays.png' alt='' /&gt;&lt;br /&gt;Exemple de nombre de visite des robots : &lt;img src='/assets/images/awstats_visites_robots.png' alt='' /&gt;&lt;br /&gt;Le projet est toujours maintenu et la dernière version est sortie en mars 2013.&lt;/p&gt;

&lt;h2 id='comment_a_marche_'&gt;Comment ça marche ?&lt;/h2&gt;

&lt;p&gt;Awstats est un programme CGI composé de scripts Perl. Les scripts permettent d&amp;#8217;anlyser les fichiers de logs et de produire les IHM pour les graphiques.&lt;br /&gt;Les pré-requis sont donc de disposer d&amp;#8217;un serveur (Linux ou Windows) avec Perl activé et d&amp;#8217;un serveur Web.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='pourquoi_awstats'&gt;Pourquoi Awstats&lt;/h1&gt;

&lt;p&gt;Beaucoup des services rendus par Awstats sont disponibles dans Google Analytics ou dans le panneau d&amp;#8217;administration de mon serveur sur 1and1 (cf. &lt;a href='http://help.1and1.com/marketing-c85117/1und1-siteanalytics-c37780/how-do-i-access-1und1-siteanalytics-a597243.html'&gt;1and1 Web Statistics&lt;/a&gt;). Alors pourquoi ce choix ?&lt;br /&gt;Awstats est un outil Open Source qui permet d&amp;#8217;avoir la maîtrise de ce qu&amp;#8217;on fait et donc de ce qu&amp;#8217;on veut. Il offre comme principal avantage de ne pas s&amp;#8217;appuyer sur un outil tiers dont on n&amp;#8217;a pas la maîtrise.&lt;br /&gt;Dans le contexte d&amp;#8217;une entreprise, en particulier pour ses applicaitons intranet, il n&amp;#8217;est souvent pas possible d&amp;#8217;utiliser des outils comme Google Analytics. Il est donc judidiceux d&amp;#8217;avoir sous la main d&amp;#8217;autres outils pour les compenser. J&amp;#8217;ai déjà eu l&amp;#8217;occasion d&amp;#8217;installer et d&amp;#8217;utiliser Awstats pour avoir une vision de l&amp;#8217;usage d&amp;#8217;une application par ses utilisateurs. Ce type d&amp;#8217;outil permet d&amp;#8217;avoir rapidement une vision des fonctionnalités de l&amp;#8217;application qui sont les plus utilisées et donc les plus sensibles.&lt;br /&gt;Awstats se focalise uniquement sur l&amp;#8217;anlyse statistiques des données par opposition à l&amp;#8217;analyse analytique. Dans le contexte de l&amp;#8217;Open Source il existe des outils pour couvrir ce besoin comme par exemple &lt;a href='http://piwik.org/'&gt;Piwik&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='prrequis_1and1'&gt;Pré-requis 1and1&lt;/h1&gt;

&lt;h2 id='les_logs_sur_1and1'&gt;Les logs sur 1and1&lt;/h2&gt;

&lt;p&gt;Sur un serveur Linux mutualisé 1and1, les logs se trouve dans le répertoire &lt;strong&gt;~/logs&lt;/strong&gt;.&lt;br /&gt;Ces logs ont une durée de vie d&amp;#8217;envrion 3 mois. Si on veut pouvoir faire des analyses sur une durée plus longue, il est impératif de transférer les fichiers dans un autre répertoire via un cron par exemple.&lt;br /&gt;Pour la semaine courante qui va du lundi au dimanche, un fichier est produit par jour puis compressé au format &lt;em&gt;gz&lt;/em&gt;. Au bout de la troisième semaine, les fichiers sont rassemblés en un unique fichier avec l&amp;#8217;identifiant de la semaine :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;-rw-r--r-- 1 root      root      5606 Apr 14 22:40 access.log.15.gz
-rw-r--r-- 1 root      root      4651 Apr 21 23:13 access.log.16.gz
-rw-r--r-- 1 root      root      6581 Apr 28 22:42 access.log.17.gz
-rw-r--r-- 1 root      root      6163 May  5 22:41 access.log.18.gz
-rw-r--r-- 1 root      root     11812 May 12 23:04 access.log.19.gz
-rw-r--r-- 1 root      root      5748 May 19 23:09 access.log.20.gz
-rw-r--r-- 1 root      root     15358 May 26 23:49 access.log.21.gz
-rw-r--r-- 1 root      root      9302 May 27 22:57 access.log.22.1.gz
-rw-r--r-- 1 root      root      1489 May 28 22:46 access.log.22.2.gz
-rw-r--r-- 1 root      root      2193 May 29 22:19 access.log.22.3.gz
-rw-r--r-- 1 root      root      2399 May 30 21:50 access.log.22.4.gz
-rw-r--r-- 1 root      root      1845 May 31 23:59 access.log.22.5.gz
-rw-r--r-- 1 root      root      1400 Jun  1 23:17 access.log.22.6.gz
-rw-r--r-- 1 root      root      3015 Jun  2 23:56 access.log.22.7.gz
-rw-r--r-- 1 root      root      5043 Jun  3 23:57 access.log.23.1.gz
-rw-r--r-- 1 root      root      3264 Jun  4 23:30 access.log.23.2.gz
-rw-r--r-- 1 root      root      2784 Jun  5 23:34 access.log.23.3.gz
-rw-r--r-- 1 root      root      2641 Jun  6 23:20 access.log.23.4.gz
-rw-r--r-- 1 root      root      1702 Jun  7 20:47 access.log.23.5.gz
-rw-r--r-- 1 root      root      1938 Jun  8 21:12 access.log.23.6.gz
-rw-r--r-- 1 root      root     11056 Jun  9 18:32 access.log.23.7
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les logs répondent au format suivant (cf. &lt;a href='http://help.1and1.com/marketing-c85117/1und1-siteanalytics-c37780/what-is-the-log-file-format-for-linux-shared-hosting-a598312.html'&gt;format de logs 1and1&lt;/a&gt;):&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='nb'&gt;LogFormat&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b %v \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot; \&amp;quot;%{X-Forwarded-For}i\&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='sousdomaine_awstats'&gt;Sous-domaine awstats&lt;/h2&gt;

&lt;p&gt;Il est préférable de créer un nouveau sous-domaine pour les awstats : par exemple &lt;strong&gt;awstats.monDomaine.fr&lt;/strong&gt;.&lt;br /&gt;Dans la console d&amp;#8217;administration de 1and1, créez un nouveau sous-domaine pour votre site et modifier la destination pour pointer par exemple vers le répertoire &lt;strong&gt;~/www/awstats/wwwroot&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='installation_et_configuration'&gt;Installation et Configuration&lt;/h1&gt;

&lt;p&gt;La documentation présentée en français ici s&amp;#8217;inspire fortement de ce &lt;a href='http://1024k.de/awstats/1and1/tutorial.html'&gt;tutoriel en anglais&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='dernire_version_dawstats'&gt;Dernière version d&amp;#8217;Awstats&lt;/h2&gt;

&lt;p&gt;Récupérer la dernière version d&amp;#8217;Awstats sur &lt;a href='http://sourceforge.net/projects/awstats/files/'&gt;download Awstats&lt;/a&gt; et décompressez-la en local.&lt;br /&gt;Transférer le contenu via FTP dans le répertoire &lt;strong&gt;~/www/awstats/&lt;/strong&gt;.&lt;/p&gt;

&lt;h1 id='configuration_dawstats'&gt;Configuration d&amp;#8217;Awstats&lt;/h1&gt;

&lt;p&gt;Connectez-vous via SSH à votre serveur 1and1 et copier le fichier &lt;strong&gt;wwwroot/cgi-bin/awstats.model.conf&lt;/strong&gt; vers &lt;strong&gt;wwwroot/cgi-bin/awstats.monDomaine.fr.conf&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id='logfile'&gt;LogFile&lt;/h2&gt;

&lt;p&gt;Editer et remplacer le paramètre LogFile par :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;LogFile=&amp;quot;&lt;/span&gt;&lt;span class='nb'&gt;gunzip&lt;/span&gt; -c $(ls -t ~/logs/access*.gz | head -1) |&lt;span class='err'&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On va prendre le dernier fichier de log zippé dans le répertoire de nos logs Apache.&lt;/p&gt;

&lt;h2 id='logformat'&gt;LogFormat&lt;/h2&gt;

&lt;p&gt;Modifier le paramètre LogFormat :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;LogFormat=%&lt;/span&gt;&lt;span class='nb'&gt;host&lt;/span&gt; %other %logname %time1 %methodurl %code %bytesd %virtualname %refererquot %uaquot %otherquot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='sitedomain'&gt;SiteDomain&lt;/h2&gt;

&lt;p&gt;Mofidier le paramètre SiteDomain avec votre nom de domaine ou de sous-domaine :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;SiteDomain=&amp;quot;monDomaine&lt;/span&gt;.&lt;span class='err'&gt;fr&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='hostaliases'&gt;HostAliases&lt;/h2&gt;

&lt;p&gt;Le paramètre HostAliases peut contenir d&amp;#8217;autres domaines ou sous-domaines par lesquels votre site est accessible, par exemple :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;HostAliases=&amp;quot;www&lt;/span&gt;.&lt;span class='err'&gt;mondomaine&lt;/span&gt;.&lt;span class='nb'&gt;fr&lt;/span&gt; site.mondomaine.fr www.site.mondomaine.fr&lt;span class='err'&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='dircgi'&gt;DirCgi&lt;/h2&gt;

&lt;p&gt;Le paramètre DirCGI doit être modifié avec le sous-domaine que nous avons créé pour Awstats :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;DirCgi=&amp;quot;http://awstats&lt;/span&gt;.&lt;span class='err'&gt;monDomaine&lt;/span&gt;.&lt;span class='err'&gt;fr/cgi-bin&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='dirdata'&gt;DirData&lt;/h2&gt;

&lt;p&gt;Le paramètre DirData, répertoire de destination des analyses statistiques doit être modifié :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='apache'&gt;&lt;span class='err'&gt;DirData=&amp;quot;&lt;/span&gt;..&lt;span class='err'&gt;/data&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='configuration_du_cron'&gt;Configuration du cron&lt;/h2&gt;

&lt;p&gt;Pour q&amp;#8217;Awstats puisse analyser chaque jour un nouveau fichier de log, il faut configurer la bonne commande dans le cron. Si on veut lancer l&amp;#8217;analyse d&amp;#8217;un nouveau fichier tous les jours à 2h10 du matin, on doit ajouter la ligne suivante à notre cron :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;10 2 * * * perl ~/www/awstats/wwwroot/cgi-bin/awstats.pl -config&lt;span class='o'&gt;=&lt;/span&gt;monDomaine.fr -update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='scuration_du_rpertoire_awstats'&gt;Sécuration du répertoire Awstats&lt;/h2&gt;

&lt;p&gt;La façon la plus rapide pour sécuriser l&amp;#8217;accès à notre IHM Awstats est de copier le fichier .htaccess du répertoire &lt;strong&gt;~/logs&lt;/strong&gt; dans &lt;strong&gt;~/www/awstats/&lt;/strong&gt; et de le sécuriser avec la commande :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;chmod 404 ~/www/awstats/.htaccess
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id='connection'&gt;Connection&lt;/h2&gt;

&lt;p&gt;La connexion à l&amp;#8217;IHM d&amp;#8217;Awstats se fait ensuite par l&amp;#8217;URL : http://awstats.monDomaine.fr/cgi-bin/awstats.pl&amp;amp;config=monDomaine.fr.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='divers'&gt;Divers&lt;/h1&gt;

&lt;h2 id='rattrapage_de_journes'&gt;Rattrapage de journées&lt;/h2&gt;

&lt;p&gt;Il arrive qu&amp;#8217;on ait besoin de rattraper une journée. Pour ce faire la solution simple est d&amp;#8217;utiliser le script utilitaire &lt;em&gt;logresolvemerge.pl&lt;/em&gt; d&amp;#8217;Awstats qu&amp;#8217;on trouve dans le répertoire &lt;strong&gt;tools&lt;/strong&gt; de la distribution. Les commandes sont :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;perl awstats/tools/logresolvemerge.pl ~/logs/access.log.*.gz &amp;gt; temp.log  
perl awstats/cgi-bin/awstats.pl -config&lt;span class='o'&gt;=&lt;/span&gt;monDomaine.fr -LogFile&lt;span class='o'&gt;=&lt;/span&gt;./temp.log -update  
rm temp.log  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Il est assez simple d&amp;#8217;installer Awstats sur son serveur 1and1 tout comme sur n&amp;#8217;importe quel autre serveur.&lt;br /&gt;L&amp;#8217;outil permet ensuite d&amp;#8217;avoir une vision suffisante des connexions à son site : combien, quand, qui, quel navigateur ..&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='ressources'&gt;Ressources&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://awstats.sourceforge.net/'&gt;Awstats&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.awstats.org/#FEATURES'&gt;Awstats Features&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://piwik.org/'&gt;Piwik&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://help.1and1.com/marketing-c85117/1und1-siteanalytics-c37780/how-do-i-access-1und1-siteanalytics-a597243.html'&gt;1and1 Web Statistics&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://help.1and1.com/marketing-c85117/1und1-siteanalytics-c37780/what-is-the-log-file-format-for-linux-shared-hosting-a598312.html'&gt;format de logs 1and1&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://sourceforge.net/projects/awstats/files/'&gt;download Awstats&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://1024k.de/awstats/1and1/tutorial.html'&gt;tutoriel en anglais&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Ressources URL --&gt;&lt;!-- Ressources images --&gt;</description>
                <link>http://dev.twixer.fr/tuto/2013/06/09/awstats-sur-1and1</link>
                <guid>http://dev.twixer.fr/tuto/2013/06/09/awstats-sur-1and1</guid>
                <pubDate>2013-06-09T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Trucs &amp; Astuces pour Maven sous Windows</title>
                <description>&lt;h1 id='introduction'&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Cet article liste un ensemble de commandes et astuces pour Maven. Comme je travaille la plupart du temps sous Windows, certaines astuces seront liées à cet environnement. Cet article est également un moyen pour moi de garder une liste des commandes que je cherche régulièrement.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='trucs__astuces'&gt;Trucs &amp;amp; Astuces&lt;/h1&gt;

&lt;h2 id='o_se_trouve_le_repository_local_maven_sous_windows_'&gt;Où se trouve le repository local Maven sous Windows ?&lt;/h2&gt;

&lt;p&gt;Le repository local Maven se trouve à la racine de son répertoire de profil dans le répertoire .m2&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;c:\Profiles\NOM_PROFIL.m2\repository&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='comment_trouver_la_dclaration_dune_dpendance_pour_une_bibliothque_donne_'&gt;Comment trouver la déclaration d&amp;#8217;une dépendance pour une bibliothèque donnée ?&lt;/h2&gt;

&lt;p&gt;Prenons l&amp;#8217;exemple de la bibliothèque Spring que nous voulons utiliser sur notre projet. Pour trouver la déclaration du POM on peut se rendre sur le site du &lt;a href='http://mvnrepository.com/'&gt;repository central Maven&lt;/a&gt; et taper le nom de notre bibliothèque dans le champ de recherche :&lt;br /&gt;&lt;img src='/assets/images/maven_repository_spring_search.png' alt='maven_spring_search' /&gt;&lt;/p&gt;

&lt;p&gt;On aura donc les résultats suivants pour Spring :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Context&lt;/li&gt;

&lt;li&gt;Spring Core&lt;/li&gt;

&lt;li&gt;Spring Beans&lt;/li&gt;

&lt;li&gt;Spring TestContext Framework - &amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si c&amp;#8217;est Spring Core qui nous intéresse nous arriverons sur une page avec la liste des version disponibles :&lt;br /&gt;&lt;img src='/assets/images/maven_spring_versions.png' alt='maven_spring_versions' /&gt;&lt;/p&gt;

&lt;p&gt;Un simple clic sur une des versions fournira la bonne déclaration de dépendance à ajouter à son POM :&lt;br /&gt;&lt;img src='/assets/images/maven_spring_3.2.0.png' alt='maven_spring_320' /&gt;&lt;/p&gt;

&lt;h2 id='comment_ajouter_un_jar_qui_nest_pas_dans_le_repository_central_de_maven_'&gt;Comment ajouter un JAR qui n&amp;#8217;est pas dans le repository central de Maven ?&lt;/h2&gt;

&lt;p&gt;Exemple avec &lt;a href='http://stackoverflow.com/questions/1074869/find-oracle-jdbc-driver-in-maven-repository'&gt;les drivers JDBC Oracle&lt;/a&gt;, le POM dans le repository Maven est le suivant :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;  &lt;span class='nt'&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  	&lt;span class='nt'&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.oracle&lt;span class='nt'&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  	&lt;span class='nt'&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;ojdbc14&lt;span class='nt'&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
 	&lt;span class='nt'&gt;&amp;lt;version&amp;gt;&lt;/span&gt;10.2.0.4.0&lt;span class='nt'&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class='nt'&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si on ajoute cette dépendance dans un POM, on aura l&amp;#8217;erreur suivante sous Eclipse :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 pom.xml /gri-persistence line 45 Maven Dependency Problem&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si on va jeter un coup d&amp;#8217;oeil dans le repository maven en local, en ouvrant le POM de notre artefact, on trouve le bloc suivant :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;    &lt;span class='nt'&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Oracle JDBC Driver&lt;span class='nt'&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
    &lt;span class='nt'&gt;&amp;lt;description&amp;gt;&lt;/span&gt;Oracle JDBC driver classes for use with JDK1.4&lt;span class='nt'&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
    &lt;span class='nt'&gt;&amp;lt;url&amp;gt;&lt;/span&gt;http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html&lt;span class='nt'&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce bloc est suivi d&amp;#8217;un bloc licence :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='xml'&gt;	&lt;span class='nt'&gt;&amp;lt;licenses&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;license&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Oracle Technology Network Development and Distribution License Terms&lt;span class='nt'&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
			&lt;span class='nt'&gt;&amp;lt;url&amp;gt;&lt;/span&gt;http://www.oracle.com/technology/software/htdocs/distlic.html&lt;span class='nt'&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
		&lt;span class='nt'&gt;&amp;lt;/license&amp;gt;&lt;/span&gt;
	&lt;span class='nt'&gt;&amp;lt;/licenses&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En raison de la licence, le JAR des drivers JDBC d&amp;#8217;Oracle ne peut pas être déposé dans le repository central Maven. Par contre rien ne nous empêche de l&amp;#8217;ajouter en local.&lt;br /&gt;Pour réaliser cela, il faut se rendre à l&amp;#8217;URL spécifiée dans le POM pour télécharger le JAR en question : &lt;a href='http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html'&gt;drivers JDBC Oracle&lt;/a&gt;. Une fois le JAR en local (par exemple ojdbc6.jar), on doit taper la commande suivante :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;	mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La même chose est à réaliser pour l&amp;#8217;artefact &lt;a href='http://www.oracle.com/technetwork/java/javaee/tech/jta-138684.html'&gt;JTA en version 1.0.1B&lt;/a&gt; :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;	mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=jta-1_0_1B.jar -DgeneratePom=true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;h1 id='ressources'&gt;Ressources&lt;/h1&gt;

&lt;p&gt;&lt;a href='http://mvnrepository.com/'&gt;repository central Maven&lt;/a&gt;&lt;br /&gt;&lt;a href='http://stackoverflow.com/'&gt;Stackoverflow.com&lt;/a&gt;&lt;/p&gt;</description>
                <link>http://dev.twixer.fr/hints%20and%20tips/2013/05/19/trucs--astuces-pour-maven</link>
                <guid>http://dev.twixer.fr/hints%20and%20tips/2013/05/19/trucs--astuces-pour-maven</guid>
                <pubDate>2013-05-19T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>DSM - Design Structure Matrix</title>
                <description>&lt;h1 id='introduction'&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Dans le cadre de mon travail, j&amp;#8217;ai été amené à étudier l&amp;#8217;outil &lt;a href='http://www.lattix.com/'&gt;Lattix&lt;/a&gt;. Cet outil permet de créer des matrices de structures de dépendances (&lt;em&gt;Design|Dependency Structure Matrix&lt;/em&gt; ou &lt;em&gt;DSM&lt;/em&gt;) et de les manipuler. L&amp;#8217;objectif d&amp;#8217;une DSM est la modélisation de l&amp;#8217;architecture d&amp;#8217;un projet et la définition de règles pour le maintien de la cohérence de cette architecture. L&amp;#8217;analyse demandée portait sur la capacité de l&amp;#8217;outil à modéliser un gros projet sous Oracle utilisant beaucoup de schémas et de procédures stockées.&lt;br /&gt;Cet article va décrire mon retour d&amp;#8217;expérience sur les DSM et donner un petit aperçu de Lattix.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='dmarche'&gt;Démarche&lt;/h1&gt;

&lt;p&gt;J&amp;#8217;avais deux axes à suivre pour mener à bien mon travail :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;monter en compétence sur la notion de DSM&lt;/li&gt;

&lt;li&gt;monter en compétence sur Lattix&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pour démarrer, j&amp;#8217;avais sous la main un projet exemple utilsant une base de donnée Oracle 11g ainsi que la couche Java accédant à cette base au moyen du doublé Spring/Hibernate. Les fichiers à disposition étaient les suivants :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;script de création des tablespaces&lt;/li&gt;

&lt;li&gt;script de création des users et des droits&lt;/li&gt;

&lt;li&gt;dump d&amp;#8217;une base de développement&lt;/li&gt;

&lt;li&gt;sources Java de la couche persistence avec Spring/Hibernate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L&amp;#8217;idée était donc de me documenter sur les DSM et d&amp;#8217;utiliser le projet pour manipuler Lattix et voir ce qu&amp;#8217;il y avait sous le capot.&lt;/p&gt;

&lt;h1 id='dsm'&gt;DSM&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2 id='dfinition'&gt;Définition&lt;/h2&gt;

&lt;p&gt;Le sigle DSM est utilisé pour &lt;strong&gt;D&lt;/strong&gt;esign ou &lt;strong&gt;D&lt;/strong&gt;ependency &lt;strong&gt;S&lt;/strong&gt;tructure &lt;strong&gt;M&lt;/strong&gt;attrix. Pour traduire mot à mot l&amp;#8217;anglais, je dirais que c&amp;#8217;est une matrice de la structure de dépendences d&amp;#8217;un système. La DSM est une représentation sous forme de tableau (matrice) des liens entre les composants d&amp;#8217;un système. Le champ d&amp;#8217;application des DSM n&amp;#8217;est pas uniquement l&amp;#8217;informatique bien que ce soit ce domaine qui nous intéresse ici (cf. &lt;a href='http://www.dsm-conference.org/'&gt;DSM-conference&lt;/a&gt;).&lt;/p&gt;

&lt;h2 id='la_cible'&gt;La cible&lt;/h2&gt;

&lt;p&gt;Dans le domaine de l&amp;#8217;IT, l&amp;#8217;approche DSM couvre les besoins de conception, de maintenance ou d&amp;#8217;analyse d&amp;#8217;une architecture. Si nous devons modéliser l&amp;#8217;architecture d&amp;#8217;un système, nous aurons comme premier réflexe l&amp;#8217;utilisation d&amp;#8217;UML et du diagramme de classes pour des langages objets ou alors nous passerons par un MCD/MPD si nous avons affaire à une base de données. Cette conception nous conduit à des schémas comme : &lt;img src='/assets/images/dsm_classdiagram_simple.png' alt='cas simple de modélisation' /&gt; ou comme : &lt;img src='/assets/images/dsm_classdiagram_complicated.jpg' alt='cas de modélisation compliquée' /&gt;&lt;br /&gt;Il n&amp;#8217;est pas tout de suite évident d&amp;#8217;appréhender tous les liens et les dépendences entre les éléments. L&amp;#8217;oeil humain est capable de noter la plus ou moins grande complexité du système mais identifier rapidement quel élément est en lien avec lequel ou lister rapidement tous les liens est bien plus compliqué.&lt;br /&gt;C&amp;#8217;est là qu&amp;#8217;interviennent des représentations comme la DSM. Celle-ci est capable de synthétiser en un tableau les liens entre chaque élément d&amp;#8217;un système et de percevoir la structure du système.&lt;/p&gt;

&lt;h2 id='contenu_dune_dsm'&gt;Contenu d&amp;#8217;une DSM&lt;/h2&gt;

&lt;p&gt;Le schéma suivant représente un exemple de DSM : &lt;img src='/assets/images/dsm_sample.gif' alt='exemple de DSM' /&gt;&lt;br /&gt;Une DSM contient les mêmes éléments en abscisses et en ordonnées et ce dans le même ordre. Certaines DSM ne représentent pas le nom de l&amp;#8217;élément en colonne mais en général un clic sur un élément du tableau met en évidence l&amp;#8217;élément en colonne.&lt;br /&gt;En parcourant la colonne de l&amp;#8217;élément &lt;strong&gt;A&lt;/strong&gt;, on note sur chaque ligne les liens de cet élément avec les autres éléments si un entier est présent (on peut avoir un X, cette représentation dépend des produits). Donc dans notre exemple, &lt;strong&gt;A&lt;/strong&gt; possède un lien vers &lt;strong&gt;C&lt;/strong&gt; et &lt;strong&gt;G&lt;/strong&gt;. En parcourant la ligne pour l&amp;#8217;élément &lt;strong&gt;A&lt;/strong&gt;, on peut noter tous les éléments qui lui font appel c&amp;#8217;est-à-dire &lt;strong&gt;B&lt;/strong&gt; et &lt;strong&gt;F&lt;/strong&gt; dans notre exemple. Donc pour résumer :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;colonne Y : une colonne représente tous les éléments qui sont appelés par Y&lt;/li&gt;

&lt;li&gt;ligne X : une ligne représente tous les éléments qui font appel à X&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='systme_modulaire'&gt;Système modulaire&lt;/h2&gt;

&lt;p&gt;Un système bien conçu doit être découpé en modules (ou composants ou couches suivant la littérature). Les différents modules doivent avoir une adhérence faible avec les autres modules. Par exemple, on pourrait avoir une application avec les modules suivants :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;module IHM&lt;/li&gt;

&lt;li&gt;module services&lt;/li&gt;

&lt;li&gt;module stockage de données&lt;br /&gt;Dans ce découpage, il est déconseillé de créer un lien entre le module IHM et le module stockage de données.&lt;br /&gt;Ce découpage en modules et le découplage entre chacune permet de limiter les impacts en cas de modification de design au sein d&amp;#8217;un module. On peut par exemple modifier la façon dont on stocke/accède aux données sans pour autant impacter la partie IHM. &lt;br /&gt;Une fois ces concepts posés, c&amp;#8217;est là que l&amp;#8217;approche par la DSM est intéressante.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id='analyse_dun_systme_la_thorie'&gt;Analyse d&amp;#8217;un système, la théorie&lt;/h2&gt;

&lt;p&gt;L&amp;#8217;approche DSM permet d&amp;#8217;identifier rapidement les éléments de haut et bas niveau et d&amp;#8217;identifier les modules du système étudié. Dans la matrice, les premiers éléments font partie des modules de haut niveau qui ne sont pas accédés par les autres éléments. Les derniers éléments de la liste représentent le coeur de l&amp;#8217;application, les classes utilitaires accédées par la plupart des autres modules. On pourrait catégoriser ce module comme le framework coeur de l&amp;#8217;application. Seul le triangle inférieur doit posséder des chiffres, dans le cas contraire cela signigie qu&amp;#8217;il y a un problème de conception et qu&amp;#8217;un refactoring est nécessaire (dépendance cyclique possible). Exemple d&amp;#8217;un système découpé en modules fortement couplées :&lt;br /&gt;&lt;img src='/assets/images/dsm_lattix_layer_01.jpg' alt='dsm_lattix_01' /&gt; Voici un autre exemple de système où les modules sont bien découpées et où un module n&amp;#8217;accède qu&amp;#8217;au module inférieure :&lt;br /&gt;&lt;img src='/assets/images/dsm_lattix_layer_02.jpg' alt='dsm_lattix_02' /&gt;&lt;br /&gt;Dans la réalité, même si ce dernier découpage semble idéal, il est bien difficile de l&amp;#8217;atteindre.&lt;/p&gt;

&lt;h2 id='analyse_dun_systme_la_pratique'&gt;Analyse d&amp;#8217;un système, la pratique&lt;/h2&gt;

&lt;p&gt;Voici un exemple de DSM pour la bibliothèque &lt;a href='http://www.springsource.org/spring-framework'&gt;springframework&lt;/a&gt; : &lt;img src='/assets/images/dsm_dtangler_springframework.png' alt='dsm_lattix_springframework_dtangler' /&gt;&lt;br /&gt;On constate que le framework est plutôt bien architecturé avec en haut les éléments de haut niveau, en bas le coeur de la bibliothèque avec les packages &lt;em&gt;core&lt;/em&gt; et &lt;em&gt;util&lt;/em&gt;. Il n&amp;#8217;y a pratiquement pas d&amp;#8217;entier dans le triangle supérieur.&lt;br /&gt;Voici un autre exemple avec la bibliothète &lt;em&gt;commons-collection&lt;/em&gt; de la &lt;a href='http://commons.apache.org/proper/commons-collections/'&gt;fondation Apache&lt;/a&gt;. Cette fois on peut voir un DSM de la même bibliothèque mais le premier est généré avec Sonar et le second avec &lt;a href='http://web.sysart.fi/dtangler/'&gt;Dtangler&lt;/a&gt; :&lt;br /&gt;&lt;img src='/assets/images/dsm_sonar_commons-collections.png' alt='dsm_lattix_commons-collections_sonar' /&gt; &lt;img src='/assets/images/dsm_dtangler_commons-collections.png' alt='dsm_lattix_commons-collections_dtangler' /&gt;&lt;br /&gt;On peut constater que les classes dans le package &lt;em&gt;org.apache.commons.collecions&lt;/em&gt; (colonne 8), font appel à beaucoup d&amp;#8217;autres packages et sont appelées par tous les éléments de la bibliothèque. De même le package &lt;em&gt;list&lt;/em&gt; est appelé par beaucoup d&amp;#8217;autres.&lt;br /&gt;Sans avoir à concevoir le modèle de classe en UML on identifie donc très rapidement avec une DSM l&amp;#8217;architecture d&amp;#8217;une bibliothèque et les points faibles de celle-ci.&lt;/p&gt;

&lt;h2 id='pour_aller_plus_loin'&gt;Pour aller plus loin&lt;/h2&gt;

&lt;p&gt;Ce chapitre liste quelques sites par lesquels je suis passé pour m&amp;#8217;approprier les notions DSM.&lt;/p&gt;

&lt;h3 id='wikipedia'&gt;Wikipedia&lt;/h3&gt;

&lt;p&gt;Comme d&amp;#8217;habidute, Wikipedia est la première ressource disponible pour avoir une définition générale du concept : &lt;a href='http://en.wikipedia.org/wiki/Design_structure_matrix'&gt;DSM (Wikipedia)&lt;/a&gt;. La page reste très verbeuse et une présentation plus graphique est nécessaire pour illustrer les concepts.&lt;/p&gt;

&lt;h3 id='lattix'&gt;Lattix&lt;/h3&gt;

&lt;p&gt;Lattix met à disposition quelques vidéos de démonstration sur son site (&lt;a href='http://www.lattix.com/node/72'&gt;Lattix Tuto&lt;/a&gt;) qui permettent de comprendre les notions basiques sur les DSM.&lt;br /&gt;Une collaboration entre lattix et un professeur du MIT a conduit à la publication d&amp;#8217;un papier sur l&amp;#8217;usage des DSM dans la conception d&amp;#8217;une architecture : &lt;a href='http://www.lattix.com/node/62'&gt;Lattix and MIT&lt;/a&gt;. Ce papier n&amp;#8217;est plus disponible gratuitement sur le site en question, mais il est encore accessible sur le site de Lattix (&lt;a href='http://www.lattix.com/files/dl/wp/oopsla05.pdf'&gt;oopsla05.pdf&lt;/a&gt;). Le suivi des tutoriels vidéos de Lattix et la lecture attentive de la publication du MIT devrait donner une bonne idée des concepts qui se cachent derrière les DSM.&lt;/p&gt;

&lt;h3 id='ndepend'&gt;NDepend&lt;/h3&gt;

&lt;p&gt;C&amp;#8217;est sur le site de NDepend que j&amp;#8217;ai finalement trouvé les meilleurs schémas explicatifs : &lt;a href='http://www.ndepend.com/doc_matrix.aspx'&gt;DSM par NDepend&lt;/a&gt;.&lt;br /&gt;Plusieurs exemples d&amp;#8217;architectures modélisées en DSM sont présentées et permettent de mieux comprendre la puissance du DSM pour comprendre, concevoir et maintenir une architecture.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='lattix'&gt;Lattix&lt;/h1&gt;

&lt;p&gt;Afin de tester le produit, je me suis appuyer sur mon projet exemple avec une base de données Oracle ainsi que sur des projets Java (personnel ou public).&lt;br /&gt;Pour utiliser le produit &lt;a href='http://www.lattix.com/'&gt;Lattix&lt;/a&gt; il faut obtenir une licence sur le site de l&amp;#8217;éditeur.&lt;/p&gt;

&lt;h2 id='les_types_de_projets'&gt;Les types de projets&lt;/h2&gt;

&lt;p&gt;Lattix permet de créer des DSM à partir de plusieurs sources :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;projets Java (fichiers jar ou classes)&lt;/li&gt;

&lt;li&gt;projets Hibernate ou Spring (fichiers de configuration XML)&lt;/li&gt;

&lt;li&gt;projets base de données Oracle (connexion directe à la base)&lt;/li&gt;

&lt;li&gt;projets .Net - &amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un premier reproche qui peut être fait à Lattix est qu&amp;#8217;il ne prend pas les fichiers sources Java en entrée mais les classes compilées ou les fichiers JAR. Cela a été un frein pour des projets dont j&amp;#8217;avais une partie des sources mais pas toutes les dépendances. Je ne pouvais pas compiler mes sources et je n&amp;#8217;ai donc pas réussi à intégrer le projet dans Lattix.&lt;br /&gt;Un second reproche concerne les projets Oracle. Je n&amp;#8217;ai pas réussi à intégrer mon projet à partir du script de création d&amp;#8217;un schéma. Il me fallait un accès direct à la base Oracle pour pouvoir mener l&amp;#8217;analyse. Cela a donc impliqué de m&amp;#8217;installer l&amp;#8217;environnement Oracle 11g en local.&lt;/p&gt;

&lt;h2 id='manipulation_dynamique'&gt;Manipulation dynamique&lt;/h2&gt;

&lt;p&gt;Par rapport à un outil comme Sonar, Lattix permet une manipulation dynamique de la DSM produite. Il est par exemple possible de monter ou descendre les éléments et de voir directement l&amp;#8217;impact en terme de métriques. On peut masquer les lignes qui ne nous intéressent pas et également créer des sous-packages et réduire ces nouveaux packages pour augmenter la lisibilité de la matrice.&lt;br /&gt;L&amp;#8217;outil aurotirse donc une manipulation dynamique du DSM qui permet réellement de concevoir un nouveau design pour notre système.&lt;/p&gt;

&lt;h2 id='partitionnement'&gt;Partitionnement&lt;/h2&gt;

&lt;p&gt;Lattix est capable de partitionner la matrice produite. Derrière le partitionnement se cache des algorithmes qui vont permettre de réaliser des regroupements d&amp;#8217;éléments dans la matrice. Avec la création dynamique de packages, il est donc possible de faire des tests de re-arrangement les éléments. La finalité est de réaliser un refactoring d&amp;#8217;un système dont les liens ne seraient pas corrects.&lt;/p&gt;

&lt;h2 id='rgles'&gt;Règles&lt;/h2&gt;

&lt;p&gt;Lattix permet d&amp;#8217;ajouter des règles pour maintenir la cohésion du système. Il est par exemple possible de définir deux types de règles :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;peut utiliser : permet de dire qu&amp;#8217;un élément X peut faire appel à Y&lt;/li&gt;

&lt;li&gt;ne peut pas utiliser : permet de dire qu&amp;#8217;un élément X ne peut pas faire appel à un élément Y Ces règles sont visualiser graphiquement et les manquements sont mis en évidence.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;L&amp;#8217;analyse du produit Lattix m&amp;#8217;a permis d&amp;#8217;aborder et de comprendre l&amp;#8217;approche DSM. J&amp;#8217;avais déjà été confronté à cette représentation sans y prêter attention avec par exemple &lt;a href='http://www.sonarsource.org/'&gt;Sonar&lt;/a&gt; dans le monde Java. L&amp;#8217;analyse de l&amp;#8217;architecture d&amp;#8217;un projet sous Sonar sera maintenant d&amp;#8217;autant plus simple et rapide.&lt;br /&gt;Lattix se révèle être un produit assez puissant par rapport à un outil comme Sonar ou &lt;a href='http://web.sysart.fi/dtangler/'&gt;Dtangler&lt;/a&gt;. Les fonctionnalités de Lattix permettent réellement à un architecte de réaliser son travail en amont comme en aval de la réalisation d&amp;#8217;un projet. En amont, il permet de définir des règles pour une architecture et de vérifier que ces règles sont maintenues. En aval, c&amp;#8217;est un bon outil pour appréhender un nouveau système inconnu et identifier rapidement les choix de conception et les éventuels problèmes.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='ressources'&gt;Ressources&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.lattix.com/'&gt;Lattix&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.dsm-conference.org/'&gt;DSM-conference&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://en.wikipedia.org/wiki/Design_structure_matrix'&gt;DSM (Wikipedia)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lattix.com/node/72'&gt;Lattix Tuto&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lattix.com/node/62'&gt;Lattix and MIT&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.lattix.com/files/dl/wp/oopsla05.pdf'&gt;oopsla05.pdf&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.ndepend.com/doc_matrix.aspx'&gt;DSM par NDepend&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.sonarsource.org/'&gt;Sonar&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://web.sysart.fi/dtangler/'&gt;dtangler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Ressources URL --&gt;&lt;!-- Ressources images --&gt;</description>
                <link>http://dev.twixer.fr/tuto/2013/05/19/dsm-design-structure-matrix</link>
                <guid>http://dev.twixer.fr/tuto/2013/05/19/dsm-design-structure-matrix</guid>
                <pubDate>2013-05-19T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Jekyll chez 1and1</title>
                <description>&lt;h1 id='introduction'&gt;Introduction&lt;/h1&gt;

&lt;p&gt;J&amp;#8217;utilise les services de l&amp;#8217;hébergeur &lt;a href='https://www.1and1.fr/'&gt;1and1&lt;/a&gt; depuis très longtemps, décembre 2005 pour être précis. J&amp;#8217;avais souscrit à l&amp;#8217;époque en raison d&amp;#8217;une offre très agressive et donc très intéressante. Depuis ce temps, je profite donc de cet hébergeur pour mes différents besoins (forums, sites webs &amp;#8230;). J&amp;#8217;y possède un serveur mutualisé avec du stockage, des bases de données MySQL, divers noms de domaine. Cet article va décrire l&amp;#8217;intégration de Jekyll chez l&amp;#8217;hébergeur &lt;a href='https://www.1and1.fr/'&gt;1and1&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='domaine'&gt;Domaine&lt;/h1&gt;

&lt;p&gt;Je possède le nom de domaine twixer.fr et j&amp;#8217;ai choisi d&amp;#8217;utiliser le sous-domaine dev.twixer.fr pour mon site de blogs. La configuration se fait simplement dans le menu &lt;em&gt;Domaines &amp;amp; Espaces Web&lt;/em&gt; : &lt;img src='/assets/images/1and1_domaines.png' alt='domaines 1and1' /&gt; Je fais pointer mon sous-domaine &lt;em&gt;dev.twixer.fr&lt;/em&gt; vers le répertoire : &lt;em&gt;/www/site-twixer/_site&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='connexion_au_serveur_1and1'&gt;Connexion au serveur 1and1&lt;/h1&gt;

&lt;p&gt;J&amp;#8217;ai un serveur mutualisé sur lequel je peux me connecter via FTP, SSH. Les informations de connexion sont disponibles dans l&amp;#8217;espace client de 1and1 : &lt;img src='/assets/images/1and1_access.png' alt='accès 1and1' /&gt; Si vous ne les posséder pas déjà, il faut récupérer les identifiants de connexion SSH pour votre domaine (login et mot de passe) dans cette interface. Attention, il y a un léger temps d&amp;#8217;attente pour l&amp;#8217;activation du mot de passe. Une fois le login et mot de passe en main, on va pouvoir se connecter via SSH à notre serveur. Personnellement étant sous Windows, j&amp;#8217;utilise le client &lt;a href='http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html'&gt;Putty&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='jekyll_et_1and1'&gt;Jekyll et 1and1&lt;/h1&gt;

&lt;p&gt;Sur mon serveur 1and1, j&amp;#8217;ai accès à ruby et à Git. J&amp;#8217;ai donc fait le choix de générer mon site sur mon serveur 1and1.&lt;br /&gt;Version de ruby :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ruby 1.8.7 (2010-08-16 patchlevel 302) [i486-linux]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Version de git :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;git version 1.7.2.5&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id='installation_de_jekyll'&gt;Installation de Jekyll&lt;/h2&gt;

&lt;p&gt;Pour installer des gems Ruby chez 1and1, il faut changer le répertoire par défaut de destination des nouvelles gems en raison de problèmes d&amp;#8217;écriture dans les répertoires. Il faut donc modifier le fichier &lt;em&gt;.bash_profile&lt;/em&gt; en y ajoutant les lignes suivantes :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;export PREFIX=~/ruby/gem&lt;/span&gt;
&lt;span class='go'&gt;export GEM_HOME=$PREFIX/lib/ruby/gems/1.8&lt;/span&gt;
&lt;span class='go'&gt;export RUBYLIB=$PREFIX/lib/ruby:$PREFIX/lib/site_ruby/1.8&lt;/span&gt;
&lt;span class='go'&gt;export PATH=$PATH:$PREFIX/lib/ruby/gems/1.8/bin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;N&amp;#8217;oublier pas de recharger ce fichier avec la commande &lt;em&gt;source .bash_profile&lt;/em&gt;. On va donc déposer les nouvelles gems dans un répertoire &lt;em&gt;./ruby/gem/lib/ruby/gems&lt;/em&gt; à la racine de notre arborescence.&lt;/p&gt;

&lt;p&gt;Ensuite il faut installer Jekyll de la façon classique :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;gem install jekyll&lt;/span&gt;
&lt;span class='go'&gt;gem install rdiscount&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mon dépôt de gems contient (&lt;em&gt;gem list&lt;/em&gt;) :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;*** LOCAL GEMS ***&lt;/span&gt;

&lt;span class='go'&gt;chunky_png (1.2.8)&lt;/span&gt;
&lt;span class='go'&gt;classifier (1.3.3)&lt;/span&gt;
&lt;span class='go'&gt;compass (0.12.2)&lt;/span&gt;
&lt;span class='go'&gt;directory_watcher (1.5.1)&lt;/span&gt;
&lt;span class='go'&gt;fast-stemmer (1.0.2)&lt;/span&gt;
&lt;span class='go'&gt;fssm (0.2.10)&lt;/span&gt;
&lt;span class='go'&gt;jekyll (0.12.1)&lt;/span&gt;
&lt;span class='go'&gt;kramdown (0.14.2)&lt;/span&gt;
&lt;span class='go'&gt;liquid (2.5.0)&lt;/span&gt;
&lt;span class='go'&gt;maruku (0.6.1)&lt;/span&gt;
&lt;span class='go'&gt;posix-spawn (0.3.6)&lt;/span&gt;
&lt;span class='go'&gt;pygments.rb (0.3.7)&lt;/span&gt;
&lt;span class='go'&gt;rake (10.0.4)&lt;/span&gt;
&lt;span class='go'&gt;rdiscount (2.0.7.2)&lt;/span&gt;
&lt;span class='go'&gt;sass (3.2.8)&lt;/span&gt;
&lt;span class='go'&gt;syntax (1.0.0)&lt;/span&gt;
&lt;span class='go'&gt;yajl-ruby (1.1.0)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Jekyll est donc maintenant installé sur notre serveur 1and1 et nous pouvons générer des sites directement depuis le serveur.&lt;/p&gt;

&lt;h2 id='git_et_le_repository_github'&gt;Git et le repository GitHub&lt;/h2&gt;

&lt;p&gt;Pour récupérer les fichiers de mon site de blogging, rien de plus simple. J&amp;#8217;ai créé un répertoire &lt;em&gt;./www/site-twixer&lt;/em&gt; à la racine de mon &lt;em&gt;home&lt;/em&gt; afin d&amp;#8217;accueillir mon site de blogs. Je me place dans le répertoire &lt;em&gt;./www&lt;/em&gt; et je clone mon repository GitHub :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;git clone git@github.com:Twixer/site-twixer.git&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Inutile de spéficier un répertoire de destination parce que mon repository se nomme &lt;em&gt;site-twixer&lt;/em&gt; et ira bien dans le répertoire attendu. &lt;br /&gt;A partir de là on peut lancer la commande jekyll depuis &lt;em&gt;./www/site-twixer&lt;/em&gt; pour construire notre site qui sera généré dans le répertoire &lt;em&gt;./www/site-twixer/_site.&lt;/em&gt; (cf. la configuration de destination pour le sous-domaine !).&lt;/p&gt;

&lt;p&gt;Pour les mises à jour ultérieures du site, il suffit d&amp;#8217;utiliser la commande git pull dans le répertoire &lt;em&gt;site-twixer&lt;/em&gt; puis relancer la génération du site avec la commande &lt;em&gt;jekyll&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id='paramtrages_supplmentaires'&gt;Paramétrages supplémentaires&lt;/h2&gt;

&lt;h3 id='erreur_404'&gt;Erreur 404&lt;/h3&gt;

&lt;p&gt;Par défaut, les erreurs HTTP 404 de 1and1 sont renvoyées vers une page standard de 1and1. Nous voulons que l&amp;#8217;erreur 404 pointe vers la page &lt;em&gt;404.html&lt;/em&gt; de notre site. Pour ce faire, il faut créer un fichier &lt;em&gt;.htaccess&lt;/em&gt; dans le répertoire &lt;em&gt;./www/site-twixer&lt;/em&gt; avec la ligne suivante :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;ErrorDocument 404 /404.html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On pourrait donc rajouter d&amp;#8217;autres pages d&amp;#8217;erreur à notre site en n&amp;#8217;oubliant pas à chaque fois d&amp;#8217;ajouter la ligne correspondante dans ce fichier (400, 500, &amp;#8230;).&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Nous pouvons donc maintenant générer directement notre site Jekyll sur notre serveur 1and1. Ce fonctionnement nous permet donc de modifier le site depuis n&amp;#8217;importe quel endroit tant qu&amp;#8217;on le pousse sur le repository GitHub. &lt;br /&gt;Le cycle de vie n&amp;#8217;est pas idéal pour l&amp;#8217;instant car la modification d&amp;#8217;une page sur un poste en local avec un push sur GitHub nous oblige à effectuer des étapes manuelles pour mettre à jour notre site :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;connexion via SSH au serveur 1and1&lt;/li&gt;

&lt;li&gt;&lt;em&gt;git pull&lt;/em&gt; pour récupérer les dernières modifications&lt;/li&gt;

&lt;li&gt;&lt;em&gt;jekyll&lt;/em&gt; pour générer le sites&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Même si elles restent simples, ces opérations devraient être automatisées. Affaire à suivre &amp;#8230;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='ressources'&gt;Ressources&lt;/h1&gt;

&lt;p&gt;&lt;a href='https://www.1and1.fr/'&gt;1and1&lt;/a&gt;&lt;br /&gt;&lt;a href='http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html'&gt;Putty&lt;/a&gt;&lt;/p&gt;</description>
                <link>http://dev.twixer.fr/tuto/2013/05/12/jekyll-chez-1and1</link>
                <guid>http://dev.twixer.fr/tuto/2013/05/12/jekyll-chez-1and1</guid>
                <pubDate>2013-05-12T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Jekyll sur Windows</title>
                <description>&lt;h1 id='introduction'&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Après avoir fait le choix de Jekyll pour &lt;em&gt;propulser&lt;/em&gt; ce site, il fallait mettre en place un environnement de développement sur mon poste local. Je travaille sur un poste sous Windows. Autant le dire tout de suite, j&amp;#8217;ai lutté pour finaliser un environnement stable.&lt;br /&gt;Entre l&amp;#8217;installation de la bonne version de Ruby, des gems nécessaires, du choix d&amp;#8217;un template Jekyll, la route fut pavée de difficultés et problèmes en tout genre.&lt;br /&gt;Cet article présente les différentes étapes à suivre pour disposer d&amp;#8217;un environnement de développement pour générer un site de blogging avec Jekyll.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='environnement_technique'&gt;Environnement technique&lt;/h1&gt;

&lt;p&gt;J&amp;#8217;utilise un poste sous Windows 7 Professionnel SP1 (sytème 64 bits).&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='ruby'&gt;Ruby&lt;/h1&gt;

&lt;p&gt;Jekyll a besoin de ruby pour fonctionner. Pour l&amp;#8217;installation j&amp;#8217;ai suivi le tutoriel &lt;a href='http://forresst.github.io/2012/03/20/Installer-Jekyll-Sous-Windows'&gt;Installation de Jekyll sous Windows&lt;/a&gt;. Ce tutoriel est à suivre à la lettre et seule la dernière astuce n&amp;#8217;a pas été nécessaire dans mon cas. Les versions de ruby et du devKit que j&amp;#8217;ai utilisé sont à récupérer sur &lt;a href='http://rubyinstaller.org/downloads/' title='Site RubyInstaller pour Windows'&gt;RubyInstaller&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://rubyforge.org/frs/download.php/76798/rubyinstaller-1.9.3-p392.exe'&gt;rubyinstaller-1.9.3-p392.exe&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe'&gt;DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avec ces deux versions et le suivi du tutoriel d&amp;#8217;installation, vous aurez un environnement fonctionnel pour Jekyll sous Windows.&lt;/p&gt;

&lt;p&gt;Voici mon dépôt de gems avec leur version (commande &lt;em&gt;gem list&lt;/em&gt;) :&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;** LOCAL GEMS **
anemone (0.7.2)
bigdecimal (1.1.0)
chunky_png (1.2.8)
classifier (1.3.3)
colorator (0.1)
commander (4.1.3)
commonjs (0.2.6)
compass (0.12.2)
directory_watcher (1.5.1, 1.4.1)
fast-stemmer (1.0.2)
fssm (0.2.10)
highline (1.6.18)
io-console (0.3)
jekyll (0.12.1)
json (1.5.5)
kramdown (0.14.2)
less (2.3.2)
liquid (2.5.0)
maruku (0.6.1)
minitest (2.5.1)
nokogiri (1.5.9 x86-mingw32)
posix-spawn (0.3.6)
pygments.rb (0.4.2, 0.3.7)
rake (0.9.2.2)
rdiscount (2.0.7.2)
rdoc (3.9.5)
ref (1.0.4)
robotex (1.0.0)
rvm (1.11.3.7)
safe_yaml (0.7.1)
sass (3.2.8)
syntax (1.0.0)
yajl-ruby (1.1.0 x86-mingw32)&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='les_piges__viter'&gt;Les pièges à éviter&lt;/h2&gt;

&lt;p&gt;J&amp;#8217;ai tenté une installation avec les dernières versions de Ruby et du devKit, respectivement les versions 2.0.0 et 4.7.2, mais j&amp;#8217;ai eu des problèmes avec les versions 64 bits.&lt;br /&gt;J&amp;#8217;ai également tenté d&amp;#8217;installer une version 32 bits de ces versions mais c&amp;#8217;est avec les dépendances de Jekyll que j&amp;#8217;ai rencontré des problèmes. Jekyll n&amp;#8217;est pas compatible avec la dernière version des gems Ruby 2, donc je suis resté sur les versions 1.9.3.&lt;/p&gt;

&lt;p&gt;A chaque ouverture d&amp;#8217;une fenêtre de commande Windows, il faudra taper les commandes suivantes pour la prise en compte de l&amp;#8217;encoding en UTF-8 :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;	set LC_ALL=en_US.UTF-8&lt;/span&gt;
&lt;span class='go'&gt;	set LANG=en_US.UTF-8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans le cas contraire, des erreurs pourraient apparaître lors de la création du site avec la commande &lt;em&gt;jekyll&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='git'&gt;Git&lt;/h1&gt;

&lt;p&gt;Le versionning est assuré au moyen de Git. Il faut donc installer &lt;a href='http://code.google.com/p/msysgit/'&gt;Git pour Windows&lt;/a&gt;. Dans mon cas j&amp;#8217;utilise la version &lt;a href='http://code.google.com/p/msysgit/downloads/detail?name=Git-1.7.9-preview20120201.exe&amp;amp;can=2&amp;amp;q='&gt;1.7.9&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Jusqu&amp;#8217;à maintenant je n&amp;#8217;ai eu l&amp;#8217;occasion d&amp;#8217;utiliser que &lt;a href='http://subversion.tigris.org/'&gt;SVN&lt;/a&gt; comme gestionnaire de sources. La prise en main de Jekyll avec un versionning sous Github m&amp;#8217;a permis de me familiariser avec Git.&lt;br /&gt;Je maîtrise les grands concepts de versionning (ajout, commit, commentaires, branches, tags &amp;#8230;) mais pour me familiariser avec Git j&amp;#8217;ai suivi le &lt;a href='http://gitimmersion.com/'&gt;tutoriel Git Immersion&lt;/a&gt; assez sympa qui permet d&amp;#8217;y aller pas à pas. Je conseille à chaque débutant souhaitant comprendre les concepts et la syntaxe des commandes de le suivre au moins une fois.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;utilise actuellement deux sources de documentation principales :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le &lt;a href='http://gitmanual.org/git.html'&gt;manuel Git&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;le &lt;a href='http://git-scm.com/book'&gt;livre Pro Git en ligne&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1 id='jekyll'&gt;Jekyll&lt;/h1&gt;

&lt;p&gt;Pour démarrer avec &lt;a href='http://jekyllrb.com/'&gt;Jekyll&lt;/a&gt;, on peut partir de zéro comme le préconise &lt;a href='http://carlboettiger.info/2012/12/30/learning-jekyll.html'&gt;Carl Boettiger&lt;/a&gt;. L&amp;#8217;apprentissage de zéro permet de n&amp;#8217;utiliser que les fonctionnalités dont on a besoin et de maîtriser au fil de l&amp;#8217;eau l&amp;#8217;outil et les concepts.&lt;br /&gt;Pour ma part, j&amp;#8217;ai décidé de partir sur un template existant. Je voulais disposer rapidement d&amp;#8217;un site avec une structure, une mise en page et des plugins.&lt;/p&gt;

&lt;h2 id='jekyllbootstrap'&gt;Jekyll-Bootstrap&lt;/h2&gt;

&lt;p&gt;J&amp;#8217;ai choisi de partir sur &lt;a href='http://jekyllbootstrap.com/'&gt;Jekyll-Bootstrap&lt;/a&gt; (JB) pour une première utilisation de Jekyll. JB contient de base les éléments suivants :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://jekyllbootstrap.com/usage/blog-configuration.html'&gt;fonctionnalités&lt;/a&gt; : commentaires, analytics, pages/tags, partage social &amp;#8230;&lt;/li&gt;

&lt;li&gt;mise en place simple et rapide de &lt;a href='http://jekyllbootstrap.com/usage/jekyll-theming.html'&gt;thèmes&lt;/a&gt;, changement entre thèmes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour démarrer avec JB, rien de plus simple. En ligne de commande, taper la commande suivante :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;git clone https://github.com/plusjade/jekyll-bootstrap.git DEST_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les sources pour démarrer se trouvent donc maintenant dans DEST_PATH.&lt;br /&gt;Pour ma part j&amp;#8217;utilise GitHub pour héberger mon repository distant de sources. J&amp;#8217;y ai créé le repository &lt;em&gt;site-twixer&lt;/em&gt;. Pour pouvoir pousser mes fichiers sur mon repository, j&amp;#8217;ai suivi les étapes suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;supprimer le répertoire .git dans DEST_PATH/&lt;/li&gt;

&lt;li&gt;en ligne de commande :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;	git clone git@github.com:Twixer/site-twixer.git DEST_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;en ligne de commande et dans le répertoire DEST_PATH :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;	git add .  &lt;/span&gt;
&lt;span class='go'&gt;	git commit -m &amp;quot;add the template Jekyll-Bootstrap&amp;quot;  &lt;/span&gt;
&lt;span class='go'&gt;	git push  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez maintenant ajouter des articles dans le répertoire DEST_PATH/_post. On peut utiliser une commande du rakefile de JB :&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='console'&gt;&lt;span class='go'&gt;rake post title=&amp;quot;Hello World&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un fichier avec le pattern &lt;em&gt;AAAA-MM-JJ-Hello-World.md&lt;/em&gt; sera créé dans le répertoire DEST_PATH/_post avec un en-tête YAML déjà initialisé.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='conclusion'&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Après avoir installé Ruby et la gem Jekyll, Git et le projet Jekyll-Bootstrap, on est prêt à écrire les articles pour son site de blogging. La facilité de création d&amp;#8217;un thème pour JB m&amp;#8217;a conduit à créer un thème &lt;a href='https://github.com/Twixer/theme-jb-twixer'&gt;twixer&lt;/a&gt; que je compte modifier au fur et à mesure. Le déploiement du site chez mon hébergeur sera abordé dans l&amp;#8217;article &lt;a href='/tuto/2013/05/12/jekyll-chez-1and1'&gt;Jekyll chez 1and1&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='ressources'&gt;Ressources&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ruby&lt;br /&gt;site &lt;a href='http://rubyinstaller.org/downloads/' title='Site RubyInstaller pour Windows'&gt;RubyInstaller&lt;/a&gt; pour Windows&lt;br /&gt;&lt;a href='http://forresst.github.io/2012/03/20/Installer-Jekyll-Sous-Windows'&gt;Installation de Jekyll sous Windows&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Git&lt;br /&gt;&lt;a href='http://code.google.com/p/msysgit/'&gt;Git pour Windows&lt;/a&gt;&lt;br /&gt;&lt;a href='http://gitimmersion.com/'&gt;tutoriel Git Immersion&lt;/a&gt;&lt;br /&gt;&lt;a href='http://gitmanual.org/git.html'&gt;manuel Git&lt;/a&gt;&lt;br /&gt;&lt;a href='http://git-scm.com/book'&gt;livre Pro Git en ligne&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Jekyll&lt;br /&gt;site officiel de &lt;a href='http://jekyllrb.com/'&gt;Jekyll&lt;/a&gt;&lt;br /&gt;site officiel de &lt;a href='http://jekyllbootstrap.com/'&gt;Jekyll-Bootstrap&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
                <link>http://dev.twixer.fr/tuto/2013/05/09/jekyll-sur-windows</link>
                <guid>http://dev.twixer.fr/tuto/2013/05/09/jekyll-sur-windows</guid>
                <pubDate>2013-05-09T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Le cinquième commandement</title>
                <description>&lt;h1 id='blog_static_vs_blog_dynamic'&gt;Blog static vs blog dynamic&lt;/h1&gt;

&lt;p&gt;Pour ce blog, mon besoin était le suivant :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;une mise à jour simple des pages&lt;/li&gt;

&lt;li&gt;un déploiement simplifié quelque soit l&amp;#8217;hébergeur&lt;/li&gt;

&lt;li&gt;système de plugins (commentaires, mise en forme, images &amp;#8230;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id='mise__jour_des_pages'&gt;Mise à jour des pages&lt;/h2&gt;

&lt;p&gt;Pour avoir déjà été confronté à des blog dynamiques, plusieurs contraintes ne me satisfaisaient pas. Je ne voulais plus m&amp;#8217;embarasser d&amp;#8217;une base de données pour le stockage des posts. Le stockage dans une base obligeant à passer par une console d&amp;#8217;administration pour mettre à jour les articles était une contrainte.&lt;/p&gt;

&lt;h2 id='hbergement'&gt;Hébergement&lt;/h2&gt;

&lt;p&gt;Je n&amp;#8217;avais pas d&amp;#8217;idée précise quant à l&amp;#8217;hébergement final de mon blog. Je possède bien sûr un hébergeur mais je voulais rester souple et pouvoir en changer. Je ne voulais pas non plus être lié à une plateforme de blogging. L&amp;#8217;hébergement d&amp;#8217;un site statique, fournissant du simple HTML, est celui qui présente le moins de contraintes pour la migration.&lt;/p&gt;

&lt;h2 id='plugins'&gt;Plugins&lt;/h2&gt;

&lt;p&gt;Enfin, bien que le site soit statique, la possibilité d&amp;#8217;inclure des éléments dynamiques comme les commentaires était important.&lt;/p&gt;

&lt;h1 id='jekyll'&gt;Jekyll&lt;/h1&gt;

&lt;p&gt;Mon choix s&amp;#8217;est porté sur &lt;a href='http://jekyllrb.com/'&gt;Jekyll&lt;/a&gt;. Jekyll répond aux contraintes que je me suis fixé mais il a en plus d&amp;#8217;autres attraits qui m&amp;#8217;ont attiré.&lt;br /&gt;En effet, Jekyll est le moteur qui propulse les sites hébergé par &lt;a href='https://help.github.com/articles/using-jekyll-with-pages'&gt;Github&lt;/a&gt;. J&amp;#8217;ai un compte Github depuis longtemps mais je n&amp;#8217;ai jamais eu l&amp;#8217;occasion de l&amp;#8217;utiliser. C&amp;#8217;était donc là une bonne occasion de s&amp;#8217;y mettre.&lt;br /&gt;Chaque moteur de blogs statiques utilise un langage propre : PHP, Python, Ruby &amp;#8230; Jekyll utilise Ruby.&lt;br /&gt;Démarrer avec Jekyll implique de franchir un palier technique plus ou moins important en fonction de son background :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Notions Ruby : installation, langage, système de gems, rakefile &amp;#8230;&lt;/li&gt;

&lt;li&gt;Jekyll : arborescence, Liquid templating, &amp;#8230;&lt;/li&gt;

&lt;li&gt;Langage Markdown pour les articles&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;J&amp;#8217;ai trouvé une bonne introduction aux concepts de Jekyll sur &lt;a href='http://jekyllbootstrap.com/lessons/jekyll-introduction.html'&gt;Jekyll-Bootstrap&lt;/a&gt;. Un article en français qui liste ses avantages et ses inconvénients peut être trouvé sur &lt;a href='http://jeremyherve.com/2011/08/28/passer-de-wordpress-jekyll-premiere-partie/'&gt;http://jeremyherve.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='cycle_de_vie'&gt;Cycle de vie&lt;/h2&gt;

&lt;p&gt;Une fois établi le choix technique du moteur de blogging, il faut également penser au développement et déploiement de son site. Pour ma part, mon cycle de vie est le suivant :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;rédaction des articles sur mon poste en local dans un simple éditeur&lt;/li&gt;

&lt;li&gt;versionning gérer par Git et poussé sur un repository distant (&lt;a href='https://github.com/Twixer/site-twixer'&gt;Github&lt;/a&gt;)&lt;/li&gt;

&lt;li&gt;récupération de la dernière version sur mon hébergeur&lt;/li&gt;
&lt;/ol&gt;</description>
                <link>http://dev.twixer.fr/tech/2013/05/08/le-cinquieme-commandement</link>
                <guid>http://dev.twixer.fr/tech/2013/05/08/le-cinquieme-commandement</guid>
                <pubDate>2013-05-08T00:00:00+02:00</pubDate>
        </item>

        <item>
                <title>Au commencement ...</title>
                <description>&lt;h1 id='hello_the_world'&gt;Hello the World&lt;/h1&gt;

&lt;p&gt;Enfin ! Depuis le temps que je voulais monter mon site de blogging ! Malheureusement par manque de temps et de réelle motivation l&amp;#8217;idée était tombée à l&amp;#8217;eau moult fois.&lt;br /&gt;Mais finalement le voici ! Le coup de pousse final m&amp;#8217;a été donné suite à ma participation à &lt;a href='http://www.devoxx.com/display/FR13/Home'&gt;DevoxxFr 2013&lt;/a&gt; et à la bonne dose de motivation que m&amp;#8217;a insuflé cet événement.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='un_parcours_de_veilleur'&gt;Un parcours de veilleur&lt;/h1&gt;

&lt;p&gt;Je travaille depuis des années dans le monde de l&amp;#8217;informatique et dans l&amp;#8217;univers des SSII françaises.&lt;br /&gt;Depuis tout ce temps je mène une activité de veille régulière sur les domaines liés à mon activté, proche de mon activité ou tout à fait à l&amp;#8217;opposé.&lt;br /&gt;Je suis un grand consommateur de sites d&amp;#8217;information IT, forums ou blogs. J&amp;#8217;utilise divers outils pour mener cette veille, j&amp;#8217;ai démarré avec les simples favoris du navigateur, puis les flux RSS avec &lt;a href='http://www.netvibes.com'&gt;Netvibes&lt;/a&gt;, Google Reader (RIP) et maintenant j&amp;#8217;utilise principalement Twitter tout en conservant mes flux RSS.&lt;/p&gt;

&lt;p&gt;Mes principaux sujets d&amp;#8217;intérêt liés à mon travail sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java : JEE, les frameworks, les langages JVM&lt;/li&gt;

&lt;li&gt;le Web : HMTL (5), le CSS, le Javascript&lt;/li&gt;

&lt;li&gt;le décisionnel : les ETL, les outils de reporting&lt;/li&gt;

&lt;li&gt;les outils &lt;a href='http://en.wikipedia.org/wiki/DevOps'&gt;Devops&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;les méthodologies de développement et en particulier les méthodes agiles (&lt;a href='http://fr.wikipedia.org/wiki/Scrum_%28m%C3%A9thode%29'&gt;Scrum&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Que de souvenir en déterrant quelques vieux favoris &lt;a href='https://delicious.com/twixer/java+news'&gt;Del.icio.us&lt;/a&gt;. A l&amp;#8217;époque mes sites de veille était principalement : &lt;a href='http://www.application-servers.com/'&gt;a19s&lt;/a&gt;, &lt;a href='http://www.developpez.com'&gt;Developpez&lt;/a&gt;, &lt;a href='http://www.theserverside.com/'&gt;The server side&lt;/a&gt; et quelques autres. Aujourd&amp;#8217;hui la donne a changé, l&amp;#8217;information est de plus en plus présente et partagée, l&amp;#8217;information est même devenue sociale.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='la_communaut'&gt;La communauté&lt;/h1&gt;

&lt;p&gt;Mon boulot ne m&amp;#8217;a pas amené à travailler activemement sur des projets Open Source ni à contribuer à cet univers très riche. J&amp;#8217;ai plutôt été un consommateur qu&amp;#8217;un producteur toutes ces années. Je suis pourtant amené dans le cadre de mon travail à créer du code, à concevoir des architectures, à rédigé de la documentation techniques, des tutoriels, des FAQ. Je suis un intégriste de la documentation bien faite et je harcèle souvent mes équipes sur ce sujet. Il est donc temps de partager avec la communauté un peu de mon expérience.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id='le_contenu'&gt;Le contenu&lt;/h1&gt;

&lt;p&gt;Je n&amp;#8217;ai pas encore une idée précise du contenu que je vais pouvoir partager ici. Dans l&amp;#8217;ensemble, les sujets tourneront autour de la technique avec des informations, des trucs &amp;amp; astuces, des tutoriels &amp;#8230; Comme beaucoup, je me servirai également de ce blog comme d&amp;#8217;un aide-mémoire sur des sujets particuliers.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;ai hésité au début sur la langue à employer sur ce blog, anglais ou français. Finalement pour commencer ce sera le français. Par contre, je ferai souvent des renvois vers des sites anglophones.&lt;/p&gt;</description>
                <link>http://dev.twixer.fr/nodev/2013/05/05/au-commencement</link>
                <guid>http://dev.twixer.fr/nodev/2013/05/05/au-commencement</guid>
                <pubDate>2013-05-05T00:00:00+02:00</pubDate>
        </item>


</channel>
</rss>
