<?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>Libre Experience &#187; python</title>
	<atom:link href="http://www.libre-experience.org/index.php/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.libre-experience.org</link>
	<description>Bloc-notes sur les logiciels libres</description>
	<lastBuildDate>Fri, 27 Aug 2010 10:12:55 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Un script de sauvegarde en Python, sous GNU/Linux avec rsync</title>
		<link>http://www.libre-experience.org/index.php/2010/08/27/un-script-de-sauvegarde-en-python-sous-gnulinux-avec-rsync/</link>
		<comments>http://www.libre-experience.org/index.php/2010/08/27/un-script-de-sauvegarde-en-python-sous-gnulinux-avec-rsync/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 10:12:55 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=297</guid>
		<description><![CDATA[Il y a quelques temps, j&#8217;avais écrit un article expliquant comment réaliser une sauvegarde différencielle avec rsync sous GNU/Linux. J&#8217;ai récemment décidé de le réécrire en Python pour plusieurs raisons&#8230; J&#8217;aime ce langage et ça me permet de progresser. Je ne suis pas un expert en script bash et le script Python m&#8217;autorise plus de [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques temps, j&#8217;avais écrit <a href="index.php/2008/02/09/sauvegarde-differentielle-sous-linux/">un article</a> expliquant comment réaliser une sauvegarde différencielle avec rsync sous GNU/Linux. J&#8217;ai récemment décidé de le réécrire en Python pour plusieurs raisons&#8230;<span id="more-297"></span></p>
<ul>
<li>J&#8217;aime ce langage <img src='http://www.libre-experience.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  et ça me permet de progresser.</li>
<li>Je ne suis pas un expert en script bash et le script Python m&#8217;autorise plus de souplesse ainsi qu&#8217;une maintenance plus aisée.</li>
</ul>
<p>L&#8217;idée principale, outre l&#8217;utilisation de la sauvegarde différentielle (et donc la notion de <em>snapshots</em> pour pouvoir &laquo;&nbsp;remonter dans le temps&nbsp;&raquo;) est de pouvoir utiliser plusieurs media. Ainsi en passant un argument en ligne de commande, il est possible de choisir le medium à utiliser. Il peut être de deux types : local (autre disque dur, appareil USB&#8230;) ou sur une machine distante via ssh.</p>
<p>Vous pouvez <a href="http://www.libre-experience.org/wp-content/uploads/2010/08/backup_rsync_py.txt">télécharger le script complet</a>. Pensez à changer l&#8217;extension <em>.txt</em> en <em>.py</em> !</p>
<p><strong>Quelques explications sur les constantes du début du programme :</strong></p>
<ul>
<li>La variable <em>NICE_LEVEL</em> permet simplement d&#8217;indiquer la priorité avec laquelle la copie des données via rsync va être effectuée.</li>
<li>On définit ensuite la variable <em>DIR_TO_BACKUP</em> qui va préciser quels sont les répertoires à sauvegarder et ceux à éventuellement exclure.</li>
<li><em>BACKUP_DEST</em> indique les paramètres de la destination vers laquelle les données seront copiées. Il s&#8217;agit d&#8217;un dictionnaire contenant un autre dictionnaire Python. Le premier identifie les différents media et le second les paramètres relatifs à ce dernier, qui sont :
<ul>
<li><em>dir</em> : obligatoire indique le répertoire destination (qui doit exister).</li>
<li><em>server</em> : optionnel, adresse du serveur en cas de copie par ssh.</li>
<li><em>port</em> : optionnel, port du serveur en cas de copie par ssh.</li>
<li><em>login</em> : optionnel, login utilisé pour se connecter au serveur en cas de copie par ssh.</li>
</ul>
<p>A noter qu&#8217;en cas de copie par ssh, je fais l&#8217;hypothèse qu&#8217;on utilise une clé ssh pour se connecter et qu&#8217;il n&#8217;y a donc pas besoin de mot de passe.</li>
<li><em>ARCHIVE_NB</em> précise le nombre de sauvegarde à conserver.</li>
</ul>
<p><strong>Ensuite il y a la fonction <em>backup </em>qui effectue comme son nom l&#8217;indique la sauvegarde :</strong></p>
<p>Je n&#8217;expliquerai pas ici le détail de la programmation, car il n&#8217;y a en principe rien à toucher à ce niveau. Voici les grandes étapes :</p>
<ul>
<li>On commence par supprimer l&#8217;archive la plus ancienne.</li>
<li>On effectue un décalage des archives : la 1 devient 2, la 2 devient 3 etc.</li>
<li>On effectue une copie par <a href="http://en.wikipedia.org/wiki/Hard_link">hardlink </a>de l&#8217;archive 0 vers l&#8217;archive 1. Cette technique permet d&#8217;éviter une duplication des données et économise beaucoup d&#8217;espace. Seules les données inexistantes sont copiées les autres sont des simples liens.</li>
<li>Enfin on effectue une synchronisation par rsync entre le(s) répertoire(s) à sauvegarder et l&#8217;archive 0.</li>
</ul>
<p>A noter que pour les opérations sur disque (copie, déplacement&#8230;), je n&#8217;ai pas utilisé les commandes &laquo;&nbsp;natives&nbsp;&raquo; Python, car dans le cas d&#8217;un serveur distant elles ne sont pas utilisables.</p>
<p><strong>L&#8217;analyse des paramètres passées en ligne de commande :</strong></p>
<p>Si vous souhaitez ajouter / supprimer des media, il faudra effectuer des modifications dans la partie <em>__main__</em> du programme ainsi que dans la traditionnelle fonction <em>usage</em> qui indique les arguments qui peuvent être passés à l&#8217;application. Je pense que le code parle de lui-même à ce niveau. A noter simplement que j&#8217;ai imposé d&#8217;être <em>root</em> pour pouvoir exécuter le programme et ainsi copier des dossiers système, mais il n&#8217;y a évidemment pas d&#8217;obligation&#8230;</p>
<p>Ce script peut très certainement être amélioré, n&#8217;hésitez pas à me faire part de vos commentaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/08/27/un-script-de-sauvegarde-en-python-sous-gnulinux-avec-rsync/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Django, Apache et gunicorn</title>
		<link>http://www.libre-experience.org/index.php/2010/06/05/django-apache-et-gunicorn/</link>
		<comments>http://www.libre-experience.org/index.php/2010/06/05/django-apache-et-gunicorn/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 17:53:41 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gunicorn]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=284</guid>
		<description><![CDATA[Django est un framework web Python qui dispose d&#8217;un propre serveur http, ce qui permet de tester rapidement les applications développées. Cependant il est déconseillé de l&#8217;utiliser en production. Ainsi pour une utilisation en production, on le couple à un serveur http, par exemple le très célèbre Apache. Pour ce faire on va utiliser l&#8217;interface [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.djangoproject.com">Django</a> est un framework web Python qui dispose d&#8217;un propre serveur http, ce qui permet de tester rapidement les applications développées. Cependant il est déconseillé de l&#8217;utiliser en production<span id="more-284"></span>.</p>
<p>Ainsi pour une utilisation en production, on le couple à un serveur http, par exemple le très célèbre Apache. Pour ce faire on va utiliser l&#8217;interface standard Python : WSGI (Web Server Gateway Interface). Un exemple de configuration est fourni sur la <a href="http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/">documentation officielle de Django</a>.</p>
<p>Cependant il existe un moyen à mon avis plus élégant de parvenir au but recherché : l&#8217;utilisation de <a href="http://gunicorn.org">gunicorn</a> en tant que proxy. Je n&#8217;ai pas eu encore l&#8217;occasion de le tester autrement qu&#8217;en local, mais il s&#8217;avère très prometteur en terme de rapidité. De plus, une fois gunicorn installé (très simple puisqu&#8217;il s&#8217;agit d&#8217;un package Python), la configuration est vraiment aisée.<br />
Plutôt que de paraphraser, je vous renvoie vers un <a href="http://mathieu.agopian.info/blog/2010/02/gunicorn-un-server-wsgi-ultra-simple-a-utiliser-et-configurer">article très bien fait</a>.</p>
<p><strong>Important : il faut s&#8217;assurer que les chemins vers l&#8217;application Django définis dans la configuration d&#8217;Apache sont bien accessibles par l&#8217;utilisateur qui exécute Apache.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/06/05/django-apache-et-gunicorn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comment bien débuter en Python ?</title>
		<link>http://www.libre-experience.org/index.php/2010/05/18/comment-bien-debuter-en-python/</link>
		<comments>http://www.libre-experience.org/index.php/2010/05/18/comment-bien-debuter-en-python/#comments</comments>
		<pubDate>Tue, 18 May 2010 16:20:55 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.libre-experience.org/?p=277</guid>
		<description><![CDATA[Si Internet regorge de ressources en tout genre, il n&#8217;est pas toujours aisé de trouver de la documentation de qualité. Je vous ai sélectionné deux excellents tutoriels qui vous permettront de bien débuter en Python (et en français, s&#8217;il vous plait !) : Tutoriel général sur le langage Python : très sobre (voir austère) dans [...]]]></description>
			<content:encoded><![CDATA[<p>Si Internet regorge de ressources en tout genre, il n&#8217;est pas toujours aisé de trouver de la documentation de qualité<span id="more-277"></span>.</p>
<p>Je vous ai sélectionné deux excellents tutoriels qui vous permettront de bien débuter en Python (et en français, s&#8217;il vous plait !) :</p>
<ul>
<li><a href="http://lfe.developpez.com/tutoriel/python/">Tutoriel général sur le langage Python</a> : très sobre (voir austère) dans sa présentation il vous prend par la main et vous explique comment utiliser ce formidable langage depuis l&#8217;affichage d&#8217;une chaîne de caractères jusqu&#8217;au concept des classes.</li>
</ul>
<ul>
<li><a href="http://www.siteduzero.com/tutoriel-3-93860-pygtk.html">Tutoriel sur PyGTK</a> : de nombreux exemples avec des explications très fournies sur l&#8217;art et la manière de créer des applications graphiques en utilisant <a href="http://www.pygtk.org">PyGTK</a> (avec gtk.Builder, successeur de libglade), <a href="http://fr.wikipedia.org/wiki/GTK%2B">GTK</a> étant l&#8217;acronyme de <em>GIMP Tool Kit</em>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2010/05/18/comment-bien-debuter-en-python/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Présentation du framework web python : Django</title>
		<link>http://www.libre-experience.org/index.php/2008/10/18/presentation-du-framework-web-python-django/</link>
		<comments>http://www.libre-experience.org/index.php/2008/10/18/presentation-du-framework-web-python-django/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 12:32:24 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Planet-Libre]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.mirelsol.org/?p=49</guid>
		<description><![CDATA[Django (site officiel, site en français) est un framework web écrit en Python. Il permet de développer rapidement une application web dans ce même langage.. Dans le cadre de ma participation au projet de domotique Domogik, je suis en charge de développer la partie interface graphique qui devra fonctionner avec un navigateur. Le coeur du [...]]]></description>
			<content:encoded><![CDATA[<p>Django (<a href="http://www.djangoproject.com">site officiel</a>, <a href="http://www.django-fr.org/">site en français</a>) est un <a href="http://fr.wikipedia.org/wiki/Framework">framework</a> web écrit en Python. Il permet de développer rapidement une application web dans ce même langage.<span id="more-49"></span>.</p>
<p>Dans le cadre de ma participation au projet de domotique <a href="http://www.domogik.org">Domogik</a>, je suis en charge de développer la partie interface graphique qui devra fonctionner avec un navigateur. Le coeur du code de domotique étant déjà écrit en Python, nous avons pensé qu&#8217;il serait bien de rester homogène.</p>
<p>Evidemment avant de réinventer la roue (et donc de développer une application de A à Z), il vaut mieux voir ce qui a déjà été fait. Nous avons donc choisi le framework Django qui paraissait complet et simple à utiliser. Pour information, un framework est une base de travail qui contient un ensemble de composants logiciels, de conventions sur lequel votre code va s&#8217;appuyer. Les bénéfices sont la rapidité de développement et l&#8217;homogénéité des traitements dans votre application, ce qui facilitera la maintenance / les évolutions.</p>
<p><strong>Alors pourquoi Django ?</strong></p>
<p>Django est ce qu&#8217;on appelle un <a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur">MVC</a> (Modèle, Vue, Contrôleur) c&#8217;est à dire qu&#8217;il propose une architecture qui isole le modèle de données, le pilotage de l&#8217;application (contrôles, logique d&#8217;enchaînement des pages) et la présentation (l&#8217;affichage du contenu).</p>
<p>Voici les points forts de Django :</p>
<ul>
<li><strong>Il est simple d&#8217;utilisation</strong>. A partir du moment où vous avez des connaissances en programmation et quelques notions de Python, vous êtes opérationnels en très peu de temps.</li>
<li><strong>Il est puissant</strong> : le meilleur exemple est la façon dont il gère les données. Pour être concret, je vous donne un aperçu :<br />
<code>class Langage(models.Model):<br />
  LANG_CHOICES = (<br />
		('l1', 'Python'),<br />
		('l2', 'Java'),<br />
		('l3', 'Php'),<br />
		('l4','Perl')<br />
  )<br />
	name = models.CharField(max_length=30, choices = CAPACITY_CHOICES)<br />
        desc = models.CharField(max_length=255)</code></p>
<p>Rien qu&#8217;avec ce morceau de code et avec l&#8217;exécution d&#8217;une simple ligne de commande, Django va :</p>
<p>1) Générer le script SQL et créer toute la structure (les tables internes à Django ainsi que la table <em>langage</em>).<br />
2) Générer automatiquement une interface web qui va vous permettre de saisir les différents langages. Ici dans cet exemple j&#8217;aurai automatiquement une liste déroulante avec les quatre éléments ainsi qu&#8217;un champ texte pour saisir une description.<br />
3) A noter qu&#8217;il est possible de spécifier des clés étrangères, des relations n-aires&#8230; C&#8217;est pas magique ?</li>
<li><strong>Il propose un système de templates</strong> efficace pour la partie présentation. En gros vous décrivez la structure de vos pages dans un fichier et ensuite pour chacune des pages vous redéfinissez simplement ce qui est spécifique (titre, contenu&#8230;).</li>
<li><strong>Il est indépendant de la base de données</strong>. Un simple paramétrage dans le fichier de configuration (<em>settings.py</em>) et vous passez d&#8217;une base à l&#8217;autre. J&#8217;ai fait le test en utilisant MySql et PostgreSQL !</li>
<li><strong>Il dispose d&#8217;un serveur de développement intégré</strong>. Pas besoin dans un premier temps d&#8217;avoir un serveur web configuré pour qu&#8217;il puisse fonctionner avec Python. De plus ce serveur est très léger et très rapide.</li>
<li><strong>La documentation de Django est excellente</strong> : complète et pédagogique. Je vous conseille notamment <a href="http://docs.djangoproject.com/en/dev/intro/tutorial01/">l&#8217;excellent tutoriel (anglais)</a> qui va vous permettre d&#8217;être opérationnel en très peu de temps. Il existe une <a href="http://www.django-fr.org/documentation/tutorial01/">version française</a> mais attention elle se base sur Django 0.9, alors que la dernière version est 1.0, ce qui peut poser quelques problèmes de compatibilités notamment dans certains noms de variables. En revanche le principe reste le même donc vous pouvez le lire pour avoir une vision d&#8217;ensemble.</li>
<li><strong>Il est facile à installer</strong> : il faut avoir Python (vaut mieux, hein ?) et les paquets MySql (<em>python-mysqldb</em>) et / ou PostgreSQL (<em>python-pgsql,  python-psycopg</em>). Ensuite il suffit de décompacter l&#8217;archive de Django et de lancer le setup.</li>
<li><strong>Il est écrit en Python</strong> : oui je sais les goûts et les couleurs&#8230; Cependant en toute objectivité Python est un formidable langage : il est puissant et simple d&#8217;utilisation. Venant du monde Java, je pense savoir de quoi je parle&#8230;</li>
</ul>
<p>Voilà donc pour cette présentation. Il existe d&#8217;autres frameworks tels que <a href="http://turbogears.org/">Turbogears</a> mais je ne le connais pas donc s&#8217;il y en a qui ont une opinion, n&#8217;hésitez pas à laisser un commentaire.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.libre-experience.org/index.php/2008/10/18/presentation-du-framework-web-python-django/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
