<?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>Stlenn</title>
	<atom:link href="https://blog.developpez.com/stlenn/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/stlenn</link>
	<description>Blog de Pierre-Yves Le Dévéhat - Développeur d&#039;applications</description>
	<lastBuildDate>Fri, 26 Jul 2013 09:53:15 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Update et sélect imbriqués</title>
		<link>https://blog.developpez.com/stlenn/p12153/non-classe/update-et-select-imbriques</link>
		<comments>https://blog.developpez.com/stlenn/p12153/non-classe/update-et-select-imbriques#comments</comments>
		<pubDate>Fri, 26 Jul 2013 09:53:15 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=36</guid>
		<description><![CDATA[MySQL Offre une syntaxe particulière pour faire un UPDATEde champs d&#8217;une table sur la base des champs d&#8217;une autre table. Il s&#8217;agit de la suivante : UPDATE `table1` JOIN `table2` ON `table1`.`id` = `table2`.`id` SET `table1`.`champcible` = `table2`.`champorigine` Reste à &#8230; <a href="https://blog.developpez.com/stlenn/p12153/non-classe/update-et-select-imbriques">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>MySQL Offre une syntaxe particulière pour faire un UPDATEde champs d&rsquo;une table sur la base des champs d&rsquo;une autre table. Il s&rsquo;agit de la suivante :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">UPDATE `table1` JOIN `table2` ON `table1`.`id` = `table2`.`id` SET `table1`.`champcible` = `table2`.`champorigine`</div></div>
<p>Reste à rajouter une condition WHERE, sauf opération particulière (copie de champs d&rsquo;une table à l&rsquo;autre, avec nombre d’enregistrements identiques).</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloner simplement le contenu de votre répertoire web</title>
		<link>https://blog.developpez.com/stlenn/p12147/non-classe/cloner-simplement-le-contenu-de-votre-repertoire-web</link>
		<comments>https://blog.developpez.com/stlenn/p12147/non-classe/cloner-simplement-le-contenu-de-votre-repertoire-web#comments</comments>
		<pubDate>Wed, 24 Jul 2013 13:23:15 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=33</guid>
		<description><![CDATA[Envie de gérer votre site web avec Git ? C&#8217;est plus simple et plus efficace qu&#8217;avec FTP. Cette petite opération induit par contre d&#8217;avoir accès au serveur en tant qu&#8217;administrateur. 1. On crée le dépôt Git sur le serveur : &#8230; <a href="https://blog.developpez.com/stlenn/p12147/non-classe/cloner-simplement-le-contenu-de-votre-repertoire-web">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Envie de gérer votre site web avec Git ? C&rsquo;est plus simple et plus efficace qu&rsquo;avec FTP.</p>
<p>Cette petite opération induit par contre d&rsquo;avoir accès au serveur en tant qu&rsquo;administrateur.</p>
<p>1. On crée le dépôt Git sur le serveur :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/var/www/site-web# git init</div></div>
<p>2. On clone, sur son poste de développement, le contenu existant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/home/user/dev-web$ git clone ssh://root@162.36.2.45/var/www/site-web</div></div>
<p><em>La suite prochainement !</em></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interpréter les options d&#8217;une commande en Bash</title>
		<link>https://blog.developpez.com/stlenn/p12006/linux/bash/interpreter-les-options-dune-commande-en-bash</link>
		<comments>https://blog.developpez.com/stlenn/p12006/linux/bash/interpreter-les-options-dune-commande-en-bash#comments</comments>
		<pubDate>Thu, 30 May 2013 07:54:50 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Bash]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=27</guid>
		<description><![CDATA[Voici une petite trame de code permettant de construire un script Bash prenant des options de type &#8211;opt -R -odp. Ici, il s&#8217;agit, selon les options &#8211;help, &#8211;recursif, &#8211;class, &#8211;jar, &#8211;war et/ou selon leurs versions courtes -hRcjw, de renseigner les &#8230; <a href="https://blog.developpez.com/stlenn/p12006/linux/bash/interpreter-les-options-dune-commande-en-bash">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Voici une petite trame de code permettant de construire un script Bash prenant des options de type &#8211;opt -R -odp.<br />
Ici, il s&rsquo;agit, selon les options &#8211;help, &#8211;recursif, &#8211;class, &#8211;jar, &#8211;war et/ou selon leurs versions courtes -hRcjw, de renseigner les variables $RECURSIF, $RES, $CLASS, $JAR et $WAR.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">let &quot;lim=$#+1&quot;<br />
<br />
while [ $OPTIND != $lim ]<br />
do<br />
<br />
<br />
&nbsp; &nbsp; # Traite une suite d'option, modifie les valeurs des variables correspondant en conséquence.<br />
&nbsp; &nbsp; while getopts &quot;hRcjw-:&quot; OPTION<br />
&nbsp; &nbsp; do<br />
&nbsp; &nbsp; &nbsp; &nbsp; # Si l'option est &quot;-&quot; c'est que l'option est de type --opt. Du coup, on isole la partie de OPTARG qui correspond au nom de l'option, c'est à dire ce qui est avant le &quot;=&quot; éventuel (et évidemment les &quot;--&quot; qui ne sont pas dans OPTARG). On teste sur cette base.<br />
&nbsp; &nbsp; &nbsp; &nbsp; # Dans ${OPTARG%%=*} on supprime la plus grande occurence de &quot;=*&quot; à partir de la fin de OPTARG.<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; [ $OPTION = &quot;-&quot; ] &amp;amp;&amp;amp; case &quot;${OPTARG%%=*}&quot; in <br />
&nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; help) OPTION=&quot;h&quot; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; recursif) OPTION=&quot;R&quot; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class) OPTION=&quot;c&quot; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jar) OPTION=&quot;j&quot; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; war) OPTION=&quot;w&quot; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Pour récupérer un vrai OPTARG au cas échéant :<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # OPTARG=&quot;${OPTARG#*=}&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # On supprime la plus petite occurence de &quot;*=&quot; à partir du début de OPTARG.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Pour résumer : avec la forme ${chaineXsous-chaine}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # X peut être de quatre formes :<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # &quot;%&quot; supprime la plus petite occurence de sous-chaine à partir de la fin de chaine.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # &quot;%%&quot; plus grande occurence à partir de la fin.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # &quot;#&quot; &nbsp;plus petite occurence à partir du début.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # &quot;##&quot; plus grande occurence à partir du début.<br />
&nbsp; &nbsp; &nbsp; &nbsp; esac<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; case $OPTION in<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; usage<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; R)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RECURSIF=true<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RES=$RES&quot; récursif&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CLASS=true<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RES=$RES&quot; class&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JAR=true<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RES=$RES&quot; jar&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; w)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WAR=true<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RES=$RES&quot; war&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ?)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; usage<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; esac&nbsp; &nbsp; <br />
&nbsp; &nbsp; done<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; let &quot;OPTIND++&quot;<br />
<br />
done</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation de Zope sous Fedora 16</title>
		<link>https://blog.developpez.com/stlenn/p12004/python/zope/installation-de-zope-sous-fedora-16</link>
		<comments>https://blog.developpez.com/stlenn/p12004/python/zope/installation-de-zope-sous-fedora-16#comments</comments>
		<pubDate>Wed, 29 May 2013 10:00:29 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Zope]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=20</guid>
		<description><![CDATA[Zope est un serveur d&#8217;applications web écrit en python, sous licence Zope Public License (ZPL). Zope n&#8217;a été dans les paquets de Fedora que dans les premières versions de la distribution, la raison invoquée étant l’obsolescence de la version de &#8230; <a href="https://blog.developpez.com/stlenn/p12004/python/zope/installation-de-zope-sous-fedora-16">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Zope est un serveur d&rsquo;applications web écrit en python, sous licence Zope Public License (ZPL).</p>
<p>Zope n&rsquo;a été dans les paquets de Fedora que dans les premières versions de la distribution, la raison invoquée étant l’obsolescence  de la version de python utilisée (2.4.3).</p>
<p>Il est tout de même possible d&rsquo;installer Zope à partir des sources et faire coexister la version de python requise avec celle déjà installée sur l&rsquo;OS.</p>
<p>On commencera par installer python 2.4.3 :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">wget http://www.python.org/ftp/python/2.4.3/Python-2.4.3.tgz<br />
tar zxvf Python-2.4.3.tgz<br />
cd Python-2.4.3/<br />
./configure<br />
make<br />
make install</div></div>
<p>On installe ensuite la dernière version de Zope (3.4.0) :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">wget http://download.zope.org/zope3.4/3.4.0/Zope-3.4.0.tgz<br />
tar zxvf Zope-3.4.0.tgz<br />
cd Zope-3.4.0/<br />
./configure<br />
make<br />
make install</div></div>
<p>La dernière commande a dû nous indiquer le répertoire d&rsquo;installation de Zope (si on ne l&rsquo;a pas précisé dans les options de ./ configure)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/bin/python install.py -q install --skip-build --home &quot;/usr/local/Zope-3.4.0&quot;</div></div>
<p>On lance donc</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/usr/local/Zope-3.4.0/bin/mkzopeinstance</div></div>
<p>L&rsquo;utilitaire nous demande quelques renseignements : le répertoire d&rsquo;installation de l&rsquo;instance de Zope, le nom d&rsquo;utilisateur pour l&rsquo;administrateur initial, le mode de stockage du mot de passe (texte, MD5 ou SHA1) et enfin le mot de passe.</p>
<p>On peut dès lors accéder à l&rsquo;interface d&rsquo;administration web du serveur : http://localhost:8080/manager</p>
<p>À suivre&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chronos, un petit chronomètre pour Android</title>
		<link>https://blog.developpez.com/stlenn/p12000/java/android/chronos-un-petit-chronometre-pour-android</link>
		<comments>https://blog.developpez.com/stlenn/p12000/java/android/chronos-un-petit-chronometre-pour-android#comments</comments>
		<pubDate>Tue, 28 May 2013 09:48:46 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=16</guid>
		<description><![CDATA[Une petite application perso développée pour Android en Juillet 2012. C&#8217;est sous licence GPL v3 et disponible à https://github.com/pyledevehat/chronos. Le fichier d&#8217;installation est ici.]]></description>
				<content:encoded><![CDATA[<p>Une petite application perso développée pour Android en Juillet 2012. C&rsquo;est sous licence GPL v3 et disponible à <a href="https://github.com/pyledevehat/chronos" target="_blank">https://github.com/pyledevehat/chronos</a>.</p>
<p>Le fichier d&rsquo;installation est <a href="https://github.com/pyledevehat/chronos/blob/master/bin/Chronos-release.apk">ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>À la découverte du Framework Play!</title>
		<link>https://blog.developpez.com/stlenn/p11999/java/play/a-la-decouverte-du-framework-play</link>
		<comments>https://blog.developpez.com/stlenn/p11999/java/play/a-la-decouverte-du-framework-play#comments</comments>
		<pubDate>Tue, 28 May 2013 08:46:42 +0000</pubDate>
		<dc:creator><![CDATA[Pierre-Yves Le Dévéhat]]></dc:creator>
				<category><![CDATA[Play! Framework]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/stlenn/?p=10</guid>
		<description><![CDATA[Je me lance à la découverte du Framework Java/Scala orienté web Play! (sous licence Apache 2). La documentation sur le site du projet est très didactique (se référer régulièrement à la javadoc est évidemment une bonne pratique qui permet de &#8230; <a href="https://blog.developpez.com/stlenn/p11999/java/play/a-la-decouverte-du-framework-play">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Je me lance à la découverte du Framework Java/Scala orienté web <em><a href="http://playframework.org/" target="_blank">Play!</a></em> (sous licence Apache 2). La documentation sur le site du projet est très didactique (se référer régulièrement à la javadoc est évidemment une bonne pratique qui permet de se faire une idée plus précise de l&rsquo;architecture du logiciel).</p>
<p>Il est proposé un tutoriel mettant en œuvre pas mal de fonctionnalités du framework dans une toute petite appli rapide à réaliser (on ne perd pas de temps).</p>
<p>Je posterai sans doute ici d&rsquo;autres articles à ce sujet, afin de partager mon expérience.</p>
<p>À noter : après la création d&rsquo;un projet (avec play new nomAppli) et un cd /chemin/monAppli, mes tentatives d&rsquo;ouvrir la console avec play se soldaient par :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Error occurred during initialization of VM<br />
Could not reserve enough space for object heap<br />
Error: Could not create the Java Virtual Machine.<br />
Error: A fatal exception has occurred. Program will exit.</div></div>
<p>La solution, trouvée <a href="http://stackoverflow.com/questions/9886971/how-to-run-play-in-a-512m-vps-it-reports-could-not-reserve-enough-space-fo" target="_blank">là</a> est d&rsquo;ajouter les options appropriées à Java, à savoir quelque chose de ce goût là :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">_JAVA_OPTIONS=&quot;-Xms128m -Xmx512m&quot; play</div></div>
<p>(cf man java).</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
