<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog - Maxime Bornemann</title>
	<atom:link href="http://maximebornemann.com/feed" rel="self" type="application/rss+xml" />
	<link>http://maximebornemann.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Tue, 16 Feb 2010 20:03:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>5 discours pour motiver et inspirer les technophiles</title>
		<link>http://maximebornemann.com/5-discours-motiver-inspirer-technophiles</link>
		<comments>http://maximebornemann.com/5-discours-motiver-inspirer-technophiles#comments</comments>
		<pubDate>Tue, 16 Feb 2010 18:54:36 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Inspiration]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=25</guid>
		<description><![CDATA[Les aléas de la vie personnelle et professionnelle nous amènent invariablement un jour à douter de nous-mêmes. Cependant, il existe de nombreuses solutions pour y remédier. Pour ma part, ce sont les gens qui m&#8217;inspirent.

De Gary Vaynerchuk nous submergeant de passion en passant par Randy Pausch et l&#8217;importance de réaliser ses rêves d&#8217;enfance ou encore [...]]]></description>
			<content:encoded><![CDATA[<p>Les aléas de la vie personnelle et professionnelle nous amènent invariablement un jour à douter de nous-mêmes. Cependant, il existe de nombreuses solutions pour y remédier. Pour ma part, ce sont les gens qui m&#8217;inspirent.<br />
<span id="more-25"></span></p>
<p>De <strong>Gary Vaynerchuk</strong> nous submergeant de passion en passant par <strong>Randy Pausch</strong> et l&#8217;importance de réaliser ses rêves d&#8217;enfance ou encore <strong>Steve Jobs</strong> échappant à la mort, ces cinq discours vaincront à coup sûr tout instants de doute. </p>
<p>Pour toucher le plus large public possible, ces vidéos sont disponibles dans une <strong>version sous-titrée en français</strong>, par moi-même ou d&#8217;autres, excepté pour la dernière en cours de validation sur le site de TED.</p>
<h2>Gary Vaynerchuk : Building Personal Brand in Social Media Landscape</h2>
<p>Dur d&#8217;être passé à côté de <strong>Gary Vaynerchuk</strong> dans le paysage du Web 2.0 ces dernières années. Après avoir repris en main l&#8217;affaire familiale pour la transformer en un business rapportant près de <strong>4 millions de dollars par an</strong>, Gary s&#8217;est lancé en 2006 dans l&#8217;aventure <strong>Wine Library TV</strong>. Ce podcast vidéo faisant office de guide des vins l&#8217;a rapidement mis sur le devant de la scène.</p>
<p>Débordant de passion, d&#8217;enthousiasme et de charisme, Gary est désormais réputé pour ses apparitions où il parle du &laquo;&nbsp;<strong>personnal branding</strong>&laquo;&nbsp;, ou l&#8217;art de se vendre en utilisant au mieux les moyens d&#8217;aujourd&#8217;hui (également le sujet de son <a href="http://www.amazon.fr/Crush-Passion-Profit-Digital-World/dp/0061914177/ref=sr_1_1?ie=UTF8&#038;s=english-books&#038;qid=1266347103&#038;sr=8-1" target="_blank">dernier livre</a>).</p>
<p>C&#8217;est à l&#8217;occasion de la Web 2.0 Expo de 2008 se tenant à New-York que l&#8217;homme a donné un discours enflammé et mémorable :</p>
<div class="video_block">
<object width="570" height="311"><param name="movie" value="http://www.dailymotion.com/swf/k5IND3hOIz2Lx8Y7JL&#038;defaultSubtitle=fr&#038;related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param>
	<embed src="http://www.dailymotion.com/swf/k5IND3hOIz2Lx8Y7JL&#038;defaultSubtitle=fr&#038;related=0" type="application/x-shockwave-flash" width="570" height="311" allowFullScreen="true" allowScriptAccess="always"></embed></object>
</div>
<p><em>Sous-titré par Maxime Bornemann</em></p>
<h2>Randy Pausch : Réaliser pleinement ses rêves d&#8217;enfance</h2>
<p>Le 18 septembre 2007, ce professeur d&#8217;informatique s&#8217;est présenté devant une audience de 400 personnes à l&#8217;Université de Carnegie Mellon pour y donner ce qui sera sa dernière conférence. <strong>Randy Pausch</strong> est atteint d&#8217;un cancer du pancréas et il ne lui reste que quelques mois à vivre selon les docteurs.</p>
<p>C&#8217;est empli d&#8217;entrain qu&#8217;il nous parle pendant près d&#8217;une heure de <strong>l&#8217;importance de réaliser ses rêves d&#8217;enfance</strong> (également devenu sujet d&#8217;<a href="http://www.amazon.fr/Last-Lecture-Randy-Pausch/dp/0340977736/ref=sr_1_1?ie=UTF8&#038;s=english-books&#038;qid=1266347195&#038;sr=1-1" target="_blank">un de ses livres</a>). Il est finalement décédé le 25 juillet 2008, mais ce discours devenu un phénomène perdurera encore de nombreuses années :</p>
<p><script type="text/javascript" src="http://maximebornemann.com/wp-content/themes/subtletide/javascript/swfobject.js"></script></p>
<div class="video_block">
<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="570" height="311"><param name="movie" value="http://maximebornemann.com/wp-content/themes/subtletide/player-viral.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="flashvars" value="file=http://maximebornemann.com/wp-content/themes/subtletide/the_last_lecture.flv" /><embed type="application/x-shockwave-flash" id="player2" name="player2" src="http://maximebornemann.com/wp-content/themes/subtletide/player-viral.swf" width="570" height="311" allowscriptaccess="always"  allowfullscreen="true" flashvars="file=http://maximebornemann.com/wp-content/themes/subtletide/the_last_lecture.flv" /><br />
	</object>
</div>
<p><em>Sous-titré par Thomas Roux</em></p>
<div class="adsense_main"><script type="text/javascript"><!--
										google_ad_client = "pub-0177044474270577";
										/* 468x60 (Blog) */
										google_ad_slot = "7671061509";
										google_ad_width = 468;
										google_ad_height = 60;
										//-->
									</script><br />
									<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
								</div>
<h2>Steve Jobs : Remise des diplômes &#8211; Université de Stanford (2005)</h2>
<p>Inutile de présenter l&#8217;homme sans lequel notre quotidien ne serait probablement pas le même. Le charismatique PDG d&#8217;<strong>Apple</strong> est le pionnier de la révolution de l&#8217;<strong>informatique grand public</strong>, ambassadeur de celle de la musique numérique avec l&#8217;<strong>iPod</strong> et <strong>iTunes</strong> et héros du renouveau de la téléphonie mobile avec l&#8217;<strong>iPhone</strong>. Difficile de se targuer d&#8217;avoir fait mieux dans une vie.</p>
<p>C&#8217;est aussi un homme qui a su <strong>vaincre la mort par deux fois</strong> (une fois de plus depuis le tournage de cette vidéo) et qui nous donne une vraie leçon de vie dans un discours hypnotique, comme à son habitude, devant les étudiants de l&#8217;université de Stanford à l&#8217;occasion de la remise des diplômes :</p>
<div class="video_block">
<object width="570" height="311"><param name="movie" value="http://www.dailymotion.com/swf/x5m47b" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://www.dailymotion.com/swf/x5m47b" type="application/x-shockwave-flash" width="570" height="311" allowFullScreen="true" allowScriptAccess="always"></embed></object>
</div>
<p><em>Sous-titré par Maxime Bornemann</em></p>
<h2>Jill Tarter nous appelle à aider la recherche SETI</h2>
<p><strong>Jill Tarter</strong> de l&#8217;Institut <strong>SETI</strong> a dévouée sa carrière à la recherche de signes de présence d&#8217;espèces intelligentes à travers l&#8217;univers. Notamment connu grâce à <strong>SETI@Home</strong>, permettant de tirer parti de la puissance inutilisée de millions d&#8217;ordinateurs connectés via Internet afin de venir en aide à la recherche, le projet SETI continu de grandir et utilise un réseau de plus en plus large de radiotélescopes.</p>
<p><strong>Lauréat du TED Prize</strong>, Jill Tarter nous fait part de son voeu : accélérons la recherche d&#8217;une présence dans l&#8217;espace !</p>
<p><em>Note : Pensez à activer les sous-titres manuellement lors de la lecture de la vidéo</em></p>
<p><center><br />
<object width="446" height="326"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talks/JillTarter_2009-stream-Prize_xxlow.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/JillTarter-2009.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=468&#038;introDuration=25000&#038;adDuration=0&#038;postAdDuration=0&#038;adKeys=talk=jill_tarter_s_call_to_join_the_seti_search;year=2009;theme=peering_into_space;theme=speaking_at_ted2009;theme=bold_predictions_stern_warnings;theme=to_boldly_go;theme=ted_prize_winners;theme=technology_history_and_destiny;event=TED2009;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/JillTarter_2009-stream-Prize_xxlow.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/JillTarter-2009.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=468&#038;introDuration=25000&#038;adDuration=0&#038;postAdDuration=0&#038;adKeys=talk=jill_tarter_s_call_to_join_the_seti_search;year=2009;theme=peering_into_space;theme=speaking_at_ted2009;theme=bold_predictions_stern_warnings;theme=to_boldly_go;theme=ted_prize_winners;theme=technology_history_and_destiny;event=TED2009;"></embed></object><br />
</center></p>
<p><em>Sous-titré par Matthieu Coville et corrigé par Maxime Bornemann</em></p>
<h2>Clifford Stoll sur&#8230; tout</h2>
<p>L&#8217;astronome <strong>Clifford Stoll</strong> est un cas à part. Dans un discours déjanté donné il y a quelques années à <strong>TED</strong>, celui qui pourrait facilement être méprit pour un <strong>savant fou</strong> discute à peu près de tout ce qui lui passe par la tête.</p>
<p>Le style chaotique du discours ne plaira évidemment pas à tout le monde et se résume parfaitement avec la définition qu&#8217;il se donne d&#8217;un scientifique : &laquo;&nbsp;<strong>Une fois que je fais quelque chose, j&#8217;ai envie de faire quelque chose d&#8217;autre</strong>.&nbsp;&raquo;</p>
<p><center><br />
<object width="334" height="326"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talks/dynamic/CliffordStoll_2006-medium.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/CliffordStoll-2006.embed_thumbnail.jpg&#038;vw=320&#038;vh=240&#038;ap=0&#038;ti=237&#038;introDuration=16500&#038;adDuration=4000&#038;postAdDuration=2000&#038;adKeys=talk=clifford_stoll_on_everything;year=2006;theme=presentation_innovation;theme=how_we_learn;theme=bold_predictions_stern_warnings;event=TED2006;&#038;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="334" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/dynamic/CliffordStoll_2006-medium.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/CliffordStoll-2006.embed_thumbnail.jpg&#038;vw=320&#038;vh=240&#038;ap=0&#038;ti=237&#038;introDuration=16500&#038;adDuration=4000&#038;postAdDuration=2000&#038;adKeys=talk=clifford_stoll_on_everything;year=2006;theme=presentation_innovation;theme=how_we_learn;theme=bold_predictions_stern_warnings;event=TED2006;"></embed></object><br />
</center></p>
<div class="adsense_main"><script type="text/javascript"><!--
										google_ad_client = "pub-0177044474270577";
										/* 468x60 (Blog) */
										google_ad_slot = "7671061509";
										google_ad_width = 468;
										google_ad_height = 60;
										//-->
									</script><br />
									<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
								</div>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/5-discours-motiver-inspirer-technophiles/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduction au contrôle de version avec Git</title>
		<link>http://maximebornemann.com/introduction-au-controle-de-version-avec-git</link>
		<comments>http://maximebornemann.com/introduction-au-controle-de-version-avec-git#comments</comments>
		<pubDate>Sun, 21 Jun 2009 18:08:47 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[contrôle de version]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[projet]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=260</guid>
		<description><![CDATA[Tout projet nécessitant une collaboration entre plusieurs personnes se voulant simple à gérer et à maintenir se doit de faire recours au contrôle de version. Ceci est une introduction à Git, le système de contrôle de version puissant et moderne qui a le vent en poupe.

Un système de contrôle de version (Version Control System, VCS [...]]]></description>
			<content:encoded><![CDATA[<p>Tout projet nécessitant une collaboration entre plusieurs personnes se voulant simple à gérer et à maintenir se doit de faire recours au contrôle de version. Ceci est une introduction à Git, le système de contrôle de version puissant et moderne qui a le vent en poupe.<br />
<span id="more-260"></span></p>
<p>Un système de contrôle de version (Version Control System, VCS ou Source Control Management system, SCM) permet de suivre les modifications effectuées aux fichiers d&#8217;un projet. Dans sa forme la plus simple, la manipulation consiste à créer une copie du fichier vers un emplacement distant (appelé <strong>dépôt</strong>) en y ajoutant date, informations sur l&#8217;auteur et un commentaire sur les modifications apportées. Partant de cela, plusieurs outils destinés à automatiser la tâche ont vu le jour comme CVS (Concurrent Versions System) ou SVN (Subversion) ainsi que Git qui est le sujet de cet article.</p>
<h2>Les principes de base de Git</h2>
<p>Avant de pouvoir entrer dans le vif du sujet, il est nécessaire de comprendre la philosophie de Git. Les lignes qui suivent décrivent les principales terminologies et les atouts de Git face à la concurrence.</p>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Le dépôt</h3>
<p>Le dépôt est l&#8217;endroit où tous les fichiers de votre projet sont stockés, contenant un historique complet géré par un système de contrôle de version (VCS). Git diffère des autres outils dans la manière dont vous communiquez les changements apportés au projet. Quand les autres empruntent un modèle centralisé basé sur un seul et unique serveur, <strong>Git est entièrement décentralisé</strong>.</p>
<p>Dans un modèle centralisé, chaque personne désirant contribuer au projet rapatrie la version la plus récente du dépôt distant et envoi directement les modifications au serveur. Ce mode de fonctionnement présente un réel problème. En effet, il est impossible de travailler sans être connecté à Internet car une communication avec le serveur est forcément nécessaire.</p>
<p>Git est dit décentralisé car <strong>chaque collaborateur dispose d&#8217;une version complète de l&#8217;historique</strong> du dépôt distant (et non plus de la dernière version uniquement) sur son ordinateur appelé alors dépôt local. <strong>Une connexion à Internet n&#8217;est donc plus nécessaire pour continuer à travailler</strong>.</p>
<p class="center"><a href="wp-content/images/intro-git/centralise-decentralise.png" rel="lightbox" title="Modèle centralisé / décentralisé" /><img src="wp-content/images/intro-git/centralise-decentralise_mini.png" alt="Modèle centralisé / décentralisé" /></a></p>
<p>Ce modèle décentralisé permet également d&#8217;utiliser Git dans un but entièrement personnel. En effet, il est possible de créer un dépôt local pour un projet sans jamais le partager, simplement pour bénéficier des avantages d&#8217;un système de contrôle de version pour soi.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />L&#8217;arbre de travail</h3>
<p>L&#8217;arbre de travail contient tous les fichiers de votre projet à l&#8217;instant sélectionné dans l&#8217;historique du dépôt. C&#8217;est ici que les changements sont effectués. Contrairement à SVN, <strong>la modification d&#8217;un fichier ne signifie pas nécessairement l&#8217;envoi au dépôt distant</strong>. Le changement est dans un premier temps enregistré dans cet arbre de travail, <strong>à vous de décider ce que vous voulez en faire</strong>. Ce n&#8217;est pas le cas avec un modèle centralisé où chaque changement devient visible par tout le monde et une erreur peut très vite devenir embarrassante.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_3.png" />Manipulation des fichiers</h3>
<p>Lorsqu&#8217;une modification est jugée satisfaisante, on en informe le dépôt local qui va alors y inscrire les informations sur la nouvelle révision du projet. Cette action est appelée <strong>commit</strong>.</p>
<p>Le fait d&#8217;avoir la possibilité de sauvegarder les changements dans le dépôt local avant l&#8217;envoi au dépôt distant présente un réel avantage. En effet, <strong>il devient alors possible d&#8217;expérimenter sans forcément le faire savoir aux autres collaborateurs</strong> tout en gardant un historique des modifications de ces expérimentations. Enfin, cela permet de s&#8217;affranchir du besoin constant d&#8217;une connexion Internet comme ce serait le cas dans un modèle centralisé.</p>
<p>Si l&#8217;on désire partager les nouveaux changements, on <strong>push</strong> la dernière révision vers un dépôt distant. Pour mettre à jour le dépôt local, on <strong>pull</strong> les derniers changements du dépôt distant.</p>
<p class="center"><a href="wp-content/images/intro-git/push-pull-git.png" rel="lightbox" title="Manipulation des fichiers" /><img src="wp-content/images/intro-git/push-pull-git_mini.png" alt="Manipulation des fichiers" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_4.png" />Les branches et les fusions</h3>
<p>Dans un projet, plusieurs idées peuvent être étudiées avant d&#8217;être intégrées définitivement. Grâce aux branches, <strong>Git offre la possibilité de faire diverger le projet à un moment donné</strong>. Ceci permet de pouvoir expérimenter sans modifier la branche principale du projet (aussi appelé <strong>trunk</strong>) tout en continuant à garder un historique des modifications pour toutes les branches.</p>
<p>Lorsqu&#8217;une idée s&#8217;avère meilleure que celle utilisée actuellement dans la branche principale et que l&#8217;on désire l&#8217;y inclure, on <strong>merge</strong> (fusionne) notre branche avec la branche principale. Pour cela, Git utilise une façon de faire très naturelle : il compare les deux historiques et détermine où les changements ont eu lieu. Cette branche peut ensuite être conservée ou détruite.</p>
<p class="center"><a href="wp-content/images/intro-git/branches.png" rel="lightbox" title="Les branches" /><img src="wp-content/images/intro-git/branches_mini.png" alt="Les branches" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_5.png" />Verrouillage des fichiers</h3>
<p>Les systèmes de contrôle de version traditionnels ne permettent pas l&#8217;édition du même fichier par plusieurs personnes. Vous demandez la permission au dépôt distant d&#8217;éditer un fichier (<strong>check out</strong>) et celui-ci se charge de bloquer son accès tant que les modifications ne sont pas terminées (<strong>check in</strong>).</p>
<p>Ce mode de fonctionnement est appelé <strong>verrouillage strict</strong>. Git utilise quant à lui un <strong>verrouillage optimiste</strong> : plusieurs personnes peuvent travailler sur le même fichier en assumant que la plupart du temps il n&#8217;y aura pas de conflits.</p>
<p>Une personne envoi les modifications au dépôt distant. Une autre personne ayant modifié le même fichier envoi également ses modifications et Git détecte un conflit. Dans ce cas, la deuxième personne devra récupérer la dernière version du fichier et gérer elle-même les conflits avant de pouvoir renvoyer ses modifications au serveur.</p>
<h2>Installation et configuration de Git</h2>
<p>Si vous avez compris les principes expliqués ci-dessus, le plus dur est fait. La prochaine étape consiste à installer Git sur notre machine. La manipulation est décrite pour Linux (Ubuntu plus précisément), Mac OS X et Windows. Dans le cas où vous rencontrerez des problèmes lors de l&#8217;installation, n&#8217;hésitez pas à consulter Google.</p>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Installation sous Linux (Ubuntu 9.04)</h3>
<p>Afin d&#8217;être certain de disposer de la dernière version (1.6.3.2 actuellement), il est recommandé d&#8217;aller télécharger directement les sources sur le <a href="http://git-scm.com/" title="Git - Fast Version Control System">site de Git</a> et des les compiler soi-même.</p>
<p>Avant de télécharger les sources, il faut s&#8217;assurer que votre machine dispose des dépendances nécessaires au fonctionnement de Git :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>$ <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-dep libcurl4-openssl git-core git-doc</pre></td></tr></table></div>

<p>Téléchargement et décompression des sources dans le dossier /usr/src (par principe) :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src
root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>kernel.org<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>software<span style="color: #000000; font-weight: bold;">/</span>scm<span style="color: #000000; font-weight: bold;">/</span>git<span style="color: #000000; font-weight: bold;">/</span>git-1.6.3.2.tar.gz
root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xzf git-1.6.3.2.tar.gz
root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ <span style="color: #7a0874; font-weight: bold;">cd</span> git-1.6.3.2</pre></td></tr></table></div>

<p>On peut alors passer à la compilation et l&#8217;installation :

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ <span style="color: #c20cb9; font-weight: bold;">make</span> all
root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Pour vérifier que Git est bien installé, on utilise la commande :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>ubuntu:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src$ git <span style="color: #660033;">--version</span>
git version 1.6.3.2</pre></td></tr></table></div>

<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Installation sous Mac OS X (Leopard)</h3>
<p>Pour les utilisateurs du système à la pomme, l&#8217;installation se voit grandement simplifiée grâce à la mise en ligne d&#8217;un assistant d&#8217;installation répondant au nom de git-osx-installer.</p>
<p>Pour le télécharger, rendez-vous <a href="http://code.google.com/p/git-osx-installer/" title="Télécharger git-osx-installer">ici</a>.</p>
<p class="center"><a href="wp-content/images/intro-git/git-osx-installer.png" rel="lightbox" title="Git OS X Installer" /><img src="wp-content/images/intro-git/git-osx-installer_mini.png" alt="Git OS X Installer" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_3.png" />Installation sous Windows (Vista)</h3>
<p>Faire fonctionner Git sur Windows n&#8217;a pas toujours été une mince affaire. Fort heureusement, il est aujourd&#8217;hui possible de s&#8217;affranchir de l&#8217;utilisation de Cygwin grâce à Git on Windows.</p>
<p>Le programme d&#8217;installation se trouve <a href="http://code.google.com/p/msysgit/" title="Télécharger Git on Windows">ici</a> et ne demande rien de plus que de cliquer sur le bouton &laquo;&nbsp;Suivant&nbsp;&raquo; à chaque étape.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_4.png" />Configuration</h3>
<p>La configuration de Git ne prendra que quelques secondes grâce à la commande <strong>git-config</strong>. Il suffit de renseigner les informations nécessaires pour nous contacter, c&#8217;est-à-dire un nom et une adresse mail en tapant les commandes suivantes :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git config <span style="color: #660033;">--global</span> user.name <span style="color: #ff0000;">&quot;Maxime Bornemann&quot;</span>
git config <span style="color: #660033;">--global</span> user.email <span style="color: #ff0000;">&quot;contact@maximebornemann.com&quot;</span></pre></td></tr></table></div>

<h2>Travailler avec le dépôt local</h2>
<p>Tout est enfin en place pour que nous commencions à manipuler Git. Durant la suite de cet article, je prendrai comme exemple une simple page HTML. J&#8217;y apporterai ainsi des modifications au fur et à mesure que les aspects évoqués précédemment seront illustrés par la pratique. Cette partie a uniquement pour objectif de travailler avec un dépôt local.</p>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Création du dépôt local pour le projet</h3>
<p>Créer un dépôt avec Git est très aisé. Une fois l&#8217;emplacement où seront stockés les fichiers de votre projet définit, il suffit d&#8217;utiliser la commande <strong>git init</strong>. Par exemple :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> projet-site
<span style="color: #7a0874; font-weight: bold;">cd</span> projet-site
git init
&nbsp;
Initialized empty Git repository <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>Maxime<span style="color: #000000; font-weight: bold;">/</span>projet-site<span style="color: #000000; font-weight: bold;">/</span>.git<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>C&#8217;est aussi simple que ça, <strong>le répertoire projet-site sert désormais d&#8217;arbre de travail</strong> (pour rappel, l&#8217;arbre de travail contient les fichiers de votre projet à l&#8217;instant que vous avez sélectionné dans l&#8217;historique du projet), <strong>tandis que le dossier .git contient les informations relatives au dépôt.</strong></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Ajouter des fichiers au projet</h3>
<p>Le dépôt est en place, il est temps d&#8217;y ajouter des fichiers. Pour cela, je vais créer une simple page HTML (index.html) contenant le strict minimum. Voici l&#8217;allure de la page :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; dir=&quot;ltr&quot; lang=&quot;fr-FR&quot;&gt;
&nbsp;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;Introduction à Git&lt;/title&gt;
&lt;/head&gt;
&nbsp;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>On doit maintenant informer Git que ce fichier fait parti du projet (et donc du commit) avec la commande <strong>git add</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git add index.html</pre></td></tr></table></div>

<p>Et on <strong>commit</strong> enfin le fichier accompagné d&#8217;un descriptif des modifications apportées avec la commande <strong>git commit -m &laquo;&nbsp;message&nbsp;&raquo;</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Basic HTML index page created.&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master <span style="color: #7a0874; font-weight: bold;">&#40;</span>root-commit<span style="color: #7a0874; font-weight: bold;">&#41;</span> 961d7c4<span style="color: #7a0874; font-weight: bold;">&#93;</span> Basic HTML index page created.
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">11</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">0</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span>
 create mode <span style="color: #000000;">100644</span> index.html</pre></td></tr></table></div>

<p>Essayez d&#8217;être le plus descriptif dans les notes associées à vos commit, ils deviendront d&#8217;une grande utilité plus tard. J&#8217;ai tendance à conseiller d&#8217;écrire en anglais, pour faciliter le partage du code à l&#8217;international.</p>
<p>Plusieurs choses sont à noter dans le message renvoyé par Git. Tout d&#8217;abord, <strong>master</strong> signifie que le commit a été effectué sur la branche principale. <strong>961d7c4</strong> est un identifiant unique (obtenue avec la fonction de hachage SHA-1) permettant à Git de s&#8217;organiser.</p>
<p>La deuxième ligne indique les modifications qui ont été apportés à notre fichier par rapport à la version précédente. Git fait état de 11 ajouts dans le fichier et aucune suppression, ce qui est logique étant donné qu&#8217;il s&#8217;agit d&#8217;un nouveau fichier.</p>
<p>Voici un aspect que je n&#8217;ai pas évoqué jusqu&#8217;à présent. Contrairement à certains systèmes de contrôle de version, <strong>Git ne surveille pas les changements des fichiers mais les changements apportés au contenu des fichiers</strong>. Cela aura un impact important dans la taille que prendra notre dépôt par la suite.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_3.png" />Modification des fichiers</h3>
<p>J&#8217;ajoute maintenant deux nouvelles lignes à mon index.html :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;h1&gt;Bienvenue !&lt;/h1&gt;
&nbsp;
&lt;p&gt;Cet article a pour but de présenter Git, le mangeur d'arbres.&lt;/p&gt;</pre></td></tr></table></div>

<p>Grâce à la commande <strong>git diff</strong>, il est possible de connaître quelles lignes du fichier ont été modifiées comparé à la version sur notre dépôt local :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git <span style="color: #c20cb9; font-weight: bold;">diff</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">--git</span> a<span style="color: #000000; font-weight: bold;">/</span>index.html b<span style="color: #000000; font-weight: bold;">/</span>index.html
index 380dae5..8da2329 <span style="color: #000000;">100644</span>
<span style="color: #660033;">---</span> a<span style="color: #000000; font-weight: bold;">/</span>index.html
+++ b<span style="color: #000000; font-weight: bold;">/</span>index.html
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">7</span>,<span style="color: #000000;">5</span> +<span style="color: #000000;">7</span>,<span style="color: #000000;">8</span> <span style="color: #000000; font-weight: bold;">@@</span>
 <span style="color: #000000; font-weight: bold;">&lt;/</span><span style="color: #c20cb9; font-weight: bold;">head</span><span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">&lt;</span>body<span style="color: #000000; font-weight: bold;">&gt;</span>
+       <span style="color: #000000; font-weight: bold;">&lt;</span>h1<span style="color: #000000; font-weight: bold;">&gt;</span>Bienvenue <span style="color: #000000; font-weight: bold;">!&lt;/</span>h1<span style="color: #000000; font-weight: bold;">&gt;</span>
+       
+       <span style="color: #000000; font-weight: bold;">&lt;</span>p<span style="color: #000000; font-weight: bold;">&gt;</span>Cet article a pour but de <span style="color: #c20cb9; font-weight: bold;">pr</span>ésenter Git, le mangeur d<span style="color: #ff0000;">'arbres.&lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;
\ No newline at end of file</span></pre></td></tr></table></div>

<p>Retenez bien cette commande, car vous allez l&#8217;utiliser très fréquemment tout comme <strong>git status</strong>, permettant d&#8217;afficher l&#8217;état de notre dépôt :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git status
&nbsp;
On branch master
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git checkout -- &lt;file&gt;...&quot; to discard changes in working directory)</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#	modified:   index.html</span>
<span style="color: #666666; font-style: italic;">#</span>
no changes added to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>use <span style="color: #ff0000;">&quot;git add&quot;</span> and<span style="color: #000000; font-weight: bold;">/</span>or <span style="color: #ff0000;">&quot;git commit -a&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>Comme l&#8217;indique la dernière ligne il est possible d&#8217;effectuer un commit d&#8217;une autre façon que celle utilisée précédemment (git add puis git commit -m &laquo;&nbsp;message&nbsp;&raquo;), en utilisant git commit -a qui ne vous oblige plus à ajouter manuellement les fichiers destinés au commit. Cette commande ouvre l&#8217;éditeur <strong>vi</strong> dans lequel vous devrez rédiger le message accompagnant le commit.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_4.png" />Revenir en arrière</h3>
<p>Imaginons que la dernière modification apportée à votre dépôt s&#8217;avère en réalité être une erreur. Pour revenir en arrière, il suffit d&#8217;utiliser la commande <strong>git revert</strong> associé à l&#8217;identifiant unique du commit. Cette commande va remettre notre arbre de travail (le contenu du dossier de notre projet), dans l&#8217;état où il était au moment du commit indiqué.</p>
<p>Pour obtenir l&#8217;identifiant unique d&#8217;un commit, on peut faire appel à la commande <strong>git log</strong> qui affichera des informations sur les dernières modifications apportées au dépôt.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git log
&nbsp;
commit 624c0bc7afd9e2a6edcfdc3f41e99113c2dacbea
Author: Maxime Bornemann <span style="color: #000000; font-weight: bold;">&lt;</span>contact<span style="color: #000000; font-weight: bold;">@</span>maximebornemann.com<span style="color: #000000; font-weight: bold;">&gt;</span>
Date:   Sat Jun <span style="color: #000000;">20</span> <span style="color: #000000;">22</span>:<span style="color: #000000;">27</span>:02 <span style="color: #000000;">2009</span> +0200
&nbsp;
    Added basic structure <span style="color: #000000; font-weight: bold;">for</span> the content.
&nbsp;
commit 961d7c4de33acaa5350ca9b8540d9d6ec38ae6a3
Author: Maxime Bornemann <span style="color: #000000; font-weight: bold;">&lt;</span>contact<span style="color: #000000; font-weight: bold;">@</span>maximebornemann.com<span style="color: #000000; font-weight: bold;">&gt;</span>
Date:   Sat Jun <span style="color: #000000;">20</span> <span style="color: #000000;">19</span>:<span style="color: #000000;">44</span>:<span style="color: #000000;">18</span> <span style="color: #000000;">2009</span> +0200
&nbsp;
    Basic HTML index page created.</pre></td></tr></table></div>

<p>Par exemple, pour revenir à mon premier commit et annuler les deux lignes que je viens d&#8217;ajouter :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git revert 624c0bc7afd9e2a6edcfdc3f41e99113c2dacbea</pre></td></tr></table></div>

<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_5.png" />Travailler avec les branches</h3>
<p>Prenons un exemple simple : vous arrivez à un certain point dans votre projet et vous aimeriez le présenter publiquement. Le temps que cela se produise, vous désirez pouvoir continuer à travailler dessus sans modifier l&#8217;état actuel du projet. La solution est simple, il suffit de créer une branche qui sera un clone des fichiers contenus dans la branche où se trouve le projet que l&#8217;on souhaite présenter.</p>
<p>Pour créer une nouvelle branche, on utilise la commande <strong>git branch nouvelle_branche branche_origine</strong>. Pour créer une branche &laquo;&nbsp;projet-2.0&#8243; à partir de la branche principale de mon dépôt :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git branch projet-<span style="color: #000000;">2.0</span> master</pre></td></tr></table></div>

<p>La commande <strong>git branch</strong> sans argument affiche la liste de toutes les branches du dépôt, celle où l&#8217;on se trouve étant symbolisée par une étoile :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git branch
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> master
  projet-<span style="color: #000000;">2.0</span></pre></td></tr></table></div>

<p>Comme l&#8217;on se trouve dans la branche principale, les commit effectués concerneront uniquement cette branche et n&#8217;affecterons en aucun cas les autres branches. Pour changer de branche, on utilise la commande <strong>git checkout nom_branche</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git checkout projet-<span style="color: #000000;">2.0</span>
&nbsp;
Switched to branch <span style="color: #ff0000;">&quot;projet-2.0&quot;</span>
&nbsp;
git branch
&nbsp;
  master
<span style="color: #000000; font-weight: bold;">*</span> projet-<span style="color: #000000;">2.0</span></pre></td></tr></table></div>

<p>On peut aussi comparer deux branches avec la commande diff (<strong>git diff master projet-2.0</strong> par exemple).</p>
<p>En travaillant sur votre projet, vous avez eu plusieurs idées sans être certain qu&#8217;elles seront intégrées au projet. Vous avez donc créé une ou plusieurs branches dans l&#8217;optique d&#8217;expérimenter. Une de ces idées s&#8217;avère être bonne et doit être ajoutée à la branche principale. Comment faire ? Tout simplement en faisant un <strong>merge</strong> des deux branches. Il faut préalablement se placer dans la branche de destination :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git checkout master
Switched to branch <span style="color: #ff0000;">&quot;master&quot;</span>
git merge projet-<span style="color: #000000;">2.0</span></pre></td></tr></table></div>

<h2>Travailler avec le dépôt distant</h2>
<p>Vous maîtrisez à présent toutes les commandes et principes de bases à savoir sur Git, il est temps de partager votre projet à l&#8217;aide d&#8217;un dépôt distant. Pour obtenir un dépôt distant, plusieurs possibilités s&#8217;offrent à vous. Si vous avez de la chance, quelqu&#8217;un en à déjà mis un en place. Si ce n&#8217;est pas le cas, vous pouvez décider de le créer vous même ou de vous tourner vers des hébergeurs spécialisés comme <a href="www.github.com" title="Accéder à Github">Github</a>.</p>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Création d&#8217;un dépôt public</h3>
<p>L&#8217;inconvénient de Github est que pour disposer d&#8217;un dépôt distant privé (accessible uniquement par les membres de votre équipe par exemple) il est impératif de payer un abonnement. Bien qu&#8217;abordable (débutant à 7$ par mois) et dans la plupart des cas suffisante, cette solution peut ne pas plaire à tout le monde.</p>
<p>Pour cette raison, j&#8217;expliquerai uniquement comment mettre en place un dépôt distant sur un serveur Web nous étant propre. Si vous désirez tout de même utiliser Github, sachez que de nombreux tutoriels sont disponibles sur Internet, et une simple recherche Google devrait vous y conduire.</p>
<p>Pour communiquer avec un dépôt distant, nous avons le choix entre deux protocoles. Le protocole Git garantit un fonctionnement optimal mais nécessite l&#8217;ouverture de ports ce qui peut s&#8217;avérer gênant. Le protocole HTTP quant à lui ne nécessite guère plus qu&#8217;un serveur Web fonctionnel, c&#8217;est donc cette solution que nous allons utiliser.</p>
<p>Reprenons notre dépôt local situé dans le dossier <strong>projet-site/</strong> pour le rendre public. Pour cela, on créé un clone du dépôt contenant uniquement les informations relatives à ce dépôt et non les fichiers, c&#8217;est à dire le dossier <strong>.git/</strong> situé dans ce même dossier :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git clone <span style="color: #660033;">--bare</span> projet-site projet-site.git</pre></td></tr></table></div>

<p>Copiez ensuite le dossier sortant (ici projet-site.git) vers votre serveur Web et exécutez les deux commandes suivantes dans le dossier nécessaires au bon fonctionnement du dépôt :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git <span style="color: #660033;">--bare</span> update-server-info
<span style="color: #c20cb9; font-weight: bold;">chmod</span> a+x hooks<span style="color: #000000; font-weight: bold;">/</span>post-update</pre></td></tr></table></div>

<p>À cet instant précis, il devient possible de cloner le dépôt distant directement sur votre machine avec la commande :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git clone http:<span style="color: #000000; font-weight: bold;">//</span>monserveur.com<span style="color: #000000; font-weight: bold;">/</span>git<span style="color: #000000; font-weight: bold;">/</span>projet-site.git</pre></td></tr></table></div>

<p>Attention, cette action aura pour effet de créer un nouveau dépôt local et non de mettre à jour celui que nous disposons déjà.</p>
<p>Pour éviter d&#8217;avoir à taper l&#8217;adresse entière à chaque fois, il possible de donner un nom à ce dépôt distant sur notre machine. Dans ce cas, le dépôt distant aura pour nom <strong>origin</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git remote add origin http:<span style="color: #000000; font-weight: bold;">//</span>monserveur.com<span style="color: #000000; font-weight: bold;">/</span>git<span style="color: #000000; font-weight: bold;">/</span>projet-site.git</pre></td></tr></table></div>

<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Envoyer les changements au dépôt distant</h3>
<p>Pour envoyer les changements effectués au dépôt local vers le dépôt distant, il faut utiliser la commande <strong>git push</strong> en spécifiant la branche qui doit être envoyée ou en ne mettant rien pour envoyer la branche principale :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git push origin</pre></td></tr></table></div>

<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Récupérer les nouveaux changements</h3>
<p>Lorsque vous clonez un dépôt distant pour la première fois, vous &laquo;&nbsp;suivez&nbsp;&raquo; par défaut sa branche principale. Cela signifie que lorsque vous récupérerez les changements de ce dépôt, seuls cette branche sera mise à jour dans le dépôt local.</p>
<p>La liste des branches distantes est accessible avec la commande :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git branch <span style="color: #660033;">-r</span></pre></td></tr></table></div>

<p>La commande <strong>git fetch</strong> permet d&#8217;ajouter une nouvelle branche distante à suivre et prend trois arguments : le nom ou l&#8217;adresse du dépôt distant, le nouveau de la branche distante et le nom qu&#8217;aura cette branche dans notre dépôt local (on peut conserver le même nom).</p>
<p>Par exemple, si l&#8217;on souhaite suivre une branche distante nommée projet-2.0-test :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git fetch origin projet-<span style="color: #000000;">2.0</span>-test:projet-<span style="color: #000000;">2.0</span>-test</pre></td></tr></table></div>

<p>Enfin, pour mettre à jour toutes les branches et les faire fusionner avec notre dépôt local on fait appel à la commande :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">git pull</pre></td></tr></table></div>

<h2>Pour aller plus loin</h2>
<p>Cet article constitue une très bonne base pour utiliser Git dans la vie de tous les jours. Cependant, pour réellement le comprendre, je ne peux que vous encourager à pratiquer. Le contrôle de version s&#8217;applique à toute sortes de projets et pas seulement à ceux liés à la programmation alors n&#8217;hésitez pas à faire des commit à toutes les sauces !</p>
<p>Pour finir, voici une liste des liens intéressants sur le sujet :</p>
<ul>
<li>- <a href="http://www.youtube.com/watch?v=4XpnKHJAok8" title="Regarder Google Tech Talk : Linus Torvalds on Git">Google Tech Talk : Linus Torvalds on Git</a> (Video)</li>
<li>- <a href="http://www.youtube.com/watch?v=8dhZ9BXQgc4" title="Regarder Google Tech Talk : Randal Schwartz on Git">Google Tech Talk : Randal Schwartz on Git</a> (Video)</li>
<li>- <a href="http://twit.tv/floss19" title="Écouter FLOSS Weekly #19 : Git (Leo Laporte, Randal Schwartz, Junio Hamano)">FLOSS Weekly #19 : Git (Leo Laporte, Randal Schwartz, Junio Hamano)</a> (Audio)</li>
<li>- <a href="http://gitcasts.com" title="Accéder à GitCasts">Gitcasts</a> (Screencasts)</li>
<li>- <a href="http://www.unixgarden.com/index.php/administration-systeme/git-pour-les-futurs-barbus" title="Lire Git pour les (futurs) barbus">Git pour les (futurs) barbus</a> (Article)</li>
<li>- <a href="http://toolmantim.com/articles/setting_up_a_new_remote_git_repository" title="Lire Setting up a new remote git repository">Setting up a new remote git repository</a> (Article)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/introduction-au-controle-de-version-avec-git/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sauvegarde des données, MySQL et notification Twitter</title>
		<link>http://maximebornemann.com/cron-sauvegarde-des-donnees-mysql-et-notification-twitter</link>
		<comments>http://maximebornemann.com/cron-sauvegarde-des-donnees-mysql-et-notification-twitter#comments</comments>
		<pubDate>Fri, 08 May 2009 20:50:10 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Serveur]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=185</guid>
		<description><![CDATA[On ne le répétera jamais assez : la sauvegarde de données est cruciale et l&#8217;on ne s&#8217;en rend compte que trop souvent après la catastrophe. Ma solution consiste à utiliser CRON pour sauvegarder données et bases MySQL et d&#8217;être notifié par Twitter une fois la tâche accomplie.

Ce qu&#8217;il faut savoir&#8230;
Tout d&#8217;abord, vous aurez besoin de [...]]]></description>
			<content:encoded><![CDATA[<p>On ne le répétera jamais assez : la sauvegarde de données est cruciale et l&#8217;on ne s&#8217;en rend compte que trop souvent après la catastrophe. Ma solution consiste à utiliser CRON pour sauvegarder données et bases MySQL et d&#8217;être notifié par Twitter une fois la tâche accomplie.<br />
<span id="more-185"></span></p>
<h2>Ce qu&#8217;il faut savoir&#8230;</h2>
<p>Tout d&#8217;abord, vous aurez besoin de <strong>CRON et cURL installés sur votre serveur</strong>. CRON permet d&#8217;exécuter un script à intervalles réguliers. Bien que généralement réservé aux serveurs dédiés, il n&#8217;est pas impossible qu&#8217;une offre moins évoluée propose cette fonctionnalité. cURL va quant à lui nous permettre de communiquer avec Twitter.</p>
<p>Par mesure de sécurité, il est vivement conseillé de disposer de la possibilité de <strong>créer des utilisateurs sur votre base MySQL</strong>.</p>
<p>Une fois la sauvegarde terminée, un message privé sera envoyé à un compte Twitter. De ce fait, vous aurez besoin de <strong>créer un second compte</strong> à la charge de ce travail.</p>
<h2><img src="wp-content/themes/subtletide/images/download.png" alt="Téléchargement" /> Téléchargement</h2>
<p>Pour les plus pressés d&#8217;entre vous, voici un lien de téléchargement vers le script complet :</p>
<ul>
<li><a href="wp-content/fichiers/backup_cron.zip">Shell Script CRON</a></li>
</ul>
<h2>Les mains dans le cambouis</h2>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Création d&#8217;un nouvel utilisateur MySQL</h3>
<p>Avant d&#8217;entrer dans le vif du sujet, nous allons créer un nouvel utilisateur qui aura comme rôle de sauvegarder nos bases MySQL. Cet utilisateur aura des droits limités, à savoir uniquement la possibilité d&#8217;accéder (<strong>SELECT</strong>) et de bloquer (<strong>LOCK TABLES</strong>) les tables.</p>
<p>Pour créer un utilisateur, la solution la plus simple consiste à passer par PhpMyAdmin. Commencez par vous rendre dans <strong>&laquo;&nbsp;Privilèges&nbsp;&raquo;</strong> sur l&#8217;écran principal, puis <strong>&laquo;&nbsp;Ajouter un utilisateur&nbsp;&raquo;</strong>.</p>
<p>Entrez un <strong>nom d&#8217;utilisateur</strong>, <strong>l&#8217;adresse de votre base MySQL</strong> (généralement localhost) ainsi qu&#8217;un <strong>mot de passe</strong>. N&#8217;attribuez <strong>aucune base de données</strong> ni <strong>aucun droit global</strong> pour le moment.</p>
<p class="center"><a href="wp-content/images/ajout_utilisateur_mysql_cron.png" rel="lightbox" title="Ajout d'utilisateur MySQL" /><img src="wp-content/images/ajout_utilisateur_mysql_cron_mini.png" alt="Ajout d'utilisateur MySQL" /></a></p>
<p>Retournez ensuite dans l&#8217;onglet <strong>&laquo;&nbsp;Privilèges&nbsp;&raquo;</strong> pour modifier l&#8217;utilisateur que vous venez de créer. Sélectionnez le <strong>nom de la base de données</strong> que vous désirez sauvegarder dans la partie <strong>&laquo;&nbsp;Privilèges spécifiques à une base de données&nbsp;&raquo;</strong>. Sur l&#8217;écran suivant, sélectionnez les droits <strong>SELECT</strong> et <strong>LOCK TABLES</strong>.</p>
<p class="center"><a href="wp-content/images/droits_utilisateurs_cron.png" rel="lightbox" title="Droits de l'utilisateur" /><img src="wp-content/images/droits_utilisateurs_cron_mini.png" alt="Droits de l'utilisateur" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Sauvegarde des données et bases MySQL</h3>
<p>Nous allons maintenant écrire le Shell script. Pour ceux d&#8217;entre vous qui ne connaîtraient pas, il s&#8217;agit d&#8217;un fichier exécutable contenant une suite de commandes. <strong>Créez un nouveau fichier</strong> comportant l&#8217;extension .sh (<em>backup.sh</em> par exemple).</p>
<p>Un Shell script débute toujours par une ligne appelée <strong>shebang</strong>. Elle indique à la machine quel interpréteur utiliser (c&#8217;est-à-dire quelles commandes pourront être exécutées). Ce sera la première ligne du script :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span></pre></td></tr></table></div>

<p>Nous allons utiliser plusieurs fois la date du jour, c&#8217;est pourquoi il est préférable de la stocker dans une variable plutôt que de la demander à chaque fois au serveur :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">Date</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`date +%d%m%y`</span>&quot;</span></pre></td></tr></table></div>

<p>Notez l&#8217;utilisation des <strong>backquotes</strong>. Elles permettent d&#8217;éxecuter la commande renseignée à l&#8217;intérieur. Ainsi, lorsque le script sera lancé la ligne prendra la forme suivante :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">Date</span>=<span style="color: #ff0000;">&quot;08052009&quot;</span></pre></td></tr></table></div>

<p>Dans un premier temps, la sauvegarde sera située dans un dossier temporaire portant un nom de la forme <em>Backup-DateDuJour</em>, ainsi :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">Date</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`date +%d%m%y`</span>&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Création du répertoire de sauvegarde</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span></pre></td></tr></table></div>

<p>Lors de la création d&#8217;un script CRON, il est important de <strong>toujours utiliser des chemins absolus</strong> (c&#8217;est-à-dire complets), car son exécution se fera hors environnement. Les chemins relatifs ont de forte chance de ne pas fonctionner.</p>
<p>À présent, on passe à la sauvegarde de la base MySQL à l&#8217;aide de la commande <strong>mysqldump</strong>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>8
9
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Sauvegarde de la base MySQL vers le répertoire de sauvegarde</span>
mysqldump <span style="color: #660033;">--host</span> localhost <span style="color: #660033;">--user</span> backupsql <span style="color: #660033;">--password</span>=<span style="color: #000000;">12345</span> wordpress <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span>mysqldump-<span style="color: #007800;">$Date</span>.sql <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">BackupSQL</span>=<span style="color: #ff0000;">&quot;Ok&quot;</span></pre></td></tr></table></div>

<p>La syntaxe de <strong>mysqldump</strong> est très simple. Les arguments à fournir sont <strong>l&#8217;hôte où se trouve la base MySQL</strong>, le <strong>nom d&#8217;utilisateur</strong> et <strong>le mot de passe</strong> créé précédemment ainsi que le <strong>nom de la base à sauvegarder</strong>.</p>
<p>La sauvegarde est ensuite envoyée dans un nouveau fichier <em>mysqldump-$Date.sql</em> grâce à la redirection <strong>></strong>. Nous aurons besoin de savoir plus tard si la commande s&#8217;est bien déroulée, ce qui justifie la présence de la condition <strong>&#038;&#038;</strong> après la commande. Cela signifie que tout ce qui se situe après la condition sera uniquement exécuté si la commande précédente n&#8217;a pas retourné d&#8217;erreur. On stocke <strong>&laquo;&nbsp;Ok&nbsp;&raquo;</strong> dans la variable <em>BackupSQL</em> si la sauvegarde s&#8217;est correctement déroulée.</p>
<p>On compresse ensuite le répertoire où se trouvent les fichiers à sauvegarder, avec la création d&#8217;une variable <em>BackupData</em> pour les même raisons que précèdement :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>11
12
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Sauvegarde des données vers le répertoire de sauvegarde</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span>datadump-<span style="color: #007800;">$Date</span>.tar.gz <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>wordpress<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">BackupData</span>=<span style="color: #ff0000;">&quot;Ok&quot;</span></pre></td></tr></table></div>

<p>Pour faciliter le transfert des sauvegardes, on compresse l&#8217;archive contenant les données et la sauvegarde SQL dans un même fichier :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>14
15
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Compression des deux fichiers en un seul</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span>.tar.gz <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>On peut désormais supprimer le dossier temporaire :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>17
18
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Suppression des fichier non compressés</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span></pre></td></tr></table></div>

<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_3.png" />Envoi de messages privés via Twitter</h3>
<p>Envoyer un message privé à notre compte Twitter est une opération très simple à réaliser grâce à l&#8217;API de Twitter et cURL.</p>
<p>On utilise une structure conditionnelle en <strong>if&#8230; else</strong> pour vérifier si les variables <strong>BackupSQL</strong> et <strong>BackupData</strong> contiennent la chaîne de caractères <strong>&laquo;&nbsp;Ok&nbsp;&raquo;</strong> (ce qui signifie que la sauvegarde s&#8217;est correctement déroulée) :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Envoi de message privé via Twitter</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$BackupSQL</span> = <span style="color: #ff0000;">&quot;Ok&quot;</span> <span style="color: #660033;">-a</span> <span style="color: #007800;">$BackupData</span> = <span style="color: #ff0000;">&quot;Ok&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> 
<span style="color: #000000; font-weight: bold;">then</span>
	curl <span style="color: #660033;">--user</span> M2SBackup:<span style="color: #000000;">123456</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;text=La sauvegarde du <span style="color: #007800;">$Date</span> s'est correctement déroulée.&amp;user=MyUser&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>twitter.com<span style="color: #000000; font-weight: bold;">/</span>direct_messages<span style="color: #000000; font-weight: bold;">/</span>new.xml <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
<span style="color: #000000; font-weight: bold;">else</span>
	curl <span style="color: #660033;">--user</span> M2SBackup:<span style="color: #000000;">123456</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;text=Erreur lors de la sauvegarde du <span style="color: #007800;">$Date</span>, veuillez examiner la source du problème.&amp;user=MyUser&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>twitter.com<span style="color: #000000; font-weight: bold;">/</span>direct_messages<span style="color: #000000; font-weight: bold;">/</span>new.xml <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
<span style="color: #000000; font-weight: bold;">fi</span></pre></td></tr></table></div>

<p>La syntaxe de de cURL se résume à entrer le <strong>nom d&#8217;utilisateur</strong> suivi du <strong>mot de passe</strong> du compte Twitter émetteur (précédé d&#8217;un double point). Le message à envoyer se situe après <strong>&laquo;&nbsp;text=&nbsp;&raquo;</strong>. N&#8217;oubliez pas d&#8217;ajouter le destinataire (<strong>&#038;user=</strong>). La redirection <strong>> /dev/null</strong> permet de masquer les messages qui pourraient s&#8217;afficher à l&#8217;écran.</p>
<p>Notre shell script complet a la forme suivante :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">Date</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`date +%d%m%y`</span>&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Création du répertoire de sauvegarde</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Sauvegarde de la base MySQL vers le répertoire de sauvegarde</span>
mysqldump <span style="color: #660033;">--host</span> localhost <span style="color: #660033;">--user</span> sqlbackup <span style="color: #660033;">--password</span>=<span style="color: #000000;">12345</span> wordpress <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span>mysqldump-<span style="color: #007800;">$Date</span>.sql <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">BackupSQL</span>=<span style="color: #ff0000;">&quot;Ok&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Sauvegarde des données vers le répertoire de sauvegarde</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span>datadump-<span style="color: #007800;">$Date</span>.tar.gz <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>wordpress<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">BackupData</span>=<span style="color: #ff0000;">&quot;Ok&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Compression des deux fichiers en un seul</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span>.tar.gz <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Suppression des fichier non compressés</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>backups<span style="color: #000000; font-weight: bold;">/</span>Backup-<span style="color: #007800;">$Date</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Envoi de message privé via Twitter</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$BackupSQL</span> = <span style="color: #ff0000;">&quot;Ok&quot;</span> <span style="color: #660033;">-a</span> <span style="color: #007800;">$BackupData</span> = <span style="color: #ff0000;">&quot;Ok&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> 
<span style="color: #000000; font-weight: bold;">then</span>
	curl <span style="color: #660033;">--user</span> M2SBackup:<span style="color: #000000;">123456</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;text=La sauvegarde du <span style="color: #007800;">$Date</span> s'est correctement déroulée.&amp;user=MyUser&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>twitter.com<span style="color: #000000; font-weight: bold;">/</span>direct_messages<span style="color: #000000; font-weight: bold;">/</span>new.xml <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
<span style="color: #000000; font-weight: bold;">else</span>
	curl <span style="color: #660033;">--user</span> M2SBackup:<span style="color: #000000;">123456</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;text=Erreur lors de la sauvegarde du <span style="color: #007800;">$Date</span>, veuillez examiner la source du problème.&amp;user=MyUser&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>twitter.com<span style="color: #000000; font-weight: bold;">/</span>direct_messages<span style="color: #000000; font-weight: bold;">/</span>new.xml <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
<span style="color: #000000; font-weight: bold;">fi</span></pre></td></tr></table></div>

<p class="center"><a href="wp-content/images/tweetie_m2sbackup_cron.png" rel="lightbox" title="Message privé envoyé par Shell Script" /><img src="wp-content/images/tweetie_m2sbackup_cron_mini.png" alt="Message privé envoyé par Shell Script" /></a></p>
<h2>Configuration de CRON</h2>
<p>Pour finir, il faut définir à quelle intervalle de temps notre script sera exécuter par CRON. Si vous avez de la chance, votre hébergeur dispose d&#8217;une interface graphique sur leur site Web.</p>
<p>Pour les autres, la commande <strong>crontab -e</strong> permet d&#8217;ajouter un &laquo;&nbsp;CRON job&nbsp;&raquo; manuellement :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">0</span> <span style="color: #000000;">12</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>backup.sh</pre></td></tr></table></div>

<p>Les cinq premiers éléments indiquent la fréquence d&#8217;exécution. La suite de nombre a pour signification <strong>Minute</strong>, <strong>Heure</strong>, <strong>Jour du mois</strong>, <strong>Mois</strong>, <strong>Jour de la semaine</strong>. Ainsi, dans cet exemple, le script sera exécuté toutes les 12 heures.</p>
<h2>Améliorations possibles</h2>
<p>J&#8217;ai volontairement laissé certaines fonctionnalités de côté pour éviter de compliquer les choses comme le <strong>chiffrement des archives</strong> ou le <strong>transfert des archives vers un serveur tiers</strong>.</p>
<p>N&#8217;hésitez pas à implémenter ces fonctionnalités et de me faire part de vos idées d&#8217;amélioration !</p>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/cron-sauvegarde-des-donnees-mysql-et-notification-twitter/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Qui pour sauver le livre électronique ?</title>
		<link>http://maximebornemann.com/qui-pour-sauver-le-livre-electronique</link>
		<comments>http://maximebornemann.com/qui-pour-sauver-le-livre-electronique#comments</comments>
		<pubDate>Sat, 02 May 2009 19:40:46 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[bookeen]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[futur]]></category>
		<category><![CDATA[irex]]></category>
		<category><![CDATA[sony]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=152</guid>
		<description><![CDATA[Fantasme de geek récurrent, le livre électronique n&#8217;en peine pas moins à pénétrer le secteur du grand public. À chaque nouvelle annonce une once d&#8217;espérance renaît, mais pourtant rien ne bouge réellement. Quelles conclusions en tirer sur l&#8217;avenir des livres électroniques ?

Des solutions qui se multiplient
Plus les années passent et plus l&#8217;engouement autour du livre [...]]]></description>
			<content:encoded><![CDATA[<p>Fantasme de geek récurrent, le livre électronique n&#8217;en peine pas moins à pénétrer le secteur du grand public. À chaque nouvelle annonce une once d&#8217;espérance renaît, mais pourtant rien ne bouge réellement. Quelles conclusions en tirer sur l&#8217;avenir des livres électroniques ?<br />
<span id="more-152"></span></p>
<h2>Des solutions qui se multiplient</h2>
<p>Plus les années passent et plus l&#8217;engouement autour du livre électronique semble atteindre le grand public. Les solutions prolifèrent chez les fabricants les plus populaires comme Sony et Amazon ou les plus petits comme iRex Technologies et Bookeen.</p>
<p class="center"><a href="wp-content/images/sony_reader_prs505.jpeg" rel="lightbox" title="Sony Reader PRS-505" /><img src="wp-content/images/sony_reader_prs505_mini.png" alt="Sony Reader PRS-505" /></a><a href="wp-content/images/amazon_kindle_2.jpeg" rel="lightbox" title="Amazon Kindle 2" /><img src="wp-content/images/amazon_kindle_2_mini.png" alt="Amazon Kindle 2" /></a><a href="wp-content/images/cybook_gen3.jpeg" rel="lightbox" title="Cybook Gen 3" /><img src="wp-content/images/cybook_gen3_mini.png" alt="Cybook Gen 3" /></a></p>
<p>Depuis la sortie de son Kindle fin 2007 (et de son successeur il y a quelques mois), Amazon est sur le pied de guerre et semble déterminer à s&#8217;emparer du marché. Après avoir racheter <strong>Audible</strong> (leader de la vente de livre audio en ligne), d&#8217;avoir proposé sa propre application permettant de lire les livres destinés au Kindle sur iPhone ou iPod Touch, Amazon s&#8217;est offert <strong>Stanza</strong>, leader de la plate-forme pommée.</p>
<p>Mais cet investissement est-il réellement bénéfique ? L&#8217;entreprise a probablement investi des millions de dollars dans le développement du Kindle, mais l&#8217;ouverture récente plate-formes concurrentes prouve que la stratégie mise en place par Jeff Bezos, fondateur et actuel PDG, est entrain de changer.</p>
<p>Amazon tend à devenir un fournisseur de contenu plutôt que de vouloir dominer le marché avec sa plate-forme propriétaire. Est-ce là un aveu de faiblesse devant la complexité de la tâche ou l&#8217;envie de s&#8217;emparer du gros morceau avant que quelqu&#8217;un d&#8217;autre ne s&#8217;en charge ?</p>
<h2>Des imperfections technologiques persistantes</h2>
<p>Commençons tout d&#8217;abord par analyser les principaux appareils disponibles sur le marché. Ces lecteurs sont typiquement chers, d&#8217;une qualité de fabrication moyenne et dont l&#8217;expérience utilisateur laisse à désirer.</p>
<p>Si l&#8217;on ne devait retenir qu&#8217;une chose, c&#8217;est à quel point ils se ressemblent dans la médiocrité. Le problème vient peut-être de la technologie utilisée, la fameuse encre électronique (&laquo;&nbsp;E Ink&nbsp;&raquo;). Certes, l&#8217;encre électronique permet d&#8217;obtenir une consommation d&#8217;énergie très faible et un confort pour les yeux non négligeable mais son champ d&#8217;utilisation est extrêmement réduit.</p>
<p>Quand la tendance est aux appareils tout en un, comment une telle technologie peut-elle espérer s&#8217;imposer ?</p>
<h2>Au bénéfice des consommateurs ?</h2>
<p>Le deuxième obstacle majeur à la croissance de ce marché est bien entendu les fournisseurs de contenus. Amazon propose des tarifs réduits pour ses livres destinés au Kindle, mais les prix sont parfois encore au dessus de ce que l&#8217;on pourrait espérer.</p>
<p>Le Kindle n&#8217;étant disponible uniquement aux États-Unis, il faut donc se rabattre sur les fournisseurs locaux. Malheureusement pour nous, la situation en France est catastrophique. Numilog, leader du secteur et partenaire de la FNAC, propose des tarifs exorbitants quasiment équivalents aux versions papier sans pour autant que les auteurs voient leurs revenus augmenter. Pire encore, la FNAC a récemment commercialisé en exclusivité le Sony Reader PRS-505 pour 299€, soit presque 100€ de plus qu&#8217;outre-Atlantique.</p>
<p class="center"><a href="wp-content/images/prix_fnac_ebook.png" rel="lightbox" title="Prix des livres électroniques sur le site de la FNAC" /><img src="wp-content/images/prix_fnac_ebook_mini.png" alt="Prix des livres électroniques sur le site de la FNAC" /></a><a href="wp-content/images/prix_kindle_ebook.png" rel="lightbox" title="Prix des livres électroniques destinés au Kindle" /><img src="wp-content/images/prix_kindle_ebook_mini.png" alt="Prix des livres électroniques destinés au Kindle" /></a></p>
<h2>Qui pour sauver le livre électronique ?</h2>
<p>Comment justifier de telles pratiques ? Le livre électronique est à la dérive et a besoin d&#8217;un sauveur car son futur est incertain.</p>
<p>Fort heureusement, la clé de la réussite n&#8217;est peut-être pas si loin. Si de nos jours une entreprise à les moyens de changer les choses, il s&#8217;agit bien d&#8217;Apple. Devant le succès de sa plate-forme mobile, du savoir faire qu&#8217;on lui connaît et de l&#8217;attrait pour l&#8217;iTunes Store, l&#8217;entreprise à toutes les cartes en main pour changer la donne.</p>
<p>Si Apple parvient à faire un partenariat avec Amazon et les différents éditeurs à l&#8217;étranger (ce qui risque de s&#8217;avérer très difficile) et qu&#8217;un appareil plus adapté à la lecture de livres qu&#8217;un iPhone fait son apparition (je pense à la supposée Mac Tablet), le pari sera presque gagné.</p>
<p>Connaissant la firme, cette solution n&#8217;arrangera tous les consommateurs sur la question du prix, mais poussera définitivement le livre électronique vers le droit chemin.</p>
<p class="center"><a href="wp-content/images/mac_tablet.png" rel="lightbox" title="Faux concept de la supposée Mac Tablet" /><img src="wp-content/images/mac_tablet_mini.png" alt="Faux concept de la supposée Mac Tablet" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/qui-pour-sauver-le-livre-electronique/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Freebie PSD : Clavier Apple haute résolution</title>
		<link>http://maximebornemann.com/freebie-clavier-apple-haute-resolution-psd-inclus</link>
		<comments>http://maximebornemann.com/freebie-clavier-apple-haute-resolution-psd-inclus#comments</comments>
		<pubDate>Fri, 01 May 2009 12:54:55 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Freebies]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[clavier]]></category>
		<category><![CDATA[freebie]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=128</guid>
		<description><![CDATA[À plusieurs reprises, j&#8217;ai tenté de trouver une représentation des touches des claviers Apple dans une résolution convenable. Las des recherches infructueuses, j&#8217;ai décidé de remédier au problème. Et pour que ce problème n&#8217;en soit plus un pour personne, j&#8217;offre le fichier source Photoshop en téléchargement !

Informations supplémentaires
Les 78 touches sont basées sur le dernier [...]]]></description>
			<content:encoded><![CDATA[<p>À plusieurs reprises, j&#8217;ai tenté de trouver une représentation des touches des claviers Apple dans une résolution convenable. Las des recherches infructueuses, j&#8217;ai décidé de remédier au problème. Et pour que ce problème n&#8217;en soit plus un pour personne, j&#8217;offre le fichier source Photoshop en téléchargement !<br />
<span id="more-128"></span></p>
<h2>Informations supplémentaires</h2>
<p>Les <strong>78 touches</strong> sont basées sur le dernier modèle de clavier Apple sans fil, dans sa version AZERTY. La police utilisée est <strong>VAG Rounded</strong>. Cliquez sur les images ci-dessous pour avoir un meilleur aperçu : </p>
<p class="center"><a href="wp-content/images/apercu_clavier_apple_1.png" rel="lightbox" title="Clavier Apple (1 sur 3)" /><img src="wp-content/images/apercu_clavier_apple_1_mini.png" alt="Clavier Apple (1 sur 3)" /></a> <a href="wp-content/images/apercu_clavier_apple_2.png" rel="lightbox" title="Clavier Apple (2 sur 3)" /><img src="wp-content/images/apercu_clavier_apple_2_mini.png" alt="Clavier Apple (2 sur 3)" /></a> <a href="wp-content/images/apercu_clavier_apple_3.png" rel="lightbox" title="Clavier Apple (3 sur 3)" /><img src="wp-content/images/apercu_clavier_apple_3_mini.png" alt="Clavier Apple (3 sur 3)" /></a></p>
<h2><img src="wp-content/themes/subtletide/images/download.png" alt="Téléchargement" /> Téléchargement</h2>
<ul>
<li><a href="wp-content/fichiers/apple_keyboard.psd">Fichier source Photoshop (.psd)</a> (33 mo) </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/freebie-clavier-apple-haute-resolution-psd-inclus/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>XCode : 20 astuces pour augmenter votre productivité</title>
		<link>http://maximebornemann.com/xcode-20-astuces-pour-augmenter-votre-productivite</link>
		<comments>http://maximebornemann.com/xcode-20-astuces-pour-augmenter-votre-productivite#comments</comments>
		<pubDate>Fri, 01 May 2009 10:27:02 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[liste]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=90</guid>
		<description><![CDATA[XCode est l&#8217;environnement de développement de choix sur Mac OS X. En plus d&#8217;être puissant, il a la particularité d&#8217;être grandement flexible. Ce qui suit est une liste d&#8217;astuces que j&#8217;ai pu recueillir au fil du temps, afin que vous puissiez vous aussi devenir plus productif lors de vos séances de programmation.

Les astuces de base
Ouvrir [...]]]></description>
			<content:encoded><![CDATA[<p>XCode est l&#8217;environnement de développement de choix sur Mac OS X. En plus d&#8217;être puissant, il a la particularité d&#8217;être grandement flexible. Ce qui suit est une liste d&#8217;astuces que j&#8217;ai pu recueillir au fil du temps, afin que vous puissiez vous aussi devenir plus productif lors de vos séances de programmation.</p>
<p><span id="more-90"></span></p>
<h2>Les astuces de base</h2>
<h3 class="numbered_list numbered_list_first"><img src="wp-content/themes/subtletide/images/list_1.png" />Ouvrir automatiquement la console au démarrage de l&#8217;application</h3>
<p>La console se retrouve très souvent ouverte lors de l&#8217;exécution de notre programme pour des raisons de débuggage. Plutôt que d&#8217;utiliser le raccourci <strong><img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + R</strong>, il est vivement conseillé de <strong>configurer XCode afin de rendre cette ouverture automatique</strong>. Dans l&#8217;onglet <em>&laquo;&nbsp;Debugging&nbsp;&raquo;</em> des préférences, sélectionnez <em>&laquo;&nbsp;Show Console&nbsp;&raquo;</em> dans le menu déroulant <em>&laquo;&nbsp;On Start&nbsp;&raquo;</em>.</p>
<p class="center"><a href="wp-content/images/on_start_show_console.png" rel="lightbox" title="Ouvrir automatiquement la console au démarrage de l'application" /><img src="wp-content/images/on_start_show_console_mini.png" alt="Ouvrir automatiquement la console au d&eacute;marrage de l'application" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_2.png" />Profiter de la puissance du champ de recherche</h3>
<p>Pour <strong>accéder rapidement au moteur de recherche</strong> de XCode, on utilise le raccourci <strong><img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + F</strong> (ou <strong><img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + F</strong> pour une recherche avancée). Si une liste de dossiers est sélectionnée dans le navigateur, la recherche s&#8217;effectuera uniquement à ces endroits là.</p>
<p>En cliquant sur la loupe à côté du champ de recherche, on constate qu&#8217;il est possible d&#8217;utiliser des <strong>caractères joker</strong> et même des <strong>expressions régulières</strong>.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_3.png" />Ouvrir plus rapidement les fichiers</h3>
<p>Plutôt que d&#8217;utiliser le menu traditionnel d&#8217;ouverture de fichier, <strong>préférez l&#8217;utilisation de l&#8217;ouverture rapide</strong> (<strong><img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + D</strong>) qui est une manière bien plus pratique d&#8217;ouvrir vos fichiers.</p>
<p class="center"><a href="wp-content/images/ouverture_rapide.png" rel="lightbox" title="Ouvrir plus rapidement les fichiers" /><img src="wp-content/images/ouverture_rapide_mini.png" alt="Ouvrir plus rapidement les fichiers" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_4.png" />La vue détaillée</h3>
<p>Si les éléments de l&#8217;interface vous gênent, n&#8217;hésitez pas à <strong>passer en mode de vue détaillée</strong> à l&#8217;aide du raccourci <strong><img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + <img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + E</strong>. Cette vue affiche uniquement la fenêtre de code.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_5.png" />Parcourir efficacement la documentation</h3>
<p>Si vous passez un temps considérable à parcourir la documentation (<strong><img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + <img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + ?</strong>), sachez qu&#8217;il est possible d&#8217;<strong>accéder à une section précise</strong> en utilisant le raccourci <strong><img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + Double-clic</strong> sur un élément particulier.</p>
<p class="center"><a href="wp-content/images/documentation.png" rel="lightbox" title="Parcourir efficacement la documentation" /><img src="wp-content/images/documentation_mini.png" alt="Parcourir efficacement la documentation" /></a></p</p>
<h2>Naviguer dans le code et entre les fichiers</h2>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_6.png" />Passer rapidement du fichier d&#8217;en-tête au fichier d&#8217;implémentation</h3>
<p>Naviguer entre le fichier d&#8217;en-tête (.h) et le fichier d&#8217;implémentation (.m) des classes peut vite devenir frustrant si l&#8217;on ne connaît pas ce raccourci. <strong><img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + <img src="wp-content/themes/subtletide/images/arrow_up.gif" alt="Fl&egrave;che vers le haut" /></strong> vous permet de passer d&#8217;un fichier à l&#8217;autre sans le moindre effort.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_7.png" />Parcourir efficacement l&#8217;historique</h3>
<p>Si vous souhaitez accéder rapidement à un fichier ouvert précédemment, pensez à utilisez le raccourci <strong><img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + <img src="wp-content/themes/subtletide/images/arrow_left.gif" alt="Fl&egrave;che vers la gauche" /> ou <img src="wp-content/themes/subtletide/images/arrow_right.gif" alt="Fl&egrave;che vers la droite" /></strong>.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_8.png" />Lister les méthodes décrites dans le fichier</h3>
<p>Pour parcourir rapidement dans un fichier, rien ne vaut le raccourci <strong>Ctrl + 2</strong> qui affiche la liste des méthodes décrites dans le fichier.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_9.png" />Organiser les méthodes avec pragma mark</h3>
<p>Cette astuce est une de mes préférées. Grâce aux &laquo;&nbsp;pragma mark&nbsp;&raquo;, il est possible de scinder ou d&#8217;organiser par sections la liste des méthodes obtenue avec le raccourci précédent <strong>Ctrl + 2</strong>.</p>
<p>Pour créer une nouvelle section, on utilise <strong>#pragma mark suivi du nom de la section</strong> (le séparateur s&#8217;obtient en utilisant un tiret (-) en guise de nom).</p>
<p class="center"><a href="wp-content/images/pragma_mark.png" rel="lightbox" title="Organiser les méthodes avec pragma mark" /><img src="wp-content/images/pragma_mark_mini.png" alt="Organiser les méthodes avec pragma mark" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_10.png" />Les commentaires spéciaux</h3>
<p>Les commentaires spéciaux sont très pratiques pour garder trace de ce qu&#8217;il reste à modifier dans votre programme. En ajoutant un commentaire de type <strong>// TODO :</strong> ou <strong>// FIXME :</strong>, un nouvel élément apparaîtra dans la liste des méthodes (<strong>Ctrl + 2</strong>) à la manière de l&#8217;astuce précédente.</p>
<p class="center"><a href="wp-content/images/commentaires_speciaux.png" rel="lightbox" title="Les commentaires spéciaux" /><img src="wp-content/images/commentaires_speciaux_mini.png" alt="Les commentaires spéciaux" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_11.png" />Ajouter des marques page</h3>
<p>Les marques page constituent une autre façon de naviguer rapidement au travers des fichiers. Pour créer un marque page, on utilise le raccourci <strong><img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + D</strong>. Les raccourcis <strong>Ctrl + 4</strong> et <strong><img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + M</strong> permettent de consulter les marques page du fichier ou du projet entier.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_12.png" />Centrer le fenêtre sur la sélection</h3>
<p>Quand vous sentirez le besoin de recentrer la fenêtre sur un élément particulier, <strong>Ctrl + L</strong> vous sera d&#8217;une grande utilité.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_13.png" />Se rendre à la ligne désirée</h3>
<p>Cette astuce fonctionne à travers de nombreuses applications sur Mac OS X, aucune raison pour que ça ne soit pas le cas sur XCode. <strong><img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + L</strong> permet d&#8217;atteindre n&#8217;importe quelle ligne du document.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_14.png" />Accéder à la déclaration ou l&#8217;implémentation d&#8217;une méthode</h3>
<p>Que l&#8217;on croise la déclaration ou l&#8217;implémentation d&#8217;une méthode dans un morceau de code, sachez qu&#8217;il est possible de passer rapidement de l&#8217;un à l&#8217;autre grâce au raccourci <strong><img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + Double-clic</strong> sur le nom de la méthode concernée.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_15.png" />Activer la mise en surbrillance automatique</h3>
<p>XCode offre la possibilité de mettre intelligemment en valeur une partie du code suivant l&#8217;endroit où l&#8217;on se situe.  Cela peut être utile dans le cas d&#8217;une démonstration, mais il s&#8217;agit avant tout d&#8217;une question de goût. Cette fonctionnalité peut être activée (ou désactivée) grâce au raccourci <strong>Ctrl + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + <img src="wp-content/themes/subtletide/images/option.gif" alt="Option" /> + F.</strong></p>
<p class="center"><a href="wp-content/images/surbrillance_automatique.png" rel="lightbox" title="Activer la mise en surbrillance automatique" /><img src="wp-content/images/surbrillance_automatique_mini.png" alt="Activer la mise en surbrillance automatique" /></a></p>
<h2>Coder encore plus rapidement</h2>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_16.png" />L&#8217;autocomplétion</h3>
<p>Comme tout bon éditeur de code, XCode propose une autocomplétion durant la frappe. Pour valider le choix proposé, il suffit d&#8217;appuyer sur <strong>Tab</strong>.</p>
<p>Particularité intéressante, si le morceau de code ajouté contient plus d&#8217;un argument a compléter, on peut utiliser <strong>Ctrl + /</strong> pour passer à l&#8217;argument suivant.</p>
<p class="center"><a href="wp-content/images/autocompletion.png" rel="lightbox" title="L'autocomplétion" /><img src="wp-content/images/autocompletion_mini.jpg" alt="L'autocomplétion" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_17.png" />Suggestion</h3>
<p>Lorsque vous n&#8217;êtes pas certain de quoi taper, appuyez sur la touche <strong>Esc</strong> pour afficher une liste de suggestion.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_18.png" />Commenter une sélection</h3>
<p>Pour commenter ou décommenter rapidement un bloc de code, il suffit de le sélectionner et d&#8217;appuyer sur les touches <strong><img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + /</strong>.</p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_19.png" />Sélectionner toutes les occurences à portée de la sélection</h3>
<p>Si le besoin se fait ressentir de renommer le nom d&#8217;une variable apparaissant plusieurs fois dans l&#8217;une de vos méthodes, ne prenez pas la peine de les renommer à la main. En plus d&#8217;être source d&#8217;erreurs et de perte de temps, il existe un fonctionnalité très utile dans XCode permettant de sélectionner intelligemment toutes les occurrences à portée d&#8217;une sélection à l&#8217;aide du raccourci <strong>Ctrl + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + T</strong>.</p>
<p class="center"><a href="wp-content/images/edit_all_in_scope.png" rel="lightbox" title="Sélectionner toutes les occurences à portée de la sélection" /><img src="wp-content/images/edit_all_in_scope_mini.png" alt="Sélectionner toutes les occurences à portée de la sélection" /></a></p>
<h3 class="numbered_list"><img src="wp-content/themes/subtletide/images/list_20.png" />La refactorisation de code</h3>
<p>La refactorisation de code (anglicisme de refactoring) est une fonction très puissante que propose XCode (<strong><img src="wp-content/themes/subtletide/images/shift.gif" alt="Shift" /> + <img src="wp-content/themes/subtletide/images/command.gif" alt="Command" /> + J</strong>). A la manière de l&#8217;astuce précédente, elle permet par exemple de <strong>renommer une variable à travers tout un projet</strong> ou même de <strong>créer des méthodes à partir d&#8217;un bout de code</strong> et tout cela en quelques clics seulement. Je ne peux que vous encourager à essayer, gain de temps garanti !</p>
<p class="center"><a href="wp-content/images/refactoring.png" rel="lightbox" title="La refactorisation de code" /><img src="wp-content/images/refactoring_mini.png" alt="La refactorisation de code" /></a></p>
<h2>Pour finir&#8230;</h2>
<p>Il existe encore de nombreuses astuces pour XCode. J&#8217;en traiterai quelques-unes plus avancées, comme les macros, les scripts utilisateurs et les templates personnalisées dans un prochain article.</p>
<p>En attendant, n&#8217;hésitez pas à <strong>créer vos propres raccourcis</strong> (<em>&laquo;&nbsp;Préférences&nbsp;&raquo;</em>, <em>&laquo;&nbsp;Key Binding&nbsp;&raquo;</em>) et si vous connaissez d&#8217;autres astuces, <strong>laissez un commentaire pour les partager avec moi !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/xcode-20-astuces-pour-augmenter-votre-productivite/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lancement du blog !</title>
		<link>http://maximebornemann.com/lancement-du-blog</link>
		<comments>http://maximebornemann.com/lancement-du-blog#comments</comments>
		<pubDate>Fri, 01 May 2009 10:00:13 +0000</pubDate>
		<dc:creator>Maxime Bornemann</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[lancement]]></category>
		<category><![CDATA[présentation]]></category>

		<guid isPermaLink="false">http://maximebornemann.com/?p=81</guid>
		<description><![CDATA[Il était temps ! C&#8217;est probablement les mots que les personnes me connaissant trouveront à dire. Il faut avouer que la mise en ligne de ce blog est un projet qui traînait depuis bien des mois. Mais pourquoi décider de lancer un blog maintenant ?

Qui suis-je ?
Il y a de grandes chances pour que vous [...]]]></description>
			<content:encoded><![CDATA[<p>Il était temps ! C&#8217;est probablement les mots que les personnes me connaissant trouveront à dire. Il faut avouer que la mise en ligne de ce blog est un projet qui traînait depuis bien des mois. Mais pourquoi décider de lancer un blog maintenant ?</p>
<p><span id="more-81"></span></p>
<h2>Qui suis-je ?</h2>
<p>Il y a de grandes chances pour que vous n&#8217;ayez jamais entendu parler de moi. Pour faire court, je m&#8217;appelle Maxime Bornemann, j&#8217;ai 21 ans et je suis passionné par de nombreux domaines de l&#8217;informatique. Je suis étudiant en Réseaux et Télécommunications à l&#8217;IUT de Colmar (Alsace), ce qui fait de moi un &laquo;&nbsp;IT guy&nbsp;&raquo;.</p>
<p>Fort heureusement, ce n&#8217;est pas tout. J&#8217;ai un grand intérêt pour le Web design, l&#8217;expérience utilisateur et le développement en général. Je travaille actuellement sur plusieurs projets avec <a href="http://www.kingstartups.com">Max Schleiffer</a>, réunis sous la bannière de <a href="http://www.m2sgroupe.com">M2SGroupe</a>.</p>
<h2>Quel est le but de ce blog ?</h2>
<p>Ce blog a pour objectif premier le partage de la connaissance. Je meurs d&#8217;envie de faire part de mes découvertes concernant les sujets qui me tiennent à coeur. Les articles seront ainsi souvent présentés sous la forme de tutoriels (écrits ou screencast).</p>
<p>Mon objectif second est bien entendu de me mettre en avant sur le Web. J&#8217;espère que cette expérience me permettra de faire des rencontres enrichissantes.</p>
<h2>Et maintenant ?</h2>
<p>Si l&#8217;envie vous prend d&#8217;en savoir plus sur moi, la meilleure solution est de me suivre sur <a href="http://twitter.com/MBornemann">Twitter</a>. Pendant que vous y êtes, pourquoi ne pas commencer par lire <a href="http://maximebornemann.com/xcode-20-astuces-pour-augmenter-votre-productivite">XCode : 20 astuces pour augmenter votre productivité</a> ou profiter de <a href="http://maximebornemann.com/freebie-clavier-apple-haute-resolution-psd-inclus">mon petit cadeau</a> ?</p>
]]></content:encoded>
			<wfw:commentRss>http://maximebornemann.com/lancement-du-blog/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
