<?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>Hooba Studios &#187; Environnement</title>
	<atom:link href="http://www.hooba.ca/blog/categorie/environnement/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hooba.ca/blog</link>
	<description></description>
	<lastBuildDate>Sun, 11 Jul 2010 13:51:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MongoDB et autres bases de données NoSQL, le début d&#8217;une nouvelle ère</title>
		<link>http://www.hooba.ca/blog/2009/mongodb-et-autres-bases-de-donnees-nosql-le-debut-dune-nouvelle-ere/</link>
		<comments>http://www.hooba.ca/blog/2009/mongodb-et-autres-bases-de-donnees-nosql-le-debut-dune-nouvelle-ere/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 16:39:45 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[Environnement]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=409</guid>
		<description><![CDATA[Depuis le printemps dernier, on entend parler de plus en plus du mouvement NoSQL. Pour ceux qui auraient eu la tête dans le sable pendant les derniers mois, il s&#8217;agit d&#8217;un mouvement qui cherche à trouver d&#8217;autres solutions pour la gestion des données que les RDBMS (bases de données relationnelles, à la MySQL / SQL [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis <a href="http://nosql.eventbrite.com/">le printemps dernier</a>, on entend parler de plus en plus du mouvement NoSQL. Pour ceux qui auraient eu la tête dans le sable pendant les derniers mois, il s&#8217;agit d&#8217;un mouvement qui cherche à trouver d&#8217;autres solutions pour la gestion des données que les <a href="http://en.wikipedia.org/wiki/RDBMS">RDBMS</a> (bases de données relationnelles, à la MySQL / SQL Server). C&#8217;est donc le retour en force des bases de donnée <em>key/value pair</em> et autres formes de bases de données sans schéma.<span id="more-409"></span></p>
<h3>Les problèmes des RDBMS</h3>
<p>Les bases de données relationnelles ont comme caractéristique principale d&#8217;être très structurées. C&#8217;est sans doute la raison derrière leur grande popularité. Par contre, ce ne sont pas tous les problèmes qui tombent dans le moule de ce type d&#8217;architecture.</p>
<p>Aussi, il devient plutôt difficile, dépassé un certain point, de continuer à <em>scaler</em> horizontalement avec ce type de bases de données. On met la base de donnée sur un autre serveur, ensuite on ajoute des réplications pour avoir des master/slaves, on optimise nos requêtes&#8230; ça peut nous mener très loin, mais pas assez loin pour les gros joueurs. Le problème des performances était donc aussi une des motivations pour chercher une autre solution.</p>
<h3>The new kids on the block</h3>
<p>Alors voilà qu&#8217;apparait toutes les nouvelles bases de données et que le sujet se met à bouillonner. <a href="http://1978th.net/">Tokyo</a>, <a href="http://couchdb.apache.org/">CouchDB</a>, <a href="http://www.mongodb.org/">MongoDB</a>, <a href="http://hadoop.apache.org/hbase/">HBase</a> (du projet <a href="http://hadoop.apache.org/">Hadoop</a>), <a href="http://code.google.com/p/redis/">Redis</a>, <a href="http://incubator.apache.org/cassandra/">Cassandra</a>, etc.</p>
<p>Ces projets sont pour la plupart orienté sur la distributivité de la base de donnée. Elles ont été conçues à la base pour <em>scaler</em> horizontalement.</p>
<h3>Essai de MongoDB avec PHP</h3>
<p>J&#8217;ai donc décidé d&#8217;essayer un de ces systèmes: <a href="http://www.mongodb.org/">MongoDB</a>. Il s&#8217;agit d&#8217;une base de donnée sans schéma: on y stock les données à peu près comme on veut et chaque entrées peut avoir des champs différents. L&#8217;installation est plutôt simple (du moins sous Linux), <a href="http://www.mongodb.org/display/DOCS/Downloads">les fichiers binaires ou le code source</a> sont disponible sur le site web. Lorsque le serveur est installé, il faut installer les <em>drivers</em> pour chaque langage que l&#8217;on compte utiliser (PHP, Python, Ruby, Java, etc. C++, lui, est inclu). J&#8217;ai donc installé le <em>driver</em> pour PHP à partir du <a href="http://www.mongodb.org/display/DOCS/Installing+the+PHP+Driver">code source sur le site web</a>. Seulement ensuite je me suis rendu compte que j&#8217;aurais pu me sauver un peu de compilation en faisant simplement <code>sudo pecl install mongo</code> (sous Ubuntu).</p>
<p>Voici un exemple de code <a href="http://www.mongodb.org/display/DOCS/PHP+Tutorial">tiré à peu près du site de MongoDB</a> pour insérer des données:</p>
<pre><code>$m = new Mongo();
$collection = $m->selectDB( "foo" )->selectCollection( "bar" );

$doc = array( "name" => "MongoDB",
   "type" => "database",
   "count" => 1,
   "info" => (object)array( "x" => 203,
       "y" => 102),
   "versions" => array("0.9.7", "0.9.8", "0.9.9")
);

$collection->insert( $doc );</code></pre>
<p>On les récupère ensuite:</p>
<pre><code>$m = new Mongo();
$collection = $m->selectDB( "foo" )->selectCollection( "bar" );

$obj = $collection->findOne();
</code></pre>
<p>Ou on peut faire une requête pour plusieurs résultats:</p>
<pre><code>$m = new Mongo();
$collection = $m->selectDB( "foo" )->selectCollection( "bar" );

$cursor = $collection->find( array('name' => 'MongoDB') );

while( $cursor->hasNext() ) {
    var_dump( $cursor->getNext() );
}</code></pre>
<h3>Simple, trop simple?</h3>
<p>Avec les bases de données relationnelles, le simple apprentissage du SQL permettait de bien comprendre le paradigme des RDBMS et de bien s&#8217;en servir. Maintenant, avec les nouvelles bases de données qui apparaissent, nous avons beaucoup plus de flexibilité: on y met à peu près ce qu&#8217;on veut. Le prochain objet qu&#8217;on y insère n&#8217;a pas besoin de ressembler au précédent. Cette flexibilité est bienvenue et très puissante (par exemple, on peut faire rouler plusieurs version de la même application en même temps, selon le client, avec la même base de donnée, comme Google le fait avec Gmail).</p>
<p>Cette flexibilité et simplicité vient par contre au prix d&#8217;être complètement laissés à nous-même. Les RDBMS sont vieilles et son fonctionnement bien connu de tous. Des tonnes de livres ont été écrites sur MySQL, SQLite, SQL Server et l&#8217;architecture avec les RDBMS. Les fonctionnalités des nouvelles bases de données sont généralement bien documentées. C&#8217;est très simple (beaucoup plus simple qu&#8217;avec du SQL) d&#8217;y insérer et récupérer des entrées. Par contre, la façon de penser l&#8217;architecture d&#8217;applications qui utilisent ces bases de données est plutôt nébuleuse. Je n&#8217;ai pas encore vu de livre qui traitent de l&#8217;utilisation de ces systèmes et les blogs qui en glissent un mot parlent plutôt de l&#8217;architecture matérielle utilisée, des raisons qui ont poussés la migration et des raisons de leur choix particulier parmi les nouvelles bases de données.</p>
<h3>On va continuer d&#8217;en entendre parler</h3>
<p>Ceci dit, tout ce que j&#8217;ai lu à date sur le sujet est très positif. Est-ce révolutionnaire ou bien avait-on simplement besoin d&#8217;air frais? Une chose est sûr c&#8217;est que les bases de données &laquo;&nbsp;non-relationnelles&nbsp;&raquo; sont là pour rester. Par contre, elles n&#8217;écraseront pas les RDBMS pour toutes les situations de si tôt: elles ne sont pas (et ne tentent pas d&#8217;être) <a href="http://en.wikipedia.org/wiki/ACID">ACID</a>. On continuera donc sans doute à utiliser les RDBMS pour les utilisations comme les transactions financières, où l&#8217;intégrité des données et l&#8217;utilisation de transactions (dans le sens SQL du terme) sont importantes.</p>
<p>Encore faut-il que nos universités abordent le sujet. Parions qu&#8217;ils n&#8217;en parleront pas avant un bon 10 ans!</p>
<p>Si vous connaissez une source (livre, blog, wiki, etc.) où on peut en apprendre sur la conception d&#8217;application et d&#8217;architecture avec ces nouvelles bases de données, laissez-moi savoir!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2009/mongodb-et-autres-bases-de-donnees-nosql-le-debut-dune-nouvelle-ere/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Contrôle de version avec Mercurial</title>
		<link>http://www.hooba.ca/blog/2009/controle-de-version-avec-mercurial/</link>
		<comments>http://www.hooba.ca/blog/2009/controle-de-version-avec-mercurial/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 03:16:23 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[Environnement]]></category>
		<category><![CDATA[Regardez-ça]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=361</guid>
		<description><![CDATA[Il y a quelques mois, je vous vantais les mérites de Subversion. Je trouve encore que Subversion est un très bon système de contrôle de version. Par contre, à la fin du mois d&#8217;avril, Google Code a annoncé qu&#8217;il allait désormais aussi supporter Mercurial.
Malgré le hype qu&#8217;il y avait pour Git, Google a tout de [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques mois, <a href="http://www.hooba.ca/blog/2008/hebergement-gratuit-de-subversion/">je vous vantais les mérites de Subversion</a>. Je trouve encore que Subversion est un très bon système de contrôle de version. Par contre, à la fin du mois d&#8217;avril, <a href="http://google-code-updates.blogspot.com/2009/04/mercurial-support-for-project-hosting.html">Google Code a annoncé qu&#8217;il allait désormais aussi supporter Mercurial</a>.</p>
<p>Malgré le <em>hype</em> qu&#8217;il y avait pour <a href="http://git-scm.com/">Git</a>, Google a tout de même choisi <a href="http://www.selenic.com/mercurial/">Mercurial</a>, que je ne connaissais pas vraiment. J&#8217;ai donc décidé de l&#8217;essayer.</p>
<p><span id="more-361"></span></p>
<h3>Distribué vs centralisé</h3>
<p>Tout d&#8217;abord, Mercurial est comme Git, dans le sens où il s&#8217;agit d&#8217;un système de contrôle de version <strong>distribué</strong>. Subversion, lui, est centralisé.</p>
<p>Concrètement, Subversion a son <em>repository</em> à <strong>un</strong> endroit (générallement sur un serveur). Chaque utilisateur va chercher les fichiers (<em>checkout</em>), fait ses modifications et les renvoit au serveur (<em>commit</em>).</p>
<p>Mercurial, étant distribué, fonctionne de façon légèrement différente. Lorsqu&#8217;un utilisateur va chercher les fichiers, il va en fait faire une <strong>copie entière</strong> du <em>repository</em>. Le scénario classique est qu&#8217;un utilisateur va chercher les fichiers sur le serveur (<em>clone</em>), fait ses modifications et les &laquo;&nbsp;commet&nbsp;&raquo; (<em>commit</em>) <strong>seulement dans son <em>repository</em> local</strong>. Ensuite, il peut envoyer ses changement dans le <em>repository</em> d&#8217;où il a pris ses fichiers (<em>push</em>).</p>
<p>Avec Mercurial, on ne fait pas un <em>checkout</em> et un <em>commit</em>. On fait une branche (<em>clone</em>), et on la <em>merge</em> (<em>push</em>) après avoir fait un ou des changements (<em>commit</em>). Ça comporte plusieurs avantages pour certains types de projets, mais je n&#8217;en parlerai pas dans cet article.</p>
<h3>Dossier .hg vs dossiers .svn</h3>
<p>Subversion utilise plusieurs dossiers <code>.svn</code>. Lorsque vous travaillez dans votre <em>checkout</em>, il y a un dossier <code>.svn</code> par dossier ou sous-dossier de votre projet. Ils ne sont (supposément) pas très nuisibles.</p>
<p>Par contre, j&#8217;ai souvent fait face à un problème avec ces dossiers. Un client me dit qu&#8217;il veut avoir les fichiers pour montrer à son propre client. Il veut les avoir par FTP. La méthode idéale serait simplement de lui envoyer mon dossier de travail. Par contre, mon dossier de travail est infesté de <code>.svn</code>! Non seulement ces fichiers n&#8217;ont pas d&#8217;affaires là, mais imaginez le temps que ça prendrait mettre tout ces petits dossier en ligne! Croyez-moi, c&#8217;est trop long.</p>
<p>Je pourrais supprimer les dossiers <code>.svn</code> de tout mon projet avec un tour de passe-passe <em>bash</em>:</p>
<pre><code>find ./ -name ".svn" | xargs rm -Rf</code></pre>
<p>Mais faire ça &laquo;&nbsp;détruirait&nbsp;&raquo; mon <em>checkout</em>. J&#8217;aurais besoin de faire un autre <em>checkout</em> avant de continuer à travailler. Je pourrais faire une copie de mon dossier et faire cette commande sur ma copie. Mais copier tous ces sous-dossiers prend parfois bien du temps!</p>
<p>Je pourrais aussi (la solution que j&#8217;utilisais) faire un <code>export</code> à partir de mon <em>repository</em>. Il y a quelques points tannants avec cette méthode. Premièrement, Subversion est plutôt lent pour faire un <code>export</code> ou un <code>checkout</code>. Surtout que certains projets deviennent pesant assez rapidement avec les fichiers Flash et toutes les images (les PNG 24-bits ça monte vite!). Deuxièmement, lorsque le client me demande d&#8217;avoir les fichiers, j&#8217;ai parfois fait certaines modifications que je n&#8217;ai pas encore envoyées dans le <em>repository</em>. Je dois donc en premier faire un <code>commit</code> et ensuite je peux faire le <code>export</code>. Troisième chose, lorsque j&#8217;ai terminé d&#8217;envoyer les fichiers à mon client, je dois supprimer le dossier que je viens de créer. Pas grand chose vous direz, mais c&#8217;est quand même une étape de plus, qui n&#8217;a pas sa place à mon avis.</p>
<p>Mercurial, lui, ne parsème pas ses dossiers un peu partout au travers du répertoire de travail. Il n&#8217;y a qu&#8217;un dossier <code>.hg</code> à la racine du <em>repository</em> (rappelez-vous que le dossier de travail est un <em>repository</em> en soit). Donc, tous les problèmes énoncés ci-haut disparaissent. Je peux directement envoyer mon répertoire de travail, en prenant la peine de désélectionner le dossier <code>.hg</code> (et les autres fichiers, s&#8217;il y a lieu, comme <code>.hgignore</code>).</p>
<h3>Commit local</h3>
<p>Avec Subversion, lorsqu&#8217;on fait un <code>commit</code>, on envoie les modifications au serveur, car c&#8217;est lui qui contient le <em>repository</em>. Avec Mercurial, lorsqu&#8217;on fait un <code>commit</code>, il n&#8217;y a aucune utilisation du réseau. Le <em>repository</em> est local. On peut donc faire plusieurs <code>commit</code> sans envoyer les modifications au <em>repository</em> où on a pris les fichiers. Lorsqu&#8217;on est prêt, on <code>push</code> les <code>commit</code> qu&#8217;on a fait.</p>
<h3>Vitesse</h3>
<p>Je ne peux pas garantir que Mercurial est plus rapide que Subversion, mais je dois avouer que je trouve l&#8217;expérience beaucoup plus fluide avec Mercurial qu&#8217;avec Subversion.</p>
<h3>Facilité</h3>
<p>J&#8217;avais jeté un oeil rapidement à Git il y a quelque temps, mais je ne m&#8217;y était pas attardé. La première impression que j&#8217;avais eu était que ça semblait compliqué. Comme les projets sur lesquels je travaille ne profitent pas vraiment du fait que ce soit extrêmement facile de brancher-<em>merger</em> avec les systèmes distribués, j&#8217;avais simplement laissé Git de côté. Je n&#8217;étais peut-être pas dû pour changer de système à ce moment&hellip;</p>
<p>Par contre, lorsque j&#8217;ai essayé (et maintenant adopté) Mercurial, j&#8217;ai eu une toute autre impression! Il est facile à comprendre et, à mon avis, bien conçu. La courbe d&#8217;apprentissage est très légère.</p>
<h3>Ajout de fichiers</h3>
<p>Avec Subversion, il faut ajouter les fichiers un par un. Encore une fois, ce serait sûrement possible de faire un tour de passe-passe avec <code>grep</code>, mais ça serait plutôt tannant. Si on crée 8 nouveau fichiers, il faut ajouter les 8 fichiers un après l&#8217;autre.</p>
<p>Avec Mercurial, la même commande (<code>add</code>) ajoute tous les nouveaux fichiers. Pas de perte de temps. Si on veut ne pas ajouter certains fichiers (exemple: ceux se terminant avec ~), il suffit de se faire un fichier <code>.hgignore</code> dans la racine de notre projet, et le tour est joué.</p>
<h3>Hébergement</h3>
<p>Premièrement, de la façon dont est conçu Mercurial, il est beaucoup plus facile de ne simplement pas utiliser d&#8217;hébergeur. On se fait un <em>repository</em> avec <code>hg init mon_projet</code> et on peut déjà commencer à travailler dans le dossier! Pas besoin de faire un <code>checkout</code> et de travailler dans le dossier du <em>checkout</em>.</p>
<p>Ensuite, comme Subversion, on peut simplement fonctionner par SSH (si vous avez accès à un autre ordinateur/serveur par SSH). <code>hg push ssh://user@example.com/chemin/vers/repo</code>. C&#8217;est simple et rapide.</p>
<p>Vous pouvez aussi configurer Mercurial pour fonctionner par HTTP si votre projet a un peu d&#8217;envergure. Par contre, ce n&#8217;est probablement pas la solution idéale si vous faites parti d&#8217;une petite compagnie qui travaille sur plusieurs petits projets.</p>
<p>Sinon, il y a un certain nombre d&#8217;hébergeur. Le plus gros est probablement <a href="http://bitbucket.org">bitbucket</a>. Ils offrent l&#8217;hébergement gratuit pour les projets <code>open source</code>, mais aussi de l&#8217;hébergement privé. Ils sont un peu le <a href="http://github.com/">GitHub</a> de Mercurial.</p>
<h3>Essayez-le!</h3>
<p>Tout ça pour vous dire que ça vaut la peine de l&#8217;essayer! Si vous avez peur du <em>command-line</em>, je crois qu&#8217;il y a même des GUI plutôt bien faits pour Windows, OS X et Linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2009/controle-de-version-avec-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Environnement de développement web: Serveurs Virtuels</title>
		<link>http://www.hooba.ca/blog/2009/environnement-de-developpement-web-serveurs-virtuels/</link>
		<comments>http://www.hooba.ca/blog/2009/environnement-de-developpement-web-serveurs-virtuels/#comments</comments>
		<pubDate>Fri, 01 May 2009 00:37:38 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Environnement]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=320</guid>
		<description><![CDATA[Il y a quelques mois, je vous montrais comment installer un environnement de développement web de base sous Ubuntu.
Aujourd&#8217;hui je continue là où je vous avais laissé, c&#8217;est-à-dire: vous venez d&#8217;installer Apache, MySQL, PHP et phpMyAdmin et avez vérifié que le tout fonctionnait bien. Votre dossier web est /var/www. Le but de l&#8217;article d&#8217;aujourd&#8217;hui est [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques mois, je vous montrais <a href="http://www.hooba.ca/blog/2008/comment-se-creer-un-environnement-de-developpement-web/">comment installer un environnement de développement web</a> de base sous Ubuntu.</p>
<p>Aujourd&#8217;hui je continue là où je vous avais laissé, c&#8217;est-à-dire: vous venez d&#8217;installer Apache, MySQL, PHP et phpMyAdmin et avez vérifié que le tout fonctionnait bien. Votre dossier web est <code>/var/www</code>. Le but de l&#8217;article d&#8217;aujourd&#8217;hui est de vous permettre d&#8217;utiliser un autre dossier. En fait, vous pourrez utiliser un dossier différent pour chaque projet et y accéder avec des noms de domaines différents. Je vous introduis donc aux serveurs virtuels.<span id="more-320"></span></p>
<h3>Serveurs virtuels</h3>
<p>Un serveur virtuel, c&#8217;est quoi? C&#8217;est ce qui permet à Apache de servir plusieurs domaines ou sous-domaines à partir du même serveur. Par exemple, Apache peut servir <code>www.example.com</code> et <code>blog.example.com</code> en même temps. Chacun ayant son propre serveur virtuel.</p>
<h3>Le dossier d&#8217;Apache</h3>
<p>Tout d&#8217;abord, dans le dossier de configuration d&#8217;Apache, <code>/etc/apache2</code>, il y a, entre autres, les dossiers <code>sites-available</code> et <code>sites-enabled</code>.</p>
<p>Le dossier <code>sites-available</code> contient tous les fichiers de configurations de vos sites web. Pour l&#8217;instant, il n&#8217;en contient qu&#8217;un seul: <code>default</code>, qui dirige vers le dossier <code>/var/www</code>. Nous partirons de ce <code>default</code> pour se créer d&#8217;autres serveurs virtuels.</p>
<p>Le dossier <code>sites-enabled</code> contient des <em>symlinks</em> vers les fichiers de configurations contenus dans <code>sites-available</code>. Ces <em>symlinks</em> existent uniquement lorsque ces sites sont actifs. Lorsqu&#8217;Apache s&#8217;initialise, il vérifie les fichier dans <code>sites-enabled</code>.</p>
<p>Pour activer ou désactiver un site, on utilise les commandes <code>a2ensite</code> et <code>a2dissite</code>.</p>
<h3>Créer un serveur virtuel</h3>
<p>On commence par aller dans le dossier où les fichiers de configuration se situent:</p>
<pre><code>cd /etc/apache2/sites-available</code></pre>
<p>Ensuite, on se fait une copie du fichier <code>default</code> pour notre premier projet:</p>
<pre><code>sudo cp default projetun</code></pre>
<p>Et on modifie le nouveau fichier:</p>
<pre><code>sudo gedit projetun</code></pre>
<p>Première chose à modifier, c&#8217;est le <code>DocumentRoot</code>, c&#8217;est à dire, le dossier racine à partir duquel Apache va servir les pages pour ce site web. J&#8217;utilise générallement un dossier dans mon <em>home</em>. Quelque chose comme <code>/home/hooba/web/projetun/htdocs</code>. Remplacez donc <code>/var/www</code> par le dossier de votre choix pour ce projet. Remplacez aussi le nom du dossier dans la configuration du dossier en tant que tel quelque lignes plus bas (<code>&lt;Directory /var/www/&gt;</code>).</p>
<p>Ensuite, on veut ajouter le nom de domaine du serveur virtuel. Par défaut, Apache utilisait <code>localhost</code>. Après l&#8217;ouverture du <em>tag</em> <code>VirtualHost</code>, ajoutez le nom du serveur que vous voulez utiliser avec <code>ServerName</code>. Par exemple: <code>ServerName projetun.dev</code>.</p>
<p>Le haut de votre fichier devrait donc ressembler à:</p>
<pre><code>&lt;VirtualHost *:80&gt;
	ServerAdmin webmaster@localhost
	ServerName projetun.dev
	DocumentRoot /home/hooba/web/projetun/htdocs
	&lt;Directory /&gt;
		Options FollowSymLinks
		AllowOverride None
	&lt;/Directory&gt;
	&lt;Directory /home/hooba/web/projetun/htdocs&gt;
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	&lt;/Directory&gt;
	# ...</code></pre>
<p>Vous pouvez donc sauvegarder le fichier et fermer gedit.</p>
<h3>Activer le serveur virtuel</h3>
<p>Vous avez maintenant un fichier de configuration prêt à être utilisé dans <code>sites-available</code>. Il faut maintenant laisser savoir Apache qu&#8217;il a un nouveau site à servir.</p>
<p>Pour commencer, aller créer un fichier index.html dans le dossier que vous avez spécifié à l&#8217;étape précédente. Un fichier très simple suffira. Par exemple:</p>
<pre><code>&lt;html&gt;&lt;body&gt;
&lt;h1&gt;Tadam!&lt;/h1&gt;
&lt;/body&gt;&lt;/html&gt;</code></pre>
<p>Si vous allez à <code>http://projetun.dev/</code>, vous devriez avoir une erreur du genre &laquo;&nbsp;Serveur introuvable&nbsp;&raquo;. C&#8217;est, en premier lieu, parce qu&#8217;Apache n&#8217;est pas au courant qu&#8217;il doit servir quelque chose à partir de cette URL. On va donc l&#8217;avertir qu&#8217;il y a un nouveau site:</p>
<pre><code>sudo a2ensite projetun</code></pre>
<p>Cette commande crée le <em>symlink</em> nécessaire dans le dossier <code>sites-enabled</code>. Si vous n&#8217;utilisez pas le site <code>default</code>, vous pouvez égallement en profiter pour le désactiver avec:</p>
<pre><code>sudo a2dissite default</code></pre>
<p>Lorsque vous avez fait les modifications nécessaires, vous pouvez dire au <em>daemon</em> Apache qu&#8217;il doit recharger sa configuration:</p>
<pre><code>sudo /etc/init.d/apache2 reload</code></pre>
<h3>Hosts</h3>
<p>Si vous allez à l&#8217;adresse <code>http://projetun.dev/</code>, vous aurez la même erreur que tout à l&#8217;heure. La raison, c&#8217;est que votre navigateur demande à des serveurs DNS &laquo;&nbsp;à quelle adresse IP dois-je faire ma requête pour le domaine <code>projetun.dev</code>?&nbsp;&raquo;. Comme ces serveurs ne sont pas au courant que vous venez de créer un serveur virtuel, il faut empêcher la demande d&#8217;avoir lieu et spécifier immédiatement à quel ordinateur (à quelle adresse IP) on doit faire la requête.</p>
<p>Heureusement, c&#8217;est plutôt simple. Il suffit d&#8217;ajouter une ligne dans le fichier <code>hosts</code>. Il se situe dans le dossier <code>/etc</code>.</p>
<pre><code>sudo gedit /etc/hosts</code></pre>
<p>Ajoutez simplement une ligne à la fin qui indique votre adresse IP, ainsi que le domaine que vous venez de créer. L&#8217;adresse 127.0.0.1 correspond toujours à l&#8217;ordinateur sur lequel s&#8217;exécute le code. La ligne ajouté ressemblera donc à:</p>
<pre><code>127.0.0.1	projetun.dev</code></pre>
<p>Sauvegardez le fichier et quittez gedit.</p>
<h3>Un serveur virtuel fonctionnel</h3>
<p>Si vous avez bien suivi les étapes, lorsque vous allez à l&#8217;adresse <code>http://projetun.dev/</code> vous devriez voir le contenu du fichier <code>index.html</code> que vous avez créé tout à l&#8217;heure. Vous pouvez donc répéter l&#8217;opération pour chacun de vos projets.</p>
<p>Si ça ne fonctionne pas, voici quelques pistes afin de trouver votre problème: avez vous réinitialiser Apache (<code>sudo /etc/init.d/apache2 reload</code>)? Vous pouvez peut-être essayer de le redémarrer au complet avec <code>sudo /etc/init.d/apache2 restart</code>. Est-ce qu&#8217;Apache a les droits nécessaires pour accéder au dossier que vous avez spécifié? Est-ce que le fichier <code>projetun</code> existe bel et bien dans <code>/etc/apache2/sites-enabled</code>? Sinon, il faudrait simplement activer le site avec <code>sudo a2ensite projetun</code>. Si le fichier n&#8217;apparrait pas (ce n&#8217;est pas supposé), vous pourriez toujours essayer de directement faire un <em>symlink</em> vers le fichier dans <code>sites-available</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2009/environnement-de-developpement-web-serveurs-virtuels/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hébergement gratuit de Subversion</title>
		<link>http://www.hooba.ca/blog/2008/hebergement-gratuit-de-subversion/</link>
		<comments>http://www.hooba.ca/blog/2008/hebergement-gratuit-de-subversion/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 16:46:06 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[Environnement]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=240</guid>
		<description><![CDATA[Pour ceux qui ne connaissent pas Subversion (aussi souvent appelé svn), c&#8217;est un logiciel de contrôle de versions. C&#8217;est extrêmement pratique pour le développement web.
Logiciel de contrôle de version
Concrètement, ce que ça apporte, c&#8217;est de pouvoir toujours modifier notre code sans avoir à se soucier de briser &#171;&#160;pour toujours&#160;&#187; notre programme. Le fonctionnement de base, [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ne connaissent pas <strong>Subversion</strong> (aussi souvent appelé <strong>svn</strong>), c&#8217;est un logiciel de contrôle de versions. C&#8217;est extrêmement pratique pour le développement web.</p>
<h3>Logiciel de contrôle de version</h3>
<p>Concrètement, ce que ça apporte, c&#8217;est de pouvoir toujours modifier notre code sans avoir à se soucier de briser &laquo;&nbsp;pour toujours&nbsp;&raquo; notre programme. Le fonctionnement de base, c&#8217;est qu&#8217;on a nos fichier dans un <em>repository</em>. On les télécharge sur notre ordinateur (<em>checkout</em>) pour travailler dessus. Quand on est prêt, on fait un <em>commit</em>: ça met à jour notre <em>repository</em>. Si on continue à travailler sur nos fichier, et qu&#8217;on gaffe, on a qu&#8217;à reprendre les fichiers du <em>repository</em>.<span id="more-240"></span></p>
<p>Jusqu&#8217;à date, ça sonne comme un simple backup. Là où le logiciel de contrôle de version prend toute sa force, c&#8217;est qu&#8217;on a accès à tous les <em>commits</em> qu&#8217;on a fait dans le passé. Disons que ça fait 2 jours que je vais dans une direction et que je me rends compte que c&#8217;est complètement fou, je peux retourner à l&#8217;état où j&#8217;étais avant de m&#8217;aventurer dans cette branche, même si j&#8217;ai fait 2-3 <em>commits</em> depuis ce temps.</p>
<p>Il y a bien d&#8217;autres avantages, comme le travail en équipe, la taille TRÈS réduite (comparativement à tous les backups qu&#8217;on aurait à faire), les branches et <em>tags</em>.</p>
<h3>Subversion gratuit</h3>
<p>Subversion est un logiciel gratuit. Donc, si vous voulez, vous pouvez l&#8217;installer sur votre ordinateur (pour un accès local) ou sur votre serveur (pour y accéder de partout et avoir la possibilité de partager les <em>repositories</em>). Par contre, ce n&#8217;est pas tout le monde qui a accès à un serveur. Et même lorsqu&#8217;on y a accès, on ne veut pas toujours s&#8217;encombrer de ces fichiers.</p>
<p>Il y a donc quelques compagnies qui offrent l&#8217;hébergement gratuit. Entre autres, <a href="http://code.google.com/">Google Code</a> et <a href="http://sourceforge.net/">Sourceforge</a> offrent l&#8217;hébergement gratuit pour les projets <em>open source</em>. Pour les projets privés, les seuls que je connaissais offrent un seul <em>repository</em> gratuitement (il faut payer pour en avoir plus). Mais aujourd&#8217;hui, je suis tombé sur <a href="http://xp-dev.com/">xp-dev.com</a>.</p>
<h3>XP-Dev.com</h3>
<p>Ils offrent un nombre illimité de <em>repositories</em>, jusqu&#8217;à 1500Mo. Ils peuvent être <em>open source</em> ou privés (<em>closed source</em>). Ils offrent aussi une application web pour le suivi de projet, que je n&#8217;ai pas encore essayé. Tout ça est gratuit. Vous n&#8217;avez donc plus de raison de ne pas utiliser Subversion!</p>
<h3>En savoir plus</h3>
<p>Pour l&#8217;installer sous Ubuntu, vous n&#8217;avez qu&#8217;à entrer dans votre terminal:</p>
<pre><code>sudo apt-get install svn</code></pre>
<p>Sous Windows ou Mac OS X, je ne l&#8217;ai jamais installé, mais je sais qu&#8217;il existe des version GUI assez conviviales!</p>
<p>Pour plus de détails visitez ces pages:</p>
<ul>
<li><a href="http://subversion.tigris.org/">Site officiel de Subversion</a></li>
<li><a href="http://en.wikipedia.org/wiki/Subversion_(software)">Subversion sur Wikipedia</a></li>
<li><a href="http://svnbook.red-bean.com/">Livre gratuit sur Subversion</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/hebergement-gratuit-de-subversion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Comment se créer un environnement de développement web</title>
		<link>http://www.hooba.ca/blog/2008/comment-se-creer-un-environnement-de-developpement-web/</link>
		<comments>http://www.hooba.ca/blog/2008/comment-se-creer-un-environnement-de-developpement-web/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 23:32:56 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Environnement]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=57</guid>
		<description><![CDATA[Étant donné qu&#8217;Ubuntu 8.10 Intrepid Ibex est sorti la semaine dernière, j&#8217;ai décidé de vous montrer comment installer un serveur de développement dans ce système d&#8217;exploitation. C&#8217;est plutôt simple et pas très long. Je vais vous montrer la méthode GUI et la méthode terminal.
Méthode GUI

Allez dans le panel du haut. System &#8594; Administration &#8594; Synaptic [...]]]></description>
			<content:encoded><![CDATA[<p>Étant donné qu&#8217;Ubuntu 8.10 Intrepid Ibex est sorti la semaine dernière, j&#8217;ai décidé de vous montrer comment installer un serveur de développement dans ce système d&#8217;exploitation. C&#8217;est plutôt simple et pas très long. Je vais vous montrer la méthode GUI et la méthode terminal.<span id="more-57"></span></p>
<h3>Méthode GUI</h3>
<ol>
<li>Allez dans le <em>panel</em> du haut. <strong>System</strong> &rarr; <strong>Administration</strong> &rarr; <strong>Synaptic Package Manager</strong>. Vous devrez probablement entrer votre mot de passe.</li>
<li>Dans Synaptic Package Manager, dans la <em>toolbar</em>, cliquez sur le bouton <strong>Search</strong> (ou Edit &rarr; Search, ou Ctrl+F).</li>
<li>Faite une recherche avec <code>apache</code> comme mot-clé.</li>
<li>Dans la liste des résultats, avec le bouton de droit, cliquez sur <strong>apache2</strong> &rarr; <strong>Mark for Installation</strong>.</li>
<li>Une fenêtre de confirmation risque d&#8217;apparraître, avec les paquets nécessaires pour faire marcher Apache. C&#8217;est ce qu&#8217;on appelle les <em>dependencies</em>. Confirmez l&#8217;installation de ces paquets en cliquant sur <strong>Mark</strong>.</li>
<li>Faites une nouvelle recherche avec <code>mysql</code>.</li>
<li>Dans la liste, le paquet à installer est <strong>mysql-server</strong>. Le paquet d&#8217;en dessous, mysql-server-5.0, est celui qui installe la version 5.0 spécifiquement, tandis que le paquet mysql-server inclue toujours la version la plus récente (actuellement mysql-server-5.0). Présentement, on veut donc installer mysql-server.</li>
<li>Recherchez <code>php</code>.</li>
<li>Installez le paquet <strong>php5</strong>.</li>
<li>Recherchez <code>phpmyadmin</code> (un GUI pour MySQL à partir d&#8217;un browser).</li>
<li>Installez <strong>phpmyadmin</strong>.</li>
<li>Les paquets sont maintenant tous prêts à être installés. Dans la <em>toolbar</em>, cliquez sur <strong>Apply</strong>.
<li>Une fenêtre apparaît pour vous informer des paquets à être téléchargés et installés. Confirmez en cliquant sur <strong>Apply</strong>.</li>
<li>Les paquets seront téléchargés et installés.</li>
<li>MySQL vous demandera sans doute un mot de passe pour l&#8217;utilisateur <em>root</em>. Entrez un mot de passe que vous n&#8217;oublirez pas.</li>
<li>phpMyAdmin vous demandera peut-être pour quel serveur le configurer, choisissez apache2.</li>
</ol>
<h3>Méthode Terminal</h3>
<p>Si vous optez plutôt pour la méthode (plus rapide) avec le terminal, vous pouvez tout installer d&#8217;un coup avec la commande:</p>
<pre><code>sudo apt-get install apache2 mysql-server php5 phpmyadmin</code></pre>
<p>Comme vous le voyez, c&#8217;est beaucoup plus rapide. Vous auriez pu procéder individuellement avec <code>sudo apt-get install</code> suivit du nom du paquet que vous voulez installer.</p>
<p>Comme avec la méthode GUI, mysql-server devrait vous demander un mot de passe pour l&#8217;utilisateur <em>root</em>, et phpMyAdmin vous demandera pour quel serveur vous voulez le configurer (cochez apache2).</p>
<h3>Vérifications</h3>
<p>Alors, pour vérifier que tout fonctionne, ouvrez un browser à l&#8217;adresse <code>http://localhost/</code>. Vous devriez voir &laquo;&nbsp;It works!&nbsp;&raquo;. Ensuite, sur le browser d&#8217;un autre ordinateur sur le LAN, allez sur <code>http://192.168.0.4/</code> (remplacez l&#8217;adresse IP par l&#8217;adresse IP interne de votre nouveau serveur). Vous devriez voir la même page.</p>
<p>Question de sécurité, il serait également intelligent de vérifier que que votre routeur ne permet pas d&#8217;accéder à votre serveur à partir de l&#8217;extérieur de votre réseau. Pour une vérification simple, dans votre browser, allez à votre adresse IP externe. Si aucune page ne se charge, le tour est joué.</p>
<h3>La suite</h3>
<p>Le dossier dans lequel Apache va actuellement puiser est <code>/var/www/</code>. Vous êtes maintenant prêts à travailler sur la conception de votre prochain site internet. Dans un prochain article, je vous montrerai comment utiliser un autre dossier et comment gérer ses sites web en développement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/comment-se-creer-un-environnement-de-developpement-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
