<?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>noirbizarre.info &#187; Développement</title>
	<atom:link href="http://noirbizarre.info/category/developpement/feed/" rel="self" type="application/rss+xml" />
	<link>http://noirbizarre.info</link>
	<description>Encore un blog de GeeK</description>
	<lastBuildDate>Tue, 01 May 2012 13:16:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Developpement web local avec virtualbox</title>
		<link>http://noirbizarre.info/2012/05/01/developpement-web-local-avec-virtualbox/</link>
		<comments>http://noirbizarre.info/2012/05/01/developpement-web-local-avec-virtualbox/#comments</comments>
		<pubDate>Tue, 01 May 2012 13:16:48 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[private network]]></category>
		<category><![CDATA[vhost]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[virtualhost]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=402</guid>
		<description><![CDATA[Le développement web sur son poste local avec une configuration de test est classique. Seulement, il est nécessaire de pouvoir tester sa configuration en déploiement réel sur un serveur. Pour cela, j&#8217;utilise Virtualbox pour créer des serveurs virtuels (Debian en général) avec les contraintes suivantes: le serveur doit pouvoir accéder à internet simplement le serveur&#8230;]]></description>
			<content:encoded><![CDATA[<p>Le développement web sur son poste local avec une configuration de test est classique. Seulement, il est nécessaire de pouvoir tester sa configuration en déploiement réel sur un serveur.<br />
Pour cela, j&#8217;utilise Virtualbox pour créer des serveurs virtuels (Debian en général) avec les contraintes suivantes:</p>
<ul>
<li>le serveur doit pouvoir accéder à internet simplement</li>
<li>le serveur doit être accessible depuis mon poste de travail (ssh, http, &#8230;)</li>
<li>la configuration de virtualhosts doit être simple</li>
<li>aucune connection à internet ne doit être nécessaire pour accéder au serveur depuis son IP public</li>
</ul>
<p>Pour répondre à ces contraintes, je crée des machine virtuelles avec 2 interfaces:</p>
<ul>
<li>eth0 sur le NAT virtualbox</li>
<li>eth1 sur le réseau privé virtuel</li>
</ul>
<p>Il faut donc activer le réseau privé virtuel sous VirtualBox en cliquant sur &laquo;&nbsp;+&nbsp;&raquo; dans Fichiers &gt; Paramètres&#8230; &gt; Réseau:</p>
<p><a href="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-network-parameters.jpeg"><img class="aligncenter size-full wp-image-410" title="Paramètres réseau VirtualBox" src="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-network-parameters.jpeg" alt="Paramètres réseau VirtualBox" width="493" height="439" /></a></p>
<p>Une fois l&#8217;interface crée, il faut la configurer. Dans notre cas, le réseau est 192.168.77.0 et le serveur DHCP est désacttivé:</p>
<p><a href="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-private-network-paramater.jpeg"><img class="aligncenter size-full wp-image-411" title="Paramètres du réseau privé virtuel" src="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-private-network-paramater.jpeg" alt="Paramètres du réseau privé virtuel" width="467" height="257" /></a></p>
<p><a href="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-private-network-paramater-dhcp.jpeg"><img class="aligncenter size-full wp-image-412" title="Paramètres DHCP du réseau privé virtuel" src="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-private-network-paramater-dhcp.jpeg" alt="Paramètres DHCP du réseau privé virtuel" width="467" height="257" /></a></p>
<p>Maintenant que ce réseau existe, il fautconfigurer notre VM pour qu&#8217;elle utilise à la fois le NAT pour l&#8217;accès internet et le réseau privé virtuel pour l&#8217;IP public locale:</p>
<p style="text-align: center;"><a href="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-vm-eth0.jpeg"><img class="aligncenter  wp-image-414" title="Paramètres de l'interface eth0" src="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-vm-eth0.jpeg" alt="Paramètres de l'interface eth0" width="586" height="443" /></a></p>
<p style="text-align: center;"><a href="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-vm-eth1.jpeg"><img class="aligncenter  wp-image-413" title="Paramètres de l'interface eth1" src="http://noirbizarre.info/wp-content/uploads/2012/05/vbox-vm-eth1.jpeg" alt="Paramètres de l'interface eth1" width="586" height="443" /></a></p>
<p>Voici le fichier <tt>/etc/network/interfaces</tt> coorespondant sur la VM:</p>
<pre class="brush: bash; light: true; title: ; notranslate">

# The loopback network interface
auto lo
iface lo inet loopback

# The NATed network interface
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

# The public network interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
	address 192.168.77.2
	netmask 255.255.255.0
	network 192.168.77.0
	broadcast 192.168.77.255
</pre>
<p>Le point à noter: il ne faut pas déclarer de gateway pour l&#8217;interface eth1. Tout le traffic sortant (accès à internet ou au réseau local) se fait par l&#8217;interface eth0 configurée en DHCP sur le NAT Virtualbox.</p>
<p>Pour gérer mes virtualhosts, la configuration se fait à 2 niveaux:</p>
<ul>
<li>dans le fichier /etc/hosts de ma machine hôte:
<pre class="brush: bash; light: true; title: ; notranslate">192.168.77.2    vhost.dev</pre>
</li>
<li>dans le fichier /etc/hosts de ma machine virtuelle:
<pre class="brush: bash; light: true; title: ; notranslate">127.0.1.1    vhost.dev</pre>
</li>
</ul>
<p>Maintenant, cette machine virtuelle est accessible par vhost.dev, que ce soit par SSH ou HTTP, et ce avec ou sans connection internet disponible.</p>
<p>Pour faciliter, le démarrage et l&#8217;arrêt de la VM, je rajoute 2 alias dans mon fichier <tt>~/.bash_aliases</tt>:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
alias start-vm='VBoxHeadless --startvm &quot;my-vm&quot;&amp;'
alias stop-vm='VBoxManage controlvm &quot;my-vm&quot; poweroff'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2012/05/01/developpement-web-local-avec-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crypter ses mots de passe Maven</title>
		<link>http://noirbizarre.info/2012/02/18/crypter-ses-mots-de-passe-maven/</link>
		<comments>http://noirbizarre.info/2012/02/18/crypter-ses-mots-de-passe-maven/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 16:54:33 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=374</guid>
		<description><![CDATA[Lorsque l&#8217;on veut publier sur un dépôt maven, il faut fournir un identifiant et mot de passe que l&#8217;on peut stocker et crypter dans sont fichier ~/.m2/settings.xml tel qu&#8217;indiqué dans la documentation officielle. Malheureusement les commandes mvn --encrypt-master-password et mvn --encrypt-password demande d&#8217;inquer le mot de passe sur la ligne de commande ce qui est&#8230;]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on veut publier sur un dépôt maven, il faut fournir un identifiant et mot de passe que l&#8217;on peut stocker et crypter dans sont fichier <code>~/.m2/settings.xml</code> tel qu&#8217;indiqué dans la <a href="http://maven.apache.org/guides/mini/guide-encryption.html">documentation officielle</a>.</p>
<p>Malheureusement les commandes <code>mvn --encrypt-master-password</code> et <code>mvn --encrypt-password</code> demande d&#8217;inquer le mot de passe sur la ligne de commande ce qui est peu secure puisqu&#8217;il apparaitra dans l&#8217;historique du shell.</p>
<p>Pour contourner ce problème, il est possible de demander au shell de demander le mot de passe pour ne pas laisser de trace dans l&#8217;historique:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
read -p &quot;Password? &quot; pass; mvn --encrypt-master-password $pass
read -p &quot;Password? &quot; pass; mvn --encrypt-password $pass
</pre>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2012/02/18/crypter-ses-mots-de-passe-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Définir l’exécution par défaut d&#8217;un plugin maven</title>
		<link>http://noirbizarre.info/2011/10/03/definir-l%e2%80%99execution-par-defaut-dun-plugin-maven/</link>
		<comments>http://noirbizarre.info/2011/10/03/definir-l%e2%80%99execution-par-defaut-dun-plugin-maven/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 14:41:45 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=355</guid>
		<description><![CDATA[Avec Maven, il arrive souvent d&#8217;avoir à définir plusieurs exécutions d&#8217;un plugin pour différentes phases mais de vouloir en garder une par défaut (celle utilisée en ligne de commande). Depuis la version 2.2 de maven, le ticket MNG-3401 le permet en donnant l&#8217;identifiant d’exécution default-cli:]]></description>
			<content:encoded><![CDATA[<p>Avec Maven, il arrive souvent d&#8217;avoir à définir plusieurs exécutions d&#8217;un plugin pour différentes phases mais de vouloir en garder une par défaut (celle utilisée en ligne de commande).</p>
<p>Depuis la version 2.2 de maven, le ticket <a title="JIRA MNG-3401" href="http://jira.codehaus.org/browse/MNG-3401">MNG-3401</a> le permet en donnant l&#8217;identifiant d’exécution <code>default-cli</code>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;plugin&gt;
  &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;id&gt;default-cli&lt;/id&gt;
      &lt;configuration&gt;
        &lt;descriptorRefs&gt;
          &lt;descriptorRef&gt;jar-with-dependencies&lt;/descriptorRef&gt;
          &lt;descriptorRef&gt;project&lt;/descriptorRef&gt;
        &lt;/descriptorRefs&gt;
      &lt;/configuration&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
&lt;/plugin&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2011/10/03/definir-l%e2%80%99execution-par-defaut-dun-plugin-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eviter d&#8217;utiliser stage.addEventListener()</title>
		<link>http://noirbizarre.info/2011/08/03/eviter-dutiliser-stage-addeventlistener/</link>
		<comments>http://noirbizarre.info/2011/08/03/eviter-dutiliser-stage-addeventlistener/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 11:54:58 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[eventlistener]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[stage]]></category>
		<category><![CDATA[systemmanager]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=314</guid>
		<description><![CDATA[En Flex/ActionScript, il n&#8217;est pas rare de vouloir écouter un évènement au niveau le plus haut et de voir du code tel que: En effet, lors de l&#8217;inialisation des composants Flex, l&#8217;attribut stage n&#8217;est pas encore disponible. Pourtant, il est plus simple et plus propre d&#8217;utiliser SystemManager: Ce morceau de code ne plantera pas car&#8230;]]></description>
			<content:encoded><![CDATA[<p>En Flex/ActionScript, il n&#8217;est pas rare de vouloir écouter un évènement au niveau le plus haut et de voir du code tel que:</p>
<pre class="brush: as3; title: ; notranslate">
if (stage) {
	stage.addEventListener(MonEvent.MON_TYPE, _monHandler);
} else {
	this.addEventListener(Event.ADDED_TO_STAGE, function(e:Event):void{
		stage.addEventListener(MonEvent.MON_TYPE, _monHandler);
	});
}
</pre>
<p>En effet, lors de l&#8217;inialisation des composants Flex, l&#8217;attribut <code>stage</code> n&#8217;est pas encore disponible.</p>
<p>Pourtant, il est plus simple et plus propre d&#8217;utiliser <code><a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/SystemManager.html" title="SystemManager" target="_blank">SystemManager</a></code>:</p>
<pre class="brush: as3; title: ; notranslate">
systemManager.addEventListener(MonEvent.MON_TYPE, _monHandler);
</pre>
<p>Ce morceau de code ne plantera pas car <code>systemManager</code> est initilisé dès le lancement de l&#8217;application et est toujours présent dans les composants, contrairement à <code>stage</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2011/08/03/eviter-dutiliser-stage-addeventlistener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java et proxy HTTP</title>
		<link>http://noirbizarre.info/2011/04/06/java-et-proxy-http/</link>
		<comments>http://noirbizarre.info/2011/04/06/java-et-proxy-http/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 07:22:59 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Mémentos]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=297</guid>
		<description><![CDATA[Comment faire en sorte qu&#8217;une application Java passe par un proxy HTTP (comme c&#8217;est souvent le cas en entreprise) ? Il faut le spécifier dans les options de la JVM à l&#8217;execution! On me pose souvent la question et même si je connais la réponse, je doit toujours la rechercher pour être sur de la&#8230;]]></description>
			<content:encoded><![CDATA[<p>Comment faire en sorte qu&#8217;une application Java passe par un proxy HTTP (comme c&#8217;est souvent le cas en entreprise) ?<br />
Il faut le spécifier dans les options de la JVM à l&#8217;execution!<br />
On me pose souvent la question et même si je connais la réponse, je doit toujours la rechercher pour être sur de la syntaxe.<br />
Les options à passer sont:</p>
<ul>
<li><code>http.proxyHost</code> pour spécifier l&#8217;hôte</li>
<li><code>http.proxyPort</code> pour spécifier le port</li>
<li><code>http.proxyUser</code> pour spécifier le nom d&#8217;utilisateur (optionnel)</li>
<li><code>http.proxyPassword</code> pour spécifier le mot de passe (optionnel)</li>
</ul>
<p>Ce qui donnerai en ligne de commande pour un proxy dont l&#8217;url est http://user:password@proxy.maboite.com:8080</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ java -Dhttp.proxyHost=proxy.maboite.com -Dhttp.proxyPort=8080 -Dhttp.proxyUser=user -Dhttp.proxyPassword=password maClasse
</pre>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2011/04/06/java-et-proxy-http/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pip, virtualenv et virtualwrapper dans Cygwin</title>
		<link>http://noirbizarre.info/2010/12/10/pip-virtualenv-et-virtualwrapper-dans-cygwin/</link>
		<comments>http://noirbizarre.info/2010/12/10/pip-virtualenv-et-virtualwrapper-dans-cygwin/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 17:24:20 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Mémentos]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[pip]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://noirbizarre.info/?p=186</guid>
		<description><![CDATA[Voici la marche à suivre pour installer Python, pip, virtualenv et virtualenvwrapper dans Cygwin (version 1.7.7-1 à ce jour). Python doit être installé via l&#8217;installeur de Cygwin. Pour installer pip, nous allons utiliser easy_install qui est fourni par setuptools (version 0.6c11 au moment où j&#8217;écris ces lignes). Pour trouver la dernière version en date correspondant à notre&#8230;]]></description>
			<content:encoded><![CDATA[<p>Voici la marche à suivre pour installer Python, pip, virtualenv et virtualenvwrapper dans Cygwin (version 1.7.7-1 à ce jour).</p>
<p>Python doit être installé via l&#8217;installeur de Cygwin.</p>
<p>Pour installer pip, nous allons utiliser easy_install qui est fourni par setuptools (version 0.6c11 au moment où j&#8217;écris ces lignes). Pour trouver la dernière version en date correspondant à notre version de Python (version 2.6.5 fournie par Cygwin), il faut se rendre sur <a href="http://pypi.python.org/pypi/setuptools#files">la page officielle</a>.</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
~$ sh setuptools-0.6c11-py2.6.egg
~$ easy_install pip
</pre>
<p>Une fois pip installé, il suffit de l&#8217;utiliser pour installer virtualenv et virtualenvwrapper</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ pip install virtualenv virtualenvwrapper</pre>
<p>On configure notre environnement dans .bashrc:</p>
<pre class="brush: bash; title: ~/.bashrc: declaration de l&#039;environnement; notranslate">
# Python pip / virtualenv / virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
source /usr/bin/virtualenvwrapper.sh
</pre>
<p>Ensuite, tout fonctionne comme dans <a href="http://noirbizarre.info/2010/07/10/pip-virtualenv-et-pydev/">cet article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2010/12/10/pip-virtualenv-et-virtualwrapper-dans-cygwin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git: l&#8217;essentiel</title>
		<link>http://noirbizarre.info/2010/12/06/git-lessentiel/</link>
		<comments>http://noirbizarre.info/2010/12/06/git-lessentiel/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 16:23:53 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Mémentos]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.noirbizarre.info/?p=10</guid>
		<description><![CDATA[Git est un scm qu&#8217;on ne présente plus. Bien que très pratique il peut se révéler très compliqué à utiliser. Les commandes de base Voici les commandes que j&#8217;utilise le plus: git commit : publie localement les changements. git checkout myBranch : change la branche courante pour myBranch. git checkout -b myNewBranch : crée la branche myNewBranch&#8230;]]></description>
			<content:encoded><![CDATA[<p>Git est un scm qu&#8217;on ne présente plus. Bien que très pratique il peut se révéler très compliqué à utiliser.</p>
<h3>Les commandes de base</h3>
<p>Voici les commandes que j&#8217;utilise le plus:</p>
<ul>
<li><strong>git commit</strong> : publie localement les changements.</li>
<li><strong>git checkout myBranch</strong> : change la branche courante pour myBranch.</li>
<li><strong>git checkout -b myNewBranch</strong> : crée la branche myNewBranch et la définie comme branche active.</li>
<li><strong>git branch</strong> : liste les branches locales.</li>
<li><strong>git branch -a</strong> : liste toutes les branches.</li>
<li><strong>git status</strong> : liste tous les changements non publiés.</li>
<li><strong>git stash</strong> :  met de côté tous les changements effectués depuis le dernier commit.</li>
<li><strong>git stash apply</strong> : restaure les changement mis de côté avec git stash.</li>
<li><strong>git log -n</strong> : liste les n derniers commits.</li>
</ul>
<h3>Le fichier ~/.gitconfig</h3>
<p>git gère 3 niveaux de configuration:</p>
<ol>
<li>Le niveau système dans <code>/etc/gitconfig</code> qui s&#8217;applique à tous les utilisateurs</li>
<li>Le niveau global dans <code>~/.gitconfig</code> qui s&#8217;applique à l&#8217;utilisateur courant</li>
<li>Le niveau dépôt dans <code>$GIT_REPO/.git/config</code> qui s&#8217;applique uniquement au repository courant</li>
</ol>
<p>Celui qui nous intéresse en l’occurrence est le niveau global.</p>
<p>Pour commencer, il va contenir la section user permettant de nous identifier:</p>
<pre class="brush: plain; title: ~/.gitconfig; notranslate">
[user]
name = Axel H.
email = noirbizarre@gmail.com
</pre>
<p>Pour certains projet, il pourra être intéressant de modifier ces informations d&#8217;identification.</p>
<p>Ces informations pourront être spécifiées directement depuis le shell:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ git config --global user.name &quot;Axel H.&quot;
~$ git config --global user.email noirbizarre@gmail.com
</pre>
<p>D&#8217;autres options pourront être ajoutées, telle que la coloration:</p>
<pre class="brush: plain; title: ~/.gitconfig; notranslate">
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = true
pager = true
</pre>
<p>ou encore des alias:</p>
<pre class="brush: plain; title: ~/.gitconfig; notranslate">
[alias]
co = checkout
ci = commit
st = status
br = branch
</pre>
<p>Avec ces alias on pourra tapper:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ git co mabranch
~$ git ci -m &quot;Mon commentaire&quot;
~$ git st
</pre>
<p>Il est possible de trouver énormément d&#8217;options à rajouter dans <code>~/.gitconfig</code> sur la web, notemment sur <a href="http://stackoverflow.com/">StackOverflow</a>, et particulièrement <a href="http://stackoverflow.com/questions/267761/what-does-your-gitconfig-contain">ce thread</a>.</p>
<p>Comme d&#8217;habitude, pas de secrets, tout est dans le <a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html">man</a>.</p>
<h3>Le fichier .gitignore</h3>
<p>Le fichier .gitignore permet de spécifier une liste de fichiers qui ne seront jamais pris en compte par git.</p>
<p>Je ne referais pas la documentation officielle, mais ce qu&#8217;il faut retenir c&#8217;est:</p>
<ul>
<li>Les lignes commençant par # sont des commentaires</li>
<li>le ! permet de prendre la négation d&#8217;un pattern</li>
<li>le / en début de pattern spécifie la racine par rapport au fichier .gitignore</li>
<li>le / en fin de pattern spécifie un répertoire et tous ses sous répertoires</li>
<li>tous les <a href="http://en.wikipedia.org/wiki/Glob_(programming)">shell glob patterns</a> sont pris en charge</li>
</ul>
<p>Pour une documentation complète sur gitignore, la <a href="http://www.kernel.org/pub/software/scm/git/docs/gitignore.html">page man</a> reste la référence.</p>
<p>Il est possible de spécifier un .gitignore global, par exemple:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ echo &quot;*~&quot; &gt;&gt; ~/.gitignore
~$ echo &quot;*.swp&quot; &gt;&gt; ~/.gitignore
~$ echo &quot;*.pyc&quot; &gt;&gt; ~/.gitignore
~$ git config --global core.excludesfile ~/.gitignore
</pre>
<p>Cela permet d&#8217;éviter de ressaisir les fichiers qui sont toujours à exclure de git (fichiers temporaires, produits de compilation, &#8230;.).</p>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2010/12/06/git-lessentiel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pip, virtualenv, virtualenvwrapper et pydev</title>
		<link>http://noirbizarre.info/2010/07/10/pip-virtualenv-et-pydev/</link>
		<comments>http://noirbizarre.info/2010/07/10/pip-virtualenv-et-pydev/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 18:51:44 +0000</pubDate>
		<dc:creator>noirbizarre</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[pip]]></category>
		<category><![CDATA[pydev]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://www.noirbizarre.info/?p=35</guid>
		<description><![CDATA[L&#8217;une des difficultés majeures du développement aujourd&#8217;hui est la gestion des dépendances et en particulier pour Python l&#8217;isolement de l&#8217;environnement de développement. Pour résoudre ce problème, nous allons utiliser : pip: un remplaçant d&#8217;easy_install bien plus complet. virtualenv: permet d&#8217;instancier des environnements python isolés. virtualenvwrapper: facilite l&#8217;utilisation de virtualenv ﻿Installation des outils de développement Si ce n&#8217;est déjà fait,&#8230;]]></description>
			<content:encoded><![CDATA[<p>L&#8217;une des difficultés majeures du développement aujourd&#8217;hui est la gestion des dépendances et en particulier pour Python l&#8217;isolement de l&#8217;environnement de développement.</p>
<p>Pour résoudre ce problème, nous allons utiliser :</p>
<ul>
<li><a title="pip" href="http://pip.openplans.org/">pip</a>: un remplaçant d&#8217;easy_install bien plus complet.</li>
<li><a title="virtualenv" href="http://virtualenv.openplans.org/">virtualenv</a>: permet d&#8217;instancier des environnements python isolés.</li>
<li><a href="http://www.doughellmann.com/projects/virtualenvwrapper/">virtualenvwrapper</a>: facilite l&#8217;utilisation de virtualenv</li>
</ul>
<h3>﻿Installation des outils de développement</h3>
<p>Si ce n&#8217;est déjà fait, il faut installer un environnement de développement python classique:</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ sudo aptitude install python-setuptools python-dev build-essential</pre>
<p>Nous installons la dernière version de pip:</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ sudo easy_install pip</pre>
<p>Puis nous installons virtualenv et virtualenvwrapper</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ sudo pip install virtualenv virtualenvwrapper</pre>
<p>Il faut maintenant configurer notre environnement en ajoutant au fichier ~/.bahrc</p>
<pre class="brush: bash; title: ~/.bashrc: déclaration de l&#039;environnement; notranslate">
# Python pip / virtualenv / virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
source /usr/local/bin/virtualenvwrapper.sh
</pre>
<p>Puis nous initialisons l&#8217;environnement:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ mkdir ~/.virtualenvs
~$ source ~/.bashrc
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/initialize
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/preactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/get_env_details
</pre>
<p>Nous sommes maintenant prêts à instancier notre premier environnement.</p>
<h3>Création d&#8217;un environnement isolé</h3>
<p>Il suffit maintenant d&#8217;utiliser la commande <strong>mkvirtualenv</strong>.</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ mkvirtualenv --no-site-packages myenv
New python executable in myenv/bin/python
Installing setuptools............done.
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/predeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/postdeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/preactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/postactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/get_env_details
(myenv)~$
</pre>
<p>L&#8217;option <strong>&#8211;no-site-packages</strong> permet d&#8217;avoir une installation de python nue, c&#8217;est à dire sans aucune des dépendances python ajoutées dans l&#8217;installation courante.</p>
<h3>Utilisation en ligne de commande</h3>
<p>Une fois l&#8217;environnement actif, le prompt du shell est préfixé par &laquo;&nbsp;(nom de l&#8217;environnement)&nbsp;&raquo;.</p>
<p>Pour désactiver l&#8217;environnement, il suffit d&#8217;executer:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
(myenv)~$ deactivate
~$
</pre>
<p>Pour réactiver l&#8217;environnement il suffit d&#8217;executer</p>
<pre class="brush: plain; light: true; title: ; notranslate">
~$ workon myenv
(myenv)~$
</pre>
<p>La liste complète des commandes de virtualenvwrapper est disponible <a href="http://www.doughellmann.com/docs/virtualenvwrapper/command_ref.html">ici</a>.</p>
<h3>Utilisation dans Eclipse/Pydev</h3>
<p>Pour utiliser cet environnement dans eclipse avec Pydev il suffit d&#8217;aller dans <strong>Preferences &gt; Pydev &gt; Interpreter Python </strong>et d&#8217;ajouter l&#8217;executable python qui correspond, dans notre cas ﻿﻿﻿<strong>~/.virtualenvs/myenv/bin/python</strong>.</p>
<p><a href="http://www.noirbizarre.info/wp-content/uploads/2010/07/virtualenv_pydev_eclipse.png"><img class="alignnone size-medium wp-image-52" title="virtualenv_pydev_eclipse" src="http://www.noirbizarre.info/wp-content/uploads/2010/07/virtualenv_pydev_eclipse-300x241.png" alt="Configuration de l'executable python" width="300" height="241" /></a></p>
<p>Sur l&#8217;écran qui apparait ensuite, il ne faut selectionner que les chemin qui correspondent à notre environnement (ceux commençant par ﻿~<strong>/.virtualenvs/myenv/</strong><strong>).</strong></p>
<p><a href="http://www.noirbizarre.info/wp-content/uploads/2010/07/Selection-Needed.png"><img class="alignnone size-medium wp-image-53" title="Selection Needed" src="http://www.noirbizarre.info/wp-content/uploads/2010/07/Selection-Needed-300x268.png" alt="Sélection des chemins" width="300" height="268" /></a></p>
<p>L&#8217;environnement apparait ensuite dans la liste des environnement disponibles.</p>
<p><a href="http://www.noirbizarre.info/wp-content/uploads/2010/07/Preferences_env_pydev.png"><img class="alignnone size-medium wp-image-54" title="Preferences_env_pydev" src="http://www.noirbizarre.info/wp-content/uploads/2010/07/Preferences_env_pydev-300x242.png" alt="Préférences Pydev de l'interpreteur python" width="300" height="242" /></a></p>
<p>Il suffit ensuite de le sélectionner dans les préférences des projets concernés.</p>
<p><a href="http://www.noirbizarre.info/wp-content/uploads/2010/07/myproject_pydev_interpreter.png"><img class="alignnone size-medium wp-image-55" title="myproject_pydev_interpreter" src="http://www.noirbizarre.info/wp-content/uploads/2010/07/myproject_pydev_interpreter-300x221.png" alt="Sélection de l'interpréteur python d'un projet" width="300" height="221" /></a></p>
<h3>Utilisation de pip</h3>
<p>Lorsque l&#8217;environnement est actif, pip s&#8217;utilise comme apt/aptitude.</p>
<pre class="brush: plain; light: true; title: ; notranslate">
# Recherche de paquets
(myenv)~$ pip search mypackage

# Installation d'un paquet
(myenv)~$ pip install mypackage
</pre>
<p>Lorsque l&#8217;environnement est inactif, il est possible de specifier à pip un environnement pour l&#8217;installation avec l&#8217;option -E:</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ pip install -E myenv mypackage</pre>
<p>Il est possible de dumper tous les modules installé dans un fichier:</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ pip freeze &gt; requirements</pre>
<p>Puis de les recharger d&#8217;un coup dans un autre environnement:</p>
<pre class="brush: plain; light: true; title: ; notranslate">~$ pip install -r requirements</pre>
<p>Pour plus de détails sur l&#8217;utilisation de pip, la <a href="http://pip.openplans.org/">page officielle</a> fait office de documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://noirbizarre.info/2010/07/10/pip-virtualenv-et-pydev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

