<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Les derniers articles sur valentinbourgoin.net</title><link>http://valentinbourgoin.net/blog/</link><description>Ingenieur multimedia freelance : developpement web, hebergement, conseil.</description><language>fr</language><lastBuildDate>Fri, 16 Dec 2011 18:40:50 +0100</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/valentinbourgoin" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="valentinbourgoin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Projets Django à l'IMAC (2012)</title><link>http://valentinbourgoin.net/blog/article/ecole-imac-projets-django-2012/</link><description>&lt;div&gt;
&lt;p&gt;Tout au long du premier semestre, la promo 2012 de l'&amp;eacute;cole d'ing&amp;eacute;nieur IMAC &amp;agrave; qui je donne cours (intitul&amp;eacute; largement "programmation web") a travaill&amp;eacute;, en &amp;eacute;quipes de 3 &amp;agrave; 6 impos&amp;eacute;es, sur un projet. Seule contrainte : le site ou l'application rendu(e) devait &amp;ecirc;tre d&amp;eacute;velopp&amp;eacute; en Python, &amp;agrave; l'aide du framework Django.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Voici le fruit de leur travail.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Internsheep&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt;&amp;nbsp;&lt;a href="http://internsheep.alwaysdata.net/"&gt;http://internsheep.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: R&amp;eacute;seau social de notations de stages.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://www.adrien.bruneliere.fr/"&gt;Adrien Bruneliere&lt;/a&gt;, J&amp;eacute;r&amp;eacute;my Busset, &lt;a href="http://jeremy.cornilleau.free.fr/"&gt;J&amp;eacute;r&amp;eacute;my Cornilleau&lt;/a&gt;,&amp;nbsp;&lt;a href="http://benliger.com/"&gt;Benjamin Liger&lt;/a&gt;, &lt;a href="http://www.julien-michot.fr"&gt;Julien Michot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Crewm8&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://www.crewm8.com/"&gt;http://www.crewm8.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Mise en relation de partenaires autour de projets multim&amp;eacute;dias.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://www.aurelie-fruitiere.fr/"&gt;Aur&amp;eacute;lie Fruiti&amp;egrave;re&lt;/a&gt;, &lt;a href="http://www.aloeser.fr/"&gt;Alice Loeser&lt;/a&gt;, &lt;a href="http://stephanieluu.com/"&gt;St&amp;eacute;phanie Luu&lt;/a&gt;, &lt;a href="http://www.thomas-sebire.net/"&gt;Thomas Sebire&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;JustDoThat&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt;&amp;nbsp;&lt;a href="http://justdothat.alwaysdata.net/"&gt;http://justdothat.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Plateforme de d&amp;eacute;fis entre amis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;Jean-Fran&amp;ccedil;ois Biondi, &lt;a href="http://etudiant.univ-mlv.fr/~qcassagn/portfolio/"&gt;Quentin Cassagnav&amp;egrave;re&lt;/a&gt;,&amp;nbsp;Vincent Jubault, &lt;a href="Florian Lamy"&gt;Florian Lamy&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.timothee-roldao.fr/"&gt;Timoth&amp;eacute;e Roldao&lt;/a&gt;, &lt;a href="http://marlene-vieillescazes.fr/"&gt;Marl&amp;egrave;ne Vieillescazes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;404answers&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt;&amp;nbsp;&lt;a href="http://404answers.com/"&gt;http://404answers.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Plateforme de partage de besoins (geeks).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vid&amp;eacute;o de pr&amp;eacute;sentation&lt;/strong&gt; :&amp;nbsp;&lt;a href="http://vimeo.com/33806754" target="_blank"&gt;http://vimeo.com/33806754&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://odile.bellerose.free.fr/"&gt;Odile Bellerose&lt;/a&gt;, &lt;a href="http://caroline-campan.fr/"&gt;Caroline Campan&lt;/a&gt;, &lt;a href="http://nicolas-gouard.com/"&gt;Nicolas Gouard&lt;/a&gt;, Pierre Gouth&amp;eacute;raud, &lt;a href="http://www.gabrielpeyrot.com/"&gt;Gabriel Peyrot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;RainArt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt;&amp;nbsp;&lt;a href="http://rainart.alwaysdata.net/"&gt;http://rainart.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Galerie de pr&amp;eacute;sentation d'oeuvres graphiques. (Et je viens seulement de comprendre le jeu de mot).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;Fiona charbonnier, &lt;a href="http://www.mperrin.fr/"&gt;Manon Perrin&lt;/a&gt;, &lt;a href="http://www.arthur.muchir.fr/site/index/1680"&gt;Arthur Muchir&lt;/a&gt;, S&amp;eacute;bastien Poyer, &lt;a href="http://www.virgilemarin.fr/"&gt;Virgile Marin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Jawa&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://jawa-esiee-imac.alwaysdata.net/"&gt;http://jawa-esiee-imac.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Refonte du site Internet de l'ESIEE.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;Martin Dautry, Matthieu De Canteloube, &lt;a href="http://www.nicolas-samir.fr/"&gt;Nicolas Samir&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;ArtSightWorld&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://artsightworld.alwaysdata.net/"&gt;http://artsightworld.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Site communautaire autour de la photographie g&amp;eacute;olocalis&amp;eacute;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://www.delau-eleonore.fr/"&gt;El&amp;eacute;onore Delau&lt;/a&gt;, Imane Hachemaoui, &lt;a href="http://www.marjorygaillot.fr/"&gt;Marjory Gaillot&lt;/a&gt;, &lt;a href="http://etudiant.univ-mlv.fr/~sbelkouc/"&gt;Sanaa Belkouch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Merci &amp;eacute;videmment encore une fois &amp;agrave;&amp;nbsp;&lt;a href="http://www.alwaysdata.com" target="_blank"&gt;Alwaysdata&lt;/a&gt;&amp;nbsp;pour&amp;nbsp;&lt;strong&gt;l'h&amp;eacute;bergement Django de qualit&amp;eacute;&lt;/strong&gt;&amp;nbsp;et &amp;agrave; Venceslas Biri pour m'avoir assist&amp;eacute; lors des pr&amp;eacute;sentations finales.&lt;/p&gt;
&lt;/div&gt;
</description><pubDate>Fri, 16 Dec 2011 18:40:50 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/ecole-imac-projets-django-2012/</guid></item><item><title>Auto-entrepreneur : et après ?</title><link>http://valentinbourgoin.net/blog/article/autoentrepreneur-et-apres/</link><description>&lt;div&gt;
&lt;p&gt;Le statut d'auto-entrepreneur permet de se lancer dans une nouvelle activit&amp;eacute; ind&amp;eacute;pendante sans trop de risque. Mais, une fois que cette activit&amp;eacute; &amp;eacute;volue, comment &amp;eacute;voluer avec elle ? Quels sont les limites du statut, et les d&amp;eacute;marches &amp;agrave; faire pour ne pas se laisser surprendre ?&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Les limites du statut d'auto-entrepreneur&lt;/h2&gt;
&lt;p&gt;En tant qu'auto-entrepreneur, vous pouvez &amp;ecirc;tre rapidement confront&amp;eacute; &amp;agrave; plusieurs probl&amp;eacute;matiques : un chiffre d'affaire qui flirte avec le plafond, un besoin d'embaucher ou de s'associer ou encore des d&amp;eacute;penses trop &amp;eacute;lev&amp;eacute;es... Faisons le point !&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Le chiffre d'affaire&lt;/h3&gt;
&lt;p&gt;Comme vous le savez, le chiffre d'affaire d'une auto-entreprise ne peut d&amp;eacute;passer un certain plafond annuel. Celui-ci s'&amp;eacute;l&amp;egrave;ve &amp;agrave; &lt;strong&gt;32 600 &amp;euro;&lt;/strong&gt; pour les activit&amp;eacute;s de service et&lt;strong&gt; 81 500 &amp;euro;&lt;/strong&gt; pour les activit&amp;eacute;s commerciales de revente. Il existe bien un seuil de tol&amp;eacute;rance (respectivement 34 et 89 600 &amp;euro;), mais cela reste assez n&amp;eacute;gligeable si les clients commencent &amp;agrave; se bousculer et que votre boite mail explose.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Petite parenth&amp;egrave;se sur le&lt;strong&gt; prorata temporis&lt;/strong&gt; qui sera par ailleurs actif en 2011, pour la premi&amp;egrave;re fois. Si vous d&amp;eacute;butez votre activit&amp;eacute; en cours d'ann&amp;eacute;e, votre plafond sera calcul&amp;eacute; au prorata. Pour une entreprise de services lanc&amp;eacute;e le 1er juillet, comptez un CA maximal &amp;agrave; 17 000 &amp;euro; !&lt;/p&gt;
&lt;h3&gt;Travailler &amp;agrave; plusieurs&lt;/h3&gt;
&lt;p&gt;Vous vous dites, &amp;agrave; juste titre, qu'un statut d'auto-entrepreneur est r&amp;eacute;serv&amp;eacute; &amp;agrave; une personne seule. Vous avez raison, mais ce n'est pas juste une question etymologique... En effet, en AE, le paiement des charges est calcul&amp;eacute; en fonction du chiffre d'affaire... qui vous servirait &amp;agrave; payer un employ&amp;eacute;. Difficile dans ces conditions de rester sous le plafond de CA.&lt;/p&gt;
&lt;p&gt;Ce statut n'est donc pas adapt&amp;eacute; pour embaucher, il ne l'est pas non plus pour s'associer. Pourtant, partager (et s'&amp;eacute;changer !) des comp&amp;eacute;tences, des ressources (local, mat&amp;eacute;riel...) peut &amp;ecirc;tre tr&amp;egrave;s int&amp;eacute;ressant une fois une activit&amp;eacute; bien lanc&amp;eacute;e. H&amp;eacute;las, il est tr&amp;egrave;s dangereux pour plusieurs auto-entrepreneurs de s'unir sans appui juridique. En effet, le fisc pourrait vite requalifier leur activit&amp;eacute; comme soci&amp;eacute;t&amp;eacute; &amp;agrave; part enti&amp;egrave;re, et du coup recalculer toutes leurs charges en fonction. A &amp;eacute;viter, donc !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous pouvez n&amp;eacute;anmoins noter qu'il existe une alternative int&amp;eacute;ressante avec le&lt;strong&gt; GIE &lt;/strong&gt;(Groupement d'Inter&amp;ecirc;t Economique) qui permet &amp;agrave; plusieurs professions lib&amp;eacute;rales de mutualiser leurs moyens. J'y reviendrai s&amp;ucirc;rement tr&amp;egrave;s prochainement.&lt;/p&gt;
&lt;h3&gt;La TVA et les charges&lt;/h3&gt;
&lt;p&gt;En tant qu'auto-entrepreneur, vous ne facturez pas la TVA... mais vous ne la r&amp;eacute;cup&amp;eacute;rez pas non plus. &lt;strong&gt;Vous ne pouvez donc en aucun cas faire passer un achat comme "professionnel"&lt;/strong&gt; (ce qui pourtant &amp;ecirc;tre pratique pour du mat&amp;eacute;riel informatique n&amp;eacute;cessaire &amp;agrave; votre activit&amp;eacute;, un t&amp;eacute;l&amp;eacute;phone de fonction, etc.) et en &amp;eacute;conomiser les 19,6% de TVA. Logique, puisque les prix que vous facturez sont Hors Taxe. Bien s&amp;ucirc;r, la comptabilit&amp;eacute; en est plus simple (pas de formulaires de TVA &amp;agrave; remplir, moins de calculs), mais cela peut &amp;ecirc;tre un frein &amp;agrave; l'investissement si vous avez besoin d'effectuer des achats professionels.&amp;nbsp;Egalement, comme expliqu&amp;eacute; plus haut, les charges &amp;eacute;tant calcul&amp;eacute;es sur le CA, l'achat de mat&amp;eacute;riel en est d'autant plus difficile.&lt;/p&gt;
&lt;h2&gt;Quelles solutions ?&amp;nbsp;&lt;/h2&gt;
&lt;h3&gt;Conserver une Entreprise Individuelle&lt;/h3&gt;
&lt;p&gt;Il s'agit l&amp;agrave; de la suite logique du statut d'auto-entrepreneur (qui est d&amp;eacute;j&amp;agrave; en lui m&amp;ecirc;me une EI). Les d&amp;eacute;marches restent assez souples, m&amp;ecirc;me s'il est n&amp;eacute;cessaire de tenir une comptabilit&amp;eacute; plus rigoureuse. Concernant le CA, plus de limitation mais une imposition plus importante, directement sur l'Imp&amp;ocirc;ts sur le Revenu Fini, donc, le versement lib&amp;eacute;ratoire auquel l'AE a, lui, le droit.&lt;/p&gt;
&lt;p&gt;Au niveau du patrimoine de l'entrepreneur, celui-ci est enti&amp;egrave;rement confondu avec celui de la soci&amp;eacute;t&amp;eacute;. Vous avez donc une &lt;strong&gt;responsabilit&amp;eacute; illimit&amp;eacute;e&lt;/strong&gt; sur la totalit&amp;eacute; de vos biens. Cependant, depuis janvier 2011, il existe l'EIRL qui permet de s&amp;eacute;parer patrimoines personnel et professionnel. A prendre tout de m&amp;ecirc;me avec des pincettes, car en cas de faute de gestion (ce qui arrive h&amp;eacute;las facilement quand on est perdu dans cette nouvelle fiscalit&amp;eacute;), la r&amp;eacute;sponsabilit&amp;eacute; n'est plus du tout limit&amp;eacute;e...&lt;/p&gt;
&lt;h3&gt;Cr&amp;eacute;er une soci&amp;eacute;t&amp;eacute;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;EURL &lt;/strong&gt;ou &lt;strong&gt;SASU &lt;/strong&gt;sont vos principales possiblit&amp;eacute;s si vous souhaitez passer le pas et cr&amp;eacute;er une soci&amp;eacute;t&amp;eacute; seul. Si vous souhaitez vous associer, vous pouvez opter pour la &lt;strong&gt;SARL &lt;/strong&gt;ou la &lt;strong&gt;SAS&lt;/strong&gt;. Dans tous les cas, les frais de constitutions sont plus &amp;eacute;lev&amp;eacute;s que pour une EI, et les d&amp;eacute;marches plus lourdes. Ne prenez pas cette cr&amp;eacute;ation &amp;agrave; la l&amp;eacute;g&amp;egrave;re (encore moins qu'un statut d'AE !), et prenez contact avec votre CCI et / ou un juriste pour recevoir des conseils !&lt;/p&gt;
&lt;h2&gt;En pratique&lt;/h2&gt;
&lt;p&gt;Il faut savoir que, automatiquement, si vous d&amp;eacute;passez le plafond de CA du statut d'auto-entrepreneur (32 600 &amp;euro; pour les activit&amp;eacute;s de services)&amp;nbsp;avant la fin de l'ann&amp;eacute;e, vous avez tout de m&amp;ecirc;me un seuil de tol&amp;eacute;rance situ&amp;eacute; &amp;agrave; 34 000 &amp;euro;. A ce moment-l&amp;agrave;, vous avez tout de m&amp;ecirc;me le droit de rester AE pour l'ann&amp;eacute;e suivante. Cependant, si vous d&amp;eacute;passez une seconde fois le plafond, vous n'aurez alors plus de joker : vous serez automatiquement transf&amp;eacute;r&amp;eacute; vers un statut d'EI classique.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;De m&amp;ecirc;me, si vous d&amp;eacute;passez directement le seuil de tol&amp;eacute;rance, votre statut d'AE s'arr&amp;ecirc;tera &lt;strong&gt;d&amp;egrave;s la somme sup&amp;eacute;rieure encaiss&amp;eacute;e&lt;/strong&gt; (m&amp;ecirc;me la premi&amp;egrave;re ann&amp;eacute;e). Automatiquement, votre entreprise deviendra une EI, et vous serez assujeti en fonction. Si vous avez le droit &amp;agrave; l'ACCRE, celle-ci s'arr&amp;ecirc;tera &amp;eacute;galement instantan&amp;eacute;ment pour toute recette sup&amp;eacute;rieure au plafond.&lt;/p&gt;
&lt;p&gt;Attention donc &amp;agrave; ne pas vous faire surprendre ! Si vous sentez le plafond s'approcher, prenez les devants et choisissez quelle suite donner &amp;agrave; votre activit&amp;eacute; : continuer sur la voie de l'AI, cr&amp;eacute;er une structure ou... partir en vacances, tout simplement.&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
</description><pubDate>Thu, 21 Jul 2011 21:28:03 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/autoentrepreneur-et-apres/</guid></item><item><title>Auto-entrepreneur : impôts sur le revenu</title><link>http://valentinbourgoin.net/blog/article/autoentrepreneur-declarer-revenus-impots-sur-le-revenu/</link><description>&lt;p&gt;La p&amp;eacute;riode des d&amp;eacute;clarations d'imp&amp;ocirc;ts sur le revenu approche &amp;agrave; grands pas ! Vous devez avoir re&amp;ccedil;u un avis de votre Centre d'Imp&amp;ocirc;ts vous annon&amp;ccedil;ant une date limite de paiement (au mois de juin pour les t&amp;eacute;l&amp;eacute;-d&amp;eacute;clarations)...&lt;/p&gt;
&lt;p&gt;Voici la marche &amp;agrave; suivre pour &lt;strong&gt;d&amp;eacute;clarer ses revenus en tant qu'auto-entrepreneur&lt;/strong&gt;. Coupl&amp;eacute;s ou non avec une autre activit&amp;eacute; (un CDI par exemple).&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Pas de panique !&lt;/h2&gt;
&lt;p&gt;A priori, vous devez avoir opt&amp;eacute; pour le &lt;strong&gt;versement lib&amp;eacute;ratoire de l'imp&amp;ocirc;t sur le revenu&lt;/strong&gt;, lors du d&amp;eacute;but d'activit&amp;eacute;. Dans ce cas-l&amp;agrave;, vos imp&amp;ocirc;ts ont d&amp;eacute;j&amp;agrave; &amp;eacute;t&amp;eacute; pay&amp;eacute;s. En effet, ils sont compris dans vos charges. Vous n'allez donc pas les payer une seconde fois...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cependant, vous allez tout de m&amp;ecirc;me devoir remplir votre d&amp;eacute;clarations d'imp&amp;ocirc;ts. Vous devez avoir re&amp;ccedil;u un courrier de la part de l'URSSAF vous r&amp;eacute;sumant le Chiffre d'Affaire que vous avez r&amp;eacute;alis&amp;eacute; sur l'ann&amp;eacute;e. C'est simplement le montant que vous avez &amp;agrave; d&amp;eacute;clarer... sans rien payer.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Mais les choses peuvent se compliquer. Si, au cours de l'ann&amp;eacute;e, vous avez exerc&amp;eacute; une autre activit&amp;eacute; que celle d'auto-entrepreneur, vous allez devoir d&amp;eacute;clarer ces revenus... et payer vos imp&amp;ocirc;ts.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Cas d'&amp;eacute;cole : CDI + P&amp;ocirc;le Emploi + AE + revenus annexes&lt;/h2&gt;
&lt;p&gt;Prenons, au hasard, mon cas. Au cours de l'ann&amp;eacute;e 2010, j'ai :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Et&amp;eacute; en stage pendant un mois (janvier).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Et&amp;eacute; en CDI pendant 6 mois (f&amp;eacute;vrier - juillet).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Effectu&amp;eacute; quelques enseignements &amp;agrave; l'Universit&amp;eacute;, avec un statut de vacataire (mars).&lt;/li&gt;
&lt;li&gt;Et&amp;eacute; inscrit &amp;agrave; P&amp;ocirc;le Emploi suite &amp;agrave; une rupture de contrat conventionnelle (juillet).&lt;/li&gt;
&lt;li&gt;B&amp;eacute;n&amp;eacute;fici&amp;eacute; d'un statut d'auto-entrpreneur depuis le mois d'ao&amp;ucirc;t. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je vais donc devoir s&amp;eacute;parer mes diff&amp;eacute;rentes sources de revenus : le CDI, P&amp;ocirc;le Emploi et l'Universit&amp;eacute; d'une part (sur la d&amp;eacute;claration principale) et les revenus en tant qu'auto-entrepreneur d'autre part (sur l'annexe &amp;agrave; la d&amp;eacute;claration).&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Comment d&amp;eacute;clarer ?&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;Sur&lt;a href="http://impots.gouv.fr" target="_blank"&gt;&amp;nbsp;impots.gouv.fr&lt;/a&gt;, vous pouvez choisir les diff&amp;eacute;rents formulaires que vous allez remplir. Les auto-entrpreneurs doivent d&amp;eacute;clarer leurs revenus par le biais du formulaire 2042 C. Veillez donc bien &amp;agrave; le s&amp;eacute;lectionner &amp;agrave; la toute premi&amp;egrave;re &amp;eacute;tape de votre d&amp;eacute;claration.&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h3&gt;Votre d&amp;eacute;claration principale&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;Vous allez commencer par remplir votre d&amp;eacute;claration classique avec les revenus "principaux" (hors AE, donc) que vous avez touch&amp;eacute;s dans l'ann&amp;eacute;e. A priori, cette d&amp;eacute;claration devra &amp;ecirc;tre pr&amp;eacute;-remplie. Si ce n'est pas le cas, reportez les valeurs de cumul "imposables" de votre derni&amp;egrave;re fiche de paie. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;N'oubliez pas de d&amp;eacute;clarer vos revenus de vos diff&amp;eacute;rents employeurs. P&amp;ocirc;le Emploi en fait partie !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il vous sera &amp;eacute;galement demand&amp;eacute; de saisir vos revenus fonciers si vous en poss&amp;eacute;dez.&lt;/p&gt;
&lt;h3&gt;2042C : D&amp;eacute;claration des revenus annexes&lt;/h3&gt;
&lt;p&gt;C'est dans ce formulaire annexe que vous allez devoir reporter votre revenu communiqu&amp;eacute; par l'URSSAF. Sur le courrier, ils vous ont m&amp;ecirc;me renseign&amp;eacute; le code du cadre &amp;agrave; remplir, pour &amp;eacute;viter toute confusion.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Frais, TVA et prime pour l'emploi&lt;/h2&gt;
&lt;p&gt;Il est &amp;agrave; noter qu'un auto-entrepreneur exemplt&amp;eacute; de TVA ne peut en aucun cas r&amp;eacute;cup&amp;eacute;rer la TVA de ses achats professionnels. Pour la simple est bonne raison qu'il ne facture pas la taxe &amp;agrave; ses clients.&amp;nbsp;De m&amp;ecirc;me pour les frais ! Vous ne pouvez d&amp;eacute;duire aucun frais (loyer, essence, repas, etc.). Ce sont les limites du statut d'auto-entrepreneur...&lt;/p&gt;
&lt;p&gt;Par contre, si vous n'avez travaill&amp;eacute; en CDI / CDD que quelques mois sur l'ann&amp;eacute;e, n'oubliez pas de saisir le nombre d'heure travaill&amp;eacute;es (qui doit &amp;ecirc;tre pr&amp;eacute;sent sur votre derni&amp;egrave;re fiche de paie). Si vous &amp;ecirc;tes en-dessous d'un certain ratio revenus / temps de travail, vous pourrez r&amp;eacute;cup&amp;eacute;rer une prime pour l'emploi de quelques centaines d'euros. Non n&amp;eacute;gligeable !&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Pour finir...&lt;/h2&gt;
&lt;p&gt;Enfin, ne vous fiez pas &amp;agrave; l'estimation donn&amp;eacute; &amp;agrave; la derni&amp;egrave;re &amp;eacute;tape du formulaire. Cette derni&amp;egrave;re combine vos diff&amp;eacute;rents revenus, sans prendre en compte du fait que vous avez d&amp;eacute;j&amp;agrave; pay&amp;eacute; vos imp&amp;ocirc;ts sur les revenus en AE... Vous devez donc attendre le courier officiel de votre Centre d'Imp&amp;ocirc;ts pour &amp;ecirc;tre fix&amp;eacute; !&lt;/p&gt;
</description><pubDate>Thu, 28 Apr 2011 00:49:39 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/autoentrepreneur-declarer-revenus-impots-sur-le-revenu/</guid></item><item><title>Internationaliser son application Django</title><link>http://valentinbourgoin.net/blog/article/internationaliser-application-django-multilingual-ng/</link><description>&lt;p&gt;Voyons comment&amp;nbsp;&lt;strong&gt;traduire efficacement une application Django&lt;/strong&gt;, en plusieurs &amp;eacute;tapes. Les contenus g&amp;eacute;n&amp;eacute;riques des mod&amp;egrave;les et des vues, tout d'abord, en utilisant gettext. Puis les templates en eux-m&amp;ecirc;me. Et enfin, le contenu de la base de donn&amp;eacute;es que nous allons rendre adaptables aux diff&amp;eacute;rentes traductions gr&amp;acirc;ce &amp;agrave;&amp;nbsp;&lt;a href="https://github.com/ojii/django-multilingual-ng" target="_blank"&gt;django-multilingual-ng&lt;/a&gt;. Nous verrons &amp;eacute;galement comment Django permet d'adapter la langue affich&amp;eacute;e en fonction des options de l'utilisateur.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Configurer i18n&lt;/h2&gt;
&lt;p&gt;Le module g&amp;eacute;n&amp;eacute;rique de Django permettant la traduction s'appelle i18n, pour "Internationalisation". Dans votre fichier settings.py, ajouter / modifiez les lignes suivantes correspondant &amp;agrave; vos diff&amp;eacute;rentes langues :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.utils.translation import gettext_lazy as _
TIME_ZONE = 'Europe/Paris'
LANGUAGE_CODE = 'fr'
SITE_ID = 1USE_I18N = True
USE_L10N = True
LANGUAGES = (
    ('fr', _('Fran&amp;ccedil;ais')),
    ('en', _('Anglais')),
)
DEFAULT_LANGUAGE = 1&lt;/pre&gt;
&lt;p&gt;Puis, au niveau des middlewares et des context processors :&lt;/p&gt;
&lt;pre class="brush: python"&gt;MIDDLEWARE_CLASSES = ( 
    [...] 
    'django.middleware.locale.LocaleMiddleware', 
)
TEMPLATE_CONTEXT_PROCESSORS = (
    [...]
    "django.core.context_processors.i18n",
)&lt;/pre&gt;
&lt;h2&gt;Utiliser gettext au sein des fichiers .py&lt;/h2&gt;
&lt;p&gt;Premiers termes que nous allons traduire : les contenus de vos fichiers .py (mod&amp;egrave;les essentiellement). C'est d&amp;eacute;j&amp;agrave; ce que nous avons fait dans l'&amp;eacute;tape pr&amp;eacute;c&amp;eacute;dente pour les langues disponibles : d&amp;egrave;s qu'un mot sera &amp;eacute;crit dans un fichier .py (description d'un champ d'un mod&amp;egrave;le par exemple), vous allez utiliser gettext pour permettre &amp;ccedil;a traduction (en mode paresseux). Importez donc gettext dans tous vos fichiers .py et attribuez lui l'alias _ pour l'impl&amp;eacute;menter plus facilement :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.utils.translation import gettext_lazy as _&lt;/pre&gt;
&lt;p&gt;Puis, pour chaque terme (ici la classe meta d'un model par exemple) :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;class Meta:
    verbose_name = _('Image')
    verbose_name_plural = _('Images')&lt;/pre&gt;
&lt;h2&gt;Traduire les templates&lt;/h2&gt;
&lt;p&gt;Pour ce qui est des templates, o&amp;ugrave; vous devriez avoir plus de termes &amp;agrave; traduire, le fonctionnement est le m&amp;ecirc;me. Commencez par permettre la traduction au sein de chaque template gr&amp;acirc;ce au template_tag :&lt;/p&gt;
&lt;pre class="brush: python"&gt;{% load i18n %}&lt;/pre&gt;
&lt;p&gt;Et, pour chaque phrase &amp;agrave; traduire :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;{% trans "Bienvenue sur mon site" %}&lt;/pre&gt;
&lt;p&gt;S'il s'agit d'un bloc de texte plus cons&amp;eacute;quent, vous pouvez utiliser :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;{% blocktrans %}
[...]
{% endblocktrans %}&lt;/pre&gt;
&lt;p&gt;Si vos blocs contiennent des variables, je vous invite &amp;agrave; consulter la &lt;a href="http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/#trans-template-tag" target="_blank"&gt;documentation&lt;/a&gt; bien fournie !&lt;/p&gt;
&lt;h2&gt;G&amp;eacute;n&amp;eacute;rer les traductions&lt;/h2&gt;
&lt;p&gt;Maintenant que vous avez permis l'internationalisation de tous vos termes, vous allez pouvoir en saisir la traduction. Si vous &amp;ecirc;tes d&amp;eacute;j&amp;agrave; familier avec le syst&amp;egrave;me de wordpress, sachez qu'il s'agit du m&amp;ecirc;me principe (qui ressemblait d&amp;eacute;j&amp;agrave; jusque l&amp;agrave;). Des fichiers de traductions (.po) vont &amp;ecirc;tre g&amp;eacute;n&amp;eacute;r&amp;eacute;s, contenant chaque phrase que vous aurez &amp;agrave; traduire dans toutes les langues s&amp;eacute;lectionn&amp;eacute;es. Une fois la traduction effectu&amp;eacute;e, Django compilera ces donn&amp;eacute;es dans un fichier .mo.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Commencez par cr&amp;eacute;er un nouveau r&amp;eacute;pertoire &amp;agrave; la racine de votre projet : &lt;strong&gt;locale/&lt;/strong&gt;. C'est lui qui contiendra les diff&amp;eacute;rents fichiers de traductions.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous devez ensuite installer gettext, si vous ne l'avez pas encore. Voici la marche &amp;agrave; suivre sous &lt;a href="http://gnuwin32.sourceforge.net/packages/gettext.htm" target="_blank"&gt;Windows&lt;/a&gt;&amp;nbsp;et &lt;a href="http://gettext.darwinports.com/" target="_blank"&gt;MacOS&lt;/a&gt;. Pour g&amp;eacute;n&amp;eacute;rer les fichiers de traductions, tapez la commande suivante (&amp;agrave; la racine de votre application) :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: bash"&gt;django-admin.py makemessages --all&lt;/pre&gt;
&lt;p&gt;Un nouveau r&amp;eacute;pertorie sera cr&amp;eacute;&amp;eacute; dans votre dossier locale/ par langue configur&amp;eacute;e. Editez &lt;strong&gt;LC_MESSAGES/django.po&lt;/strong&gt; et traduisez chacun des termes... Puis, une fois la traduction effectu&amp;eacute;e, lancez la commande :&lt;/p&gt;
&lt;pre class="brush: bash"&gt;django-admin.py compilemessages&lt;/pre&gt;
&lt;h2&gt;Changer de langue&lt;/h2&gt;
&lt;p&gt;Pour permettre &amp;agrave; l'utilisateur de changer de langue, &amp;eacute;ditez votre fichier &lt;strong&gt;urls.py&lt;/strong&gt;&amp;nbsp;et ajoutez la r&amp;egrave;gle suivante :&lt;/p&gt;
&lt;pre class="brush: python"&gt;urlpatterns = patterns(
    [...],
    (r'^i18n/', include('django.conf.urls.i18n'))&lt;/pre&gt;
&lt;p&gt;Puis, dans un de vos templates, cr&amp;eacute;ez le formulaire suivant :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;form action="/i18n/setlang" method="post"&amp;gt;
{% csrf_token %}
&amp;lt;select name="language"&amp;gt;
{% for lang in LANGUAGES %}
    &amp;lt;option value="{{ lang.0 }}"&amp;gt;{{ lang.1 }}&amp;lt;/option&amp;gt;
{% endfor %}
&amp;lt;/select&amp;gt;&amp;nbsp;
&amp;lt;/form&amp;gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;L'URL &lt;strong&gt;/i18n/setlang/ &lt;/strong&gt;(que vous venez de configurer)&amp;nbsp;permet de changer la langue courrante du site, qu'on lui passe en param&amp;egrave;tre POST. La page est donc r&amp;eacute;-actualis&amp;eacute;e... avec les templates traduits !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Notez que gr&amp;acirc;ce au middleware &lt;em&gt;Locale &lt;/em&gt;que vous avez inclus dans vos param&amp;egrave;tres, Django d&amp;eacute;tectera automatiquement les options du navigateur de l'utilisateur... et utilisera la bonne langue en cons&amp;eacute;quence ! &amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Traduire le contenu de votre BDD : django-multilingual-ng&lt;/h2&gt;
&lt;p&gt;Seulement, vous l'aurez remarqu&amp;eacute;, seuls les contenus "statiques" sont modifi&amp;eacute;s. Comment faire pour traduire dynamiquement le contenu de votre base de donn&amp;eacute;es ? Le nom d'un post et son contenu, par exemple ? C'est l&amp;agrave; qu'entre en jeu &lt;a href="https://github.com/ojii/django-multilingual-ng" target="_blank"&gt;django-multilingual-ng&lt;/a&gt;. Il vous permettra d'ajouter dynamiquement une table de traduction pour chacun des objets &amp;agrave; internationaliser. Attention, les op&amp;eacute;rations suivantes vous feront perdre vos donn&amp;eacute;es d&amp;eacute;j&amp;agrave; pr&amp;eacute;sentes dans la BDD. Pensez &amp;agrave; les sauvegarder !&lt;/p&gt;
&lt;h3&gt;Installer django-multilingual-ng&lt;/h3&gt;
&lt;p&gt;T&amp;eacute;l&amp;eacute;chargez le &lt;a href="https://github.com/ojii/django-multilingual-ng" target="_blank"&gt;package&lt;/a&gt;&amp;nbsp;et installez-le comme un plug-in classique. Editez ensuite&lt;strong&gt; settings.py&lt;/strong&gt; :&lt;/p&gt;
&lt;pre class="brush: python"&gt;TEMPLATE_CONTEXT_PROCESSORS = (
    [...], 
    'multilingual.context_processors.multilingual',
)
INSTALLED_APPS = ( 
    [...], 
    'multilingual', 
)&lt;/pre&gt;
&lt;h3&gt;Modifier les mod&amp;egrave;les et l'intertface d'administration&lt;/h3&gt;
&lt;p&gt;Editez maintenant vos &lt;strong&gt;models.py&lt;/strong&gt;. Vous allez devoir choisir les champs qui auront besoin d'une traduction et les placer dans une sous-classe, de la fa&amp;ccedil;on suivante :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;from multilingual.translation import TranslationModel

class MyModel(models.Model):
    # Les champs qui ne seront pas traduits
    creation_date = models.DateTimeField()
    link = models.URLField(blank=True, null=True)

    # Les champs &amp;agrave; traduire
    class Translation(TranslationModel):
        title = models.CharField(max_length=200)
        slug = models.CharField(max_length=200)
        description = models.TextField()
        overview = models.TextField()&lt;/pre&gt;
&lt;p&gt;Le champs compris dans cette classe &lt;em&gt;Translation &lt;/em&gt;existeront donc pour chacune des langues configur&amp;eacute;es. Ici : &lt;em&gt;title&lt;/em&gt;, &lt;em&gt;slug&lt;/em&gt;, &lt;em&gt;description &lt;/em&gt;et &lt;em&gt;overview&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Modifiez &amp;eacute;galement &lt;strong&gt;admin.py&lt;/strong&gt; pour vous permettre de modifier ces champs dans l'interface d'administration. Vos classes d'admin devront juste h&amp;eacute;riter de "&lt;em&gt;MultilingualModelAdmin&lt;/em&gt;" au lieu du traditionnel "&lt;em&gt;ModelAdmin&lt;/em&gt;" :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from multilingual.admin import MultilingualModelAdmin

class MyModelAdmin(MultilingualModelAdmin):
    [...]
    use_prepopulated_fields = {'slug': ('title',)}&lt;/pre&gt;
&lt;p&gt;Attention, certaines m&amp;eacute;thodes ont &amp;eacute;t&amp;eacute; renom&amp;eacute;es dans le&amp;nbsp;&lt;em&gt;MultilingualModelAdmin&lt;/em&gt;. Par exemple, "&lt;em&gt;prepolulated_fields&lt;/em&gt;" devient "&lt;em&gt;use_prepopulated_fields&lt;/em&gt;". Notez &amp;eacute;galement que vos classes "&lt;em&gt;inlines&lt;/em&gt;" devront elles h&amp;eacute;riter de "&lt;em&gt;MultilingualInlineAdmin&lt;/em&gt;", comme l'exemple suivant (couple classes Crea / Task) :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;from multilingual.admin import MultilingualModelAdmin, MultilingualInlineAdmin

class TaskInline(MultilingualInlineAdmin):
    model = Task
    use_prepopulated_fields = {'slug': ('name',)}

class CreaAdmin(MultilingualModelAdmin):
    list_display = ('title', 'slug', 'creation_date', 'link')
    search_field = ('title', 'body')
    date_hierarchy = 'creation_date'
    use_prepopulated_fields = {'slug': ('title',)}
    inlines = [ TaskInline]&lt;/pre&gt;
&lt;p&gt;Vous devez lancer un syncdb pour re-synchroniser votre base. Vous allez donc perdre toutes vos anciennes donn&amp;eacute;es. N'h&amp;eacute;sitez pas &amp;agrave; les exporter pour pouvoir ensuite les r&amp;eacute;-importer. Mais je vous conseille surtout de faire cette op&amp;eacute;ration d'internationalisation avant le d&amp;eacute;ploiement de votre application...&lt;/p&gt;
&lt;pre class="brush: bash"&gt;$ manage.py syncdb&lt;/pre&gt;
&lt;p&gt;Si vous explorez votre nouvelle base (via phpMyAdmin par exemple), vous comprendrez le fonctionnement de django-multilingual-ng avec la cr&amp;eacute;ation de tables de traductions suppl&amp;eacute;mentaires...&lt;/p&gt;
&lt;p&gt;Rendez-vous maintenant dans l'interface d'administration. Vous pourrez constater que vos mod&amp;egrave;les poss&amp;eacute;dant des champs traduisibles sont d&amp;eacute;sormais modifiables gr&amp;acirc;ce &amp;agrave; un onglet pour chaque langue !&lt;/p&gt;
&lt;h3&gt;Acc&amp;eacute;der aux donn&amp;eacute;es traduites&lt;/h3&gt;
&lt;p&gt;Dans votre application, suivant la langue courante, les champs seront automatiquement traduits. Mais vous pouvez tout de m&amp;ecirc;me acc&amp;eacute;der aux traductions des autres langues. Par exemple, au sein d'un template, si la langue courante est le fran&amp;ccedil;ais :&lt;/p&gt;
&lt;pre class="brush: python"&gt;{{ obj.title }} &amp;lt;!-- Le titre en fran&amp;ccedil;ais --&amp;gt;
{{ obj.title_fr }} &amp;lt;!-- Idem --&amp;gt;
{{ obj.title_en }} &amp;lt;!-- Le titre en anglais --&amp;gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;De m&amp;ecirc;me, dans vos Querysets (toujours avec le fran&amp;ccedil;ais en langue courante) :&lt;/p&gt;
&lt;pre class="brush: python"&gt;# Les cr&amp;eacute;ations ordonn&amp;eacute;es par le titre fran&amp;ccedil;ais
objs = Crea.objects.order_by('title')

#&amp;nbsp;Les cr&amp;eacute;ations ordonn&amp;eacute;es par le titre anglais
objs = Crea.objects.order_by('title_en')&lt;/pre&gt;
&lt;p&gt;Voil&amp;agrave; pour l'utilisation de django-multilingual-ng. Vous pouvez &amp;eacute;galement lire la &lt;a href="https://github.com/ojii/django-multilingual-ng/wiki/Usage" target="_blank"&gt;documentation&lt;/a&gt;&amp;nbsp;relativement peu fournie, ou simplement fouiller dans le code (ce qui est finalement le plus efficace)...&lt;/p&gt;
&lt;h2&gt;Optimisation&lt;/h2&gt;
&lt;p&gt;Une derni&amp;egrave;re chose &amp;agrave; propose de l'optimisation. Si vous poss&amp;eacute;der la &lt;a href="https://github.com/robhudson/django-debug-toolbar" target="_blank"&gt;django-debug-toolbar&lt;/a&gt;&amp;nbsp;(par exemple), vous allez constater que les requ&amp;ecirc;tes SQL g&amp;eacute;n&amp;eacute;r&amp;eacute;s par django-multilingual-ng&amp;nbsp;sont assez... g&amp;eacute;n&amp;eacute;reuses. Effectivement, elles sont assez fournies en jointures (logique, avec les donn&amp;eacute;es r&amp;eacute;parties entre deux tables pour la traduction). N'h&amp;eacute;sitez pas, donc, &amp;agrave; utiliser les &lt;a href="http://docs.djangoproject.com/en/dev/topics/cache/" target="_blank"&gt;moteurs de cache&lt;/a&gt; de Django pour d&amp;eacute;charger un peu votre base de donn&amp;eacute;es. Je reviendrai &amp;eacute;galement dans un futur article sur une m&amp;eacute;thode de cache de fichiers HTML statiques (par langue) qui permettra un gain notable de performances.&lt;/p&gt;
</description><pubDate>Tue, 08 Mar 2011 12:22:25 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/internationaliser-application-django-multilingual-ng/</guid></item><item><title>jQuery mobile (et Django)</title><link>http://valentinbourgoin.net/blog/article/mettre-en-place-une-version-mobile-jquery/</link><description>&lt;p&gt;&lt;a href="http://www.jquerymobile.com" target="_blank"&gt;jQuery mobile&lt;/a&gt;&amp;nbsp;est un framework Javascript orient&amp;eacute; interface utilisateur permettant, suivant le fameux concept du "write less, do more", de&amp;nbsp;&lt;strong&gt;mettre en place une version mobile pour son site web&lt;/strong&gt;. L'ergonomie est au coeur de la probl&amp;eacute;matique : comment proposer aux utilisateurs de terminaux mobiles une version de mon site rapide &amp;agrave; charger et ergonomique sur petit &amp;eacute;cran ?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dans cet article, vous verrez comment mettre en place jQuery mobile au sein d'une application &lt;a href="http://www.django-project.org" target="_blank"&gt;Django&lt;/a&gt;, pour l'exemple. L'architecture de cette application n'a rien &amp;agrave; voir avec jQuery mobile, donc n'h&amp;eacute;sitez pas &amp;agrave; le suivre quel que soit votre framework pr&amp;eacute;f&amp;eacute;r&amp;eacute;... La premi&amp;egrave;re partie sera plus g&amp;eacute;n&amp;eacute;raliste et vous permettra de comprendre comment adapter jQuery mobile &amp;agrave; n'importe quelle application.&lt;/p&gt;
&lt;h2&gt;Mise en place de jQuery mobile&lt;/h2&gt;
&lt;p&gt;jQuery mobile vous fournit toutes les donn&amp;eacute;es n&amp;eacute;cessaires (Javascript, AJAX et CSS) pour cr&amp;eacute;er des interfaces orient&amp;eacute;es utilisateurs de terminaux mobiles. Pour un usage basique, vous n'aurez donc aucune ligne de code &amp;agrave; &amp;eacute;crire vous-m&amp;ecirc;me, simplement &amp;agrave; copier / coller les exemples de la documentation.&lt;/p&gt;
&lt;p&gt;Nous allons cr&amp;eacute;er un nouveau set de templates, ind&amp;eacute;pendant de notre application, qui sera d&amp;eacute;di&amp;eacute; aux utilisateurs mobiles. L'utilisation du HTML5 est donc de rigueur ! Rendez-vous sur la &lt;a href="http://jquerymobile.com/demos/1.0a3/" target="_blank"&gt;documentation&lt;/a&gt; de jQuery mobile. Ce sera exactement le rendu que nous cherchons &amp;agrave; avoir. Examinez donc le code source de la premi&amp;egrave;re page : vous devrez utiliser la m&amp;ecirc;me structure.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Template de base&lt;/h3&gt;
&lt;p&gt;Voici votre template de base :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8" /&amp;gt;
    &amp;lt;title&amp;gt;Mon site | Version mobile&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" /&amp;gt;
    &amp;lt;link rel="stylesheet" href="/media/css/mobile.css" /&amp;gt;
    &amp;lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div data-role="page" data-theme="b"&amp;gt;
	&amp;lt;!-- Header, &amp;eacute;ventuellement --&amp;gt;
	&amp;lt;!-- Contenu --&amp;gt;
	&amp;lt;div data-role="content"&amp;gt;
	&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
	&amp;lt;/body&amp;gt;
	&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Vous constatez que vous n'avez aucun fichier &amp;agrave; h&amp;eacute;berger sur votre serveur : nous chargeons le CSS et les images directement en ligne. En partant du principe que le serveur de jQuery est plus r&amp;eacute;actif que le votre (sans offense), cela vous permettra de gagner du temps sur la dur&amp;eacute;e de chargement des m&amp;eacute;dias.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Les listes&lt;/h3&gt;
&lt;p&gt;jQuery mobile fonctionne avec des listes HTML basiques. L&amp;agrave; encore, vous n'avez qu'&amp;agrave; copier coller le code de la documentation, et &amp;agrave; tester pour voir le rendu.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tout votre contenu devra se placer dans la div data-role "content". Cr&amp;eacute;ez une liste de la fa&amp;ccedil;on suivante :&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;div data-role="content"&amp;gt;
    &amp;lt;ul data-role="listview" data-insert="true" data-theme="b" data-dividertheme="b"&amp;gt;
	&amp;lt;li data-role="list-divider"&amp;gt;Titre de la liste&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;&amp;lt;a href="page2/"&amp;gt;Page 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;&amp;lt;a href="page3/"&amp;gt;Page 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
	&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p&gt;Vous aurez ainsi une liste d&amp;eacute;j&amp;agrave; styl&amp;eacute;e gr&amp;acirc;ce au CSS de jQuery mobile. Notez que vous pouvez modifier le th&amp;egrave;me de chaque &amp;eacute;l&amp;eacute;ment poss&amp;eacute;dant l'attribut "data-theme", en lui donnant une valeur de a &amp;agrave; e. &lt;a href="http://jquerymobile.com/demos/1.0a3/docs/api/themes.html" target="_blank"&gt;Voici la correspondance au niveau design&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Le fonctionnement&lt;/h3&gt;
&lt;p&gt;jQuery mobile va suivre les liens de votre templates en cr&amp;eacute;ant une requ&amp;ecirc;te AJAX afin de ne pas raffra&amp;icirc;chir la page (= gain de performance), avec en prime une petite animation de slide (par d&amp;eacute;faut). Cr&amp;eacute;ez donc simpement les pages correspondant &amp;agrave; vos liens, avec la m&amp;ecirc;me structure que votre template de base. Le contenu de la div data-role "content" sera r&amp;eacute;-inject&amp;eacute; dans votre page.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous pouvez &amp;eacute;galement ajouter un header proposant un lien de retour :&lt;/p&gt;
&lt;pre class="brush: css"&gt;&amp;lt;div data-role="header" data-theme="b"&amp;gt;
    &amp;lt;h1&amp;gt;Portfolio&amp;lt;/h1&amp;gt;
    &amp;lt;a href="../" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home"&amp;gt;Accueil&amp;lt;/a&amp;gt;
	&amp;lt;/div&amp;gt;&amp;nbsp;&lt;/pre&gt;
&lt;h3&gt;Personnalisation&lt;/h3&gt;
&lt;p&gt;Voil&amp;agrave; pour le fonctionnement de base. Vous pouvez &amp;eacute;vidememnt personnaliser les composants de vos listes en suivant la documentation. Il en existe beaucoup de g&amp;eacute;n&amp;eacute;riques. Si vous souhaitez modifier le CSS pour une personnalisation totale, il est &amp;eacute;galement tr&amp;egrave;s facile d'&amp;eacute;craser les r&amp;egrave;gles de base dans votre propre CSS (mobile.css, que nous avons li&amp;eacute;). Exemple :&lt;/p&gt;
&lt;pre class="brush: css"&gt;&amp;nbsp;.ui-li-divider &amp;nbsp;{ 
&amp;nbsp;&amp;nbsp; &amp;nbsp;background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#0091b6),color-stop(1,#0289ab)); 
}&lt;/pre&gt;
&lt;p&gt;Firebug vous aidera &amp;agrave; trouver la classe des &amp;eacute;lements que vous souhaitez personnaliser ! Pour plus d'informations sur jQuery mobile, je vous invite &amp;agrave; regarder cet &lt;a href="http://www.grafikart.fr/tutoriels/jquery-mobile-135" target="_blank"&gt;excellent tutoriel vid&amp;eacute;o par Grafikart&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;L'application Django&lt;/h2&gt;
&lt;p&gt;Voyons maintenant comment utiliser jQuery mobile au sein d'une application Django existante. Pour cela, nous allons cr&amp;eacute;er un module (views + templates) d&amp;eacute;di&amp;eacute;.&lt;/p&gt;
&lt;h3&gt;Le module mobile&lt;/h3&gt;
&lt;p&gt;Pourquoi ne pas modifier seulement les templates existants ? Plusieurs r&amp;eacute;ponses :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les querysets effectu&amp;eacute;es dans le contr&amp;ocirc;leur d'une vue "non-mobile" ne seront pas forc&amp;eacute;ment utilis&amp;eacute;es, vu qu'on n'affichera pas les m&amp;ecirc;mes donn&amp;eacute;es.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Comme on recherche avant tout la performance, on pr&amp;eacute;ferera supprimer toute requ&amp;ecirc;te inutile.&lt;/li&gt;
&lt;li&gt;Pour avoir un code plus clair !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cr&amp;eacute;ez donc le nouveau module :&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py startapp mobile&lt;/pre&gt;
&lt;p&gt;Comme d'habitude, ajoutez l'application &amp;agrave; vos installations via settings.py :&lt;/p&gt;
&lt;pre class="brush: python"&gt;INSTALLED_APPS = (
    [...]
    'myproject.mobile',
)&lt;/pre&gt;
&lt;p&gt;Et les URLs, dans urls.py :&lt;/p&gt;
&lt;pre class="brush: python"&gt;urlpatterns = patterns('',
    [...],
    (r'^mobile/', include('myproject.mobile.urls')),
)&lt;/pre&gt;
&lt;h3&gt;&amp;nbsp;Les urls et vues&lt;/h3&gt;
&lt;p&gt;Dans mobile/views.py, cr&amp;eacute;ez une vue pour chacune des pages de votre application. Pour rester dans l'exemple : home, page1 et page2 :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.shortcuts import render_to_response

def home(request):
    return render_to_response(
        'mobile/home.html'
        {},
        context_instance=RequestContext(request)
    )
def page1(request):
     return render_to_response(
         'mobile/page1.html'
         {},
         context_instance=RequestContext(request)
     )  

def page2(request):
     return render_to_response(
         'mobile/page2.html'
         {},
         context_instance=RequestContext(request)
     )&lt;/pre&gt;
&lt;p&gt;Puis, reliez ces vues avec les URLs, dans mobile/urls.py :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.conf.urls.defaults import *
from myproject.apps.mobile.views import *

urlpatterns = patterns('',
    url(r'^$', home, name='home'),
    url(r'^page1/$', page1, name='page1'),
    url(r'^page2/$', page2, name='page2'),
)&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size: 12px; font-weight: bold;"&gt;Les templates&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour les templates, vous pouvez r&amp;eacute;utiliser la structure donn&amp;eacute;e au-dessus. Par exemple, templates/layout/base_mobile.html :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8" /&amp;gt;
    &amp;lt;title&amp;gt;{% block title %}Mon site | Version mobile{% endblock title %}&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" /&amp;gt;
    &amp;lt;link rel="stylesheet" href="/media/css/mobile.css" /&amp;gt;
    &amp;lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div data-role="page" data-theme="b"&amp;gt;
	{% block header %}{% endblock header %}
	&amp;lt;div data-role="content"&amp;gt;
	{% block content %}{% endblock content %}
	&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
	&amp;lt;/body&amp;gt;
	&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;Et le template de la home (templates/mobile/home.html) :&lt;/p&gt;
&lt;pre class="brush: html"&gt;{% extends "layout/base_mobile.html" %}
{% block header %}
&amp;lt;div data-role="header" data-theme="b"&amp;gt;
    &amp;lt;h1&amp;gt;Portfolio&amp;lt;/h1&amp;gt;
    &amp;lt;a href="../" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home"&amp;gt;Accueil&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&amp;nbsp;
{% endblock header %}

{% block content %}
&amp;lt;ul data-role="listview" data-insert="true" data-theme="b" data-dividertheme="b"&amp;gt;
        &amp;lt;li data-role="list-divider"&amp;gt;Titre de la liste&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;a href="page2/"&amp;gt;Page 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;a href="page3/"&amp;gt;Page 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
{% endblock content %}&lt;/pre&gt;
&lt;p&gt;Faites de m&amp;ecirc;me pour les diff&amp;eacute;rentes pages.&lt;/p&gt;
&lt;h2&gt;Rediriger l'utilisateur mobile&lt;/h2&gt;
&lt;p&gt;Vous devez maintenant pouvoir naviguer sur votre version mobile &amp;agrave; l'adresse mobile/. Maintenant, on voudrait que l'utilisateur d'un terminal mobile soit automatiquement r&amp;eacute;dirig&amp;eacute; vers cette URL. Pour cela, on va utiliser (et adapter)&amp;nbsp;&lt;a href="https://github.com/gregmuellegger/django-mobile" target="_blank"&gt;django-mobile&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Installer django-mobile&lt;/h3&gt;
&lt;p&gt;T&amp;eacute;l&amp;eacute;chargez et installez l'archive en suivant la &lt;a href="https://github.com/gregmuellegger/django-mobile/blob/master/README.rst" target="_blank"&gt;documentation&lt;/a&gt;. Vous devrez :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installer le package.&lt;/li&gt;
&lt;li&gt;Ajouter django-mobile &amp;agrave; vos INSTALLED_APPS.&lt;/li&gt;
&lt;li&gt;Ajouter les middlewares dans le bon ordre.&lt;/li&gt;
&lt;li&gt;Ajouter le template loader et le context processor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Utiliser un d&amp;eacute;corateur&lt;/h3&gt;
&lt;p&gt;Pour finir, nous allons d&amp;eacute;corer chacune des vues de l'application (non-mobile) pour rediriger automatiquement les utilisateurs mobiles. Pour ce faire, placez dans le r&amp;eacute;pertoire mobile/ un nouveau fichier decorators.py :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.http import HttpResponseRedirect
from functools import wraps
from django_mobile import get_flavour

def mobile_redirection(url):
    def decorator(func):
        def inner_decorator(request, *args, **kwargs)
            flavour = get_flavour()
            if flavour == 'mobile':
                return HttpResponseRedirect('mobile%s' % url)
            else:
                return func(request, *args, **kwargs)
        return wraps(func)(inner_decorator)
    return decorator&lt;/pre&gt;
&lt;p&gt;Ce d&amp;eacute;corateur s'utilise de la fa&amp;ccedil;on suivante. Dans les vues de votre application :&lt;/p&gt;
&lt;pre class="brush: python"&gt;@mobile_redirection('/')
def home_page(request):
[...]&lt;/pre&gt;
&lt;p&gt;L'utilisateur mobile sera alors automatiquement redirig&amp;eacute; vers /mobile/. Pour modifier cette URL, passez-le en param&amp;egrave;tre du d&amp;eacute;corateur. Par exemple '/page1/' redirigera vers mobile/page1/.&lt;/p&gt;
&lt;p&gt;Testez en appelant votre URL depuis un terminal mobile. Vous devriez &amp;ecirc;tre redirig&amp;eacute; automatiquement (comme sur &lt;a href="http://www.valentinbourgoin.net" target="_blank"&gt;http://www.valentinbourgoin.net&lt;/a&gt;) !&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Changer de version manuellement&lt;/h3&gt;
&lt;p&gt;Enfin, si vous souhaitez proposer un lien pour changer de version manuellement, il vous suffit d'utiliser une sp&amp;eacute;cificit&amp;eacute; de django-mobile en appelant les URLs suivantes :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/?flavour=mobile pour la version mobile.&lt;/li&gt;
&lt;li&gt;/?flavour=full pour la version compl&amp;egrave;te.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Sun, 06 Mar 2011 12:37:19 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/mettre-en-place-une-version-mobile-jquery/</guid></item><item><title>Disqus : plateforme de commentaires</title><link>http://valentinbourgoin.net/blog/article/mettre-en-place-une-plateforme-de-commentaires-grace-disqus/</link><description>&lt;p&gt;&lt;strong&gt;Submerg&amp;eacute; par les spams&lt;/strong&gt;, j'ai d&amp;eacute;cid&amp;eacute; d'abandonner mon bon vieux syst&amp;egrave;mes de commentaires cod&amp;eacute; &amp;agrave; la mano au sein de mon application Django pour un module plus souple. &lt;a href="http://www.disqus.com"&gt;Disqus&lt;/a&gt;&amp;nbsp;semblait r&amp;eacute;pondre &amp;agrave; mes besoins. Voici la marche &amp;agrave; suivre pour l'installer sur un blog (ou un site). Avec, en prime, la m&amp;eacute;thode pour importer vos anciens commentaires...&lt;/p&gt;
&lt;h2&gt;Disqus&lt;/h2&gt;
&lt;p&gt;Disqus est donc un &lt;strong&gt;syst&amp;egrave;mes de gestion de commentaires externalis&amp;eacute;&lt;/strong&gt; qui comporte, en plus des classiques, un certain nombre de fonctionnalit&amp;eacute;s int&amp;eacute;ressantes. Par exemple, il propose l'identification par le biais d'un service tiers (Facebook, Twitter, OpenID, etc.), le suivi de conversation par RSS ou e-mail, le classement de commentaires par popularit&amp;eacute; (likes)... De plus, son mode de fonctionnement est assez original, puisque les discussions sont organis&amp;eacute;es par "threads" de questions / r&amp;eacute;ponses, comme sur un forum.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://valentinbourgoin.net/media/img/upload/screen-disqus.jpg" alt="" width="300" height="193" /&gt;&lt;/p&gt;
&lt;p&gt;Disqus est utilis&amp;eacute; sur des sites &amp;agrave; fort traffic comme Techcrunch (exemple ci-dessus), CNN, ou encore Fox news. Le tout propuls&amp;eacute;... par Django !&lt;/p&gt;
&lt;p&gt;Quelques d&amp;eacute;tails d&amp;eacute;sacr&amp;eacute;ables tout de m&amp;ecirc;me :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disqus charge les commentaires en Javascript. Le contenu de ceux-ci ne sera donc pas r&amp;eacute;f&amp;eacute;renc&amp;eacute;.&lt;/li&gt;
&lt;li&gt;Il faut &amp;ecirc;tre pr&amp;ecirc;t &amp;agrave; confier son syst&amp;egrave;mes de commentaires (et ses donn&amp;eacute;es) &amp;agrave; une plateforme externe. Mais Disqus permet un import/export relativement facile (nous y reviendrons), donc on peut tout de m&amp;ecirc;me r&amp;eacute;cup&amp;eacute;rer ses commentaires si on d&amp;eacute;cide d'abandonner le syst&amp;egrave;me.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Commencez par cr&amp;eacute;er un compte Disqus ainsi qu'un site. Vous &amp;ecirc;tes maintenant pr&amp;ecirc;t &amp;agrave; installer le module. Vous allez voir qu'il est possible de l'installer sur des plateformes de blogs basiques, sous Django ou encore &amp;agrave; la main...&lt;/p&gt;
&lt;h3&gt;Plateformes de blog&lt;/h3&gt;
&lt;p&gt;Un des gros avantages de Disqus, c'est qu'il est directement installable sur les plateformes de blogs les plus courantes, sous la forme d'un plug-in. Pas besoin de mettre les mains dans le cambouis, donc ; juste &amp;agrave; le configurer. Sont compatibles : Wordpress, Blogger, Tumblr, Drupal, Joomla... Vous trouverez la liste sur la page d'installation de l'interface d'administration de Disqus.&lt;/p&gt;
&lt;h3&gt;Sous Django&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://github.com/arthurk/django-disqus"&gt;Django-disqus&lt;/a&gt;, comme son nom l'indique, permet d'utiliser disqus au sein d'un projet Django. Commencez par t&amp;eacute;l&amp;eacute;charger le package est l'installer. Vous devez ensuite l'importer dans les param&amp;egrave;tres de votre application. Ainsi, dans &lt;strong&gt;settings.py&lt;/strong&gt; :&lt;/p&gt;
&lt;pre class="brush: python"&gt;INSTALLED_APPS = (
     ...
     'disqus',
 )

 DISQUS_API_KEY = 'FOOBARFOOBARFOOBARFOOBARFOOBARF'
 DISQUS_WEBSITE_SHORTNAME = 'foobar'&lt;/pre&gt;
&lt;p&gt;Note : pour r&amp;eacute;cup&amp;eacute;rer votre cl&amp;eacute; d'API, il vous &amp;ecirc;tre logg&amp;eacute; sous Disqus et consulter la page suivante :&amp;nbsp;&lt;a href="http://disqus.com/api/get_my_key/"&gt;http://disqus.com/api/get_my_key/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite, c'est tr&amp;egrave;s simple. Django-disqus permet, par l'utilisation de templatetags, de charger le module de commentaire en une ligne. &amp;nbsp;En haut de votre template concern&amp;eacute;, il vous suffit d'&amp;eacute;crire :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;{% load disqus_tags %}
{% disqus_dev %} &amp;lt;!-- Si vous &amp;ecirc;tes en local --&amp;gt;&lt;/pre&gt;
&lt;p&gt;Puis, &amp;agrave; l'endroit o&amp;ugrave; vous voulez afficher les commentaires et le formulaire :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;{% disqus_show_comments %}&lt;/pre&gt;
&lt;p&gt;Le code Javascript sera alors g&amp;eacute;n&amp;eacute;r&amp;eacute;... et les commentaires affich&amp;eacute;s ! Vous pourrez alors le personnaliser depuis votre interface d'administration Disqus. Plus d'informations sur les templatetags dans &lt;a href="https://github.com/arthurk/django-disqus/tree/master/docs"&gt;la documentation du plug-in&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;A la main&lt;/h3&gt;
&lt;p&gt;Pour les non-djangonautes, pas de panique, l'installation &amp;agrave; la main est presque aussi facile. Il vous suffit d'utiliser ce code Javascript pour afficher les commentaires et leur formulaire :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: js"&gt;&amp;lt;div id="disqus_thread"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = 'example'; // required: replace example with your forum shortname

    // The following are highly recommended additional parameters. Remove the slashes in front to use.
    // var disqus_identifier = 'unique_dynamic_id_1234';
    // var disqus_url = 'http://example.com/permalink-to-page.html';

    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
&amp;lt;/script&amp;gt;
&amp;lt;noscript&amp;gt;Please enable JavaScript to view the &amp;lt;a href="http://disqus.com/?ref_noscript"&amp;gt;comments powered by Disqus.&amp;lt;/a&amp;gt;&amp;lt;/noscript&amp;gt;
&amp;lt;a href="http://disqus.com" class="dsq-brlink"&amp;gt;blog comments powered by &amp;lt;span class="logo-disqus"&amp;gt;Disqus&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;p&gt;C'est tout ! Les autres fonctionnalit&amp;eacute;s sont expliqu&amp;eacute;es sur &lt;a href="http://docs.disqus.com/developers/universal/"&gt;cette page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Personnalisation&lt;/h2&gt;
&lt;p&gt;Une fois Disqus install&amp;eacute;, vous pouvez &lt;strong&gt;personnaliser l'affichage de vos commentaires&lt;/strong&gt; comme bon vous semble. Vous pouvez choisir un th&amp;egrave;me via l'interface d'administration, ouvrir ou fermer certaines fonctionnalit&amp;eacute;s (likes, permaliens...), ou m&amp;ecirc;me modifier vous-m&amp;ecirc;me le CSS.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Les possibilit&amp;eacute;s sont donc quasi-infinies, et vous pourrez avoir tr&amp;egrave;s facilement un design moins g&amp;eacute;n&amp;eacute;rique et se mariant parfaitement avec le th&amp;egrave;me de votre blog (hm, chose que je n'ai pas forc&amp;eacute;ment faite).&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Import des anciens commentaires&lt;/h2&gt;
&lt;p&gt;Enfin, si votre blog comportait d'anciens commentaires avant l'impl&amp;eacute;mentation de Disqs, vous ne voulez pas forc&amp;eacute;ment vous en s&amp;eacute;parer... Si vous poss&amp;eacute;dez une plateforme de blog (Wordpress, Blogger), il existe un plug-in vous permettant&lt;strong&gt; d'exporter vos commentaires&lt;/strong&gt;. Dans l'interface d'administration, allez dans "Tools", puis "Import / Export". Vous verrez les plateformes compatibles.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Si ce n'est pas le cas et que votre appli Django utilise &lt;strong&gt;django-comments&lt;/strong&gt;, vous allez pouvoir exporter vos donn&amp;eacute;es g&amp;acirc;ce &amp;agrave;&amp;nbsp;&lt;a href="http://github.com/arthurk/django-disqus"&gt;Django-disqus&lt;/a&gt;. En effet, le package comporte les commandes n&amp;eacute;cessaires our g&amp;eacute;n&amp;eacute;rer l'export au bon format. Vous pouvez suivre la marche &amp;agrave; suivre &lt;a href="https://github.com/arthurk/django-disqus/blob/master/docs/commands.rst"&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, si vous devez exporter vos commentaires &amp;agrave; la main, vous pouvez utiliser le format &lt;strong&gt;WXR &lt;/strong&gt;de Wordpress, pris en charge par Disqus. Il vous suffit d'&amp;eacute;crire un petit script g&amp;eacute;n&amp;eacute;rant un fichier XML conforme aux sp&amp;eacute;cifications de WXR, et en l'uploadant dans l'interface. Par exemple, voici le template que j'ai utilis&amp;eacute; (attention, pensez bien &amp;agrave; l'encodage du fichier) :&lt;/p&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;rss version="2.0"&lt;span&gt; &lt;/span&gt;xmlns:excerpt="http://wordpress.org/export/1.0/excerpt/"&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   xmlns:content="http://purl.org/rss/1.0/modules/content/"&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   xmlns:wfw="http://wellformedweb.org/CommentAPI/"&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   xmlns:dc="http://purl.org/dc/elements/1.1/"&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   xmlns:wp="http://wordpress.org/export/1.0/"&amp;gt;&lt;br /&gt;
&amp;lt;channel&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;title&amp;gt;{{ site.title }}&amp;lt;/title&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;link&amp;gt;{{ site.url }}&amp;lt;/link&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;description&amp;gt;{{ site.description }}&amp;lt;/description&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;pubDate&amp;gt;{% now|date:"D, d M Y H:i:s" %}&amp;lt;/pubDate&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;generator&amp;gt;http://wordpress.org/?v=3.0.4&amp;lt;/generator&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;language&amp;gt;fr&amp;lt;/language&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;wp:wxr_version&amp;gt;1.0&amp;lt;/wp:wxr_version&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;wp:base_site_url&amp;gt;{{ site.url }}&amp;lt;/wp:base_site_url&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;wp:base_blog_url&amp;gt;{{ site.url }}&amp;lt;/wp:base_blog_url&amp;gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;   &amp;lt;generator&amp;gt;http://wordpress.org/?v=3.0.4&amp;lt;/generator&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;{% for entry in entries %}&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;     &amp;lt;item&amp;gt;&lt;span&gt; &lt;/span&gt;&amp;lt;title&amp;gt;{{ entry.title }}&amp;lt;/title&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;link&amp;gt;{{ site_url }}{{ entry.get_absolute_url }}&amp;lt;/link&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;pubDate&amp;gt;{{ entry.publication_date|date:"D, d M Y H:i:s" }}&amp;lt;/pubDate&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;dc:creator&amp;gt;&amp;lt;![CDATA[{{ entry.user }}]]&amp;gt;&amp;lt;/dc:creator&amp;gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;guid isPermaLink="false"&amp;gt;{{ site_url }}{{ entry.get_absolute_url }}&amp;lt;/guid&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;content:encoded&amp;gt;&amp;lt;![CDATA[{{ entry.body }}]]&amp;gt;&amp;lt;/content:encoded&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_id&amp;gt;{{ entry.id }}&amp;lt;/wp:post_id&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_date&amp;gt;{{ entry.publication_date|date:"D, d M Y H:i:s" }}&amp;lt;/wp:post_date&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_date_gmt&amp;gt;{{ entry.publication_date|date:"D, d M Y H:i:s" }}&amp;lt;/wp:post_date_gmt&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:comment_status&amp;gt;open&amp;lt;/wp:comment_status&amp;gt;&lt;span&gt; &lt;/span&gt;&amp;lt;wp:ping_status&amp;gt;open&amp;lt;/wp:ping_status&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_name&amp;gt;{{ entry.slug }}&amp;lt;/wp:post_name&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:status&amp;gt;publish&amp;lt;/wp:status&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_parent&amp;gt;0&amp;lt;/wp:post_parent&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:menu_order&amp;gt;0&amp;lt;/wp:menu_order&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:post_type&amp;gt;post&amp;lt;/wp:post_type&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&amp;lt;wp:is_sticky&amp;gt;0&amp;lt;/wp:is_sticky&amp;gt;&lt;br /&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     {% for com in entry.entrycomment_set.all %}&lt;span&gt; &lt;br /&gt;&lt;/span&gt;     &amp;lt;wp:comment&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_id&amp;gt;{{ com.id }}&amp;lt;/wp:comment_id&amp;gt;          &lt;br /&gt;          &amp;lt;wp:comment_author&amp;gt;&amp;lt;![CDATA[{{ com.author }}]]&amp;gt;&amp;lt;/wp:comment_author&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_author_email&amp;gt;{{ com.email }}&amp;lt;/wp:comment_author_email&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_author_url&amp;gt;{{ com.website }}&amp;lt;/wp:comment_author_url&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_author_IP&amp;gt;{{ com.ip }}&amp;lt;/wp:comment_author_IP&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_date&amp;gt;{{ com.publication_date|date:"D, d M Y H:i:s" }}&amp;lt;/wp:comment_date&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_date_gmt&amp;gt;{{ com.publication_date|date:"D, d M Y H:i:s" }}&amp;lt;/wp:comment_date_gmt&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_content&amp;gt;&amp;lt;![CDATA[{{ com.content }}]]&amp;gt;&amp;lt;/wp:comment_content&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_approved&amp;gt;1&amp;lt;/wp:comment_approved&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;          &amp;lt;wp:comment_parent&amp;gt;0&amp;lt;/wp:comment_parent&amp;gt;&lt;br /&gt;     &amp;lt;/wp:comment&amp;gt;&lt;br /&gt;   {% endfor %}&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;{% endfor %}&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;/channel&amp;gt;&lt;br /&gt;&amp;lt;/rss&amp;gt;&lt;/pre&gt;
</description><pubDate>Fri, 25 Feb 2011 17:29:07 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/mettre-en-place-une-plateforme-de-commentaires-grace-disqus/</guid></item><item><title>Combien facturer en freelance ?</title><link>http://valentinbourgoin.net/blog/article/freelance-combien-facturer/</link><description>&lt;p&gt;Une fois lanc&amp;eacute; en freelance, vous vous retrouvez devant une grave probl&amp;eacute;matique :&lt;strong&gt; comment fixer votre tarif journalier &lt;/strong&gt;?&amp;nbsp;Vous devez garder en vue la concurrence, &amp;eacute;videmment, et d&amp;eacute;finir un prix concurrentiel sans pour autant vous solder.&lt;/p&gt;
&lt;p&gt;Je vous propose un calcul simple, facile &amp;agrave; mettre en oeuvre.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Commencez par r&amp;eacute;fl&amp;eacute;chir &amp;agrave; combien vous voudriez gagner par mois. Sans l'ACCRE, vous devrez payer environ &lt;strong&gt;30% de charge + imp&amp;ocirc;ts sur le revenu&lt;/strong&gt;. Je vous conseille &amp;eacute;galement de conserver &lt;strong&gt;20%&lt;/strong&gt; de chaque facture pour les frais professionnels annexes basiques. Par exemple, donc, pour avoir &lt;strong&gt;1500 &amp;euro; net&lt;/strong&gt; dans votre poche &amp;agrave; la fin du mois :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total de 3000 &amp;euro; &amp;agrave; facturer.&lt;/li&gt;
&lt;li&gt;900 &amp;euro; de charges.&lt;/li&gt;
&lt;li&gt;600 &amp;euro; de frais annexes (ou de secours).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez partir sur &lt;strong&gt;3 jours de travail factur&amp;eacute;s par semaine&lt;/strong&gt;. Pourquoi seulement 3 ? Car votre temps pass&amp;eacute; en comptabilit&amp;eacute;, devis, rendez-vous clients, etc. ne seront eux pas factur&amp;eacute;s. Vous devrez donc r&amp;eacute;aliser votre chiffre d'affaire mensuel sur... 12 jours. Si on divise 3000 &amp;euro; par 12, on obtient votre tarif journalier moyen :&lt;strong&gt; 250 &amp;euro;&lt;/strong&gt;. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pensez &amp;eacute;galement &amp;agrave; &lt;strong&gt;diff&amp;eacute;rencier vos prix&lt;/strong&gt; en fonction de vos taches afin de donner une r&amp;eacute;elle valeur &amp;agrave; vos comp&amp;eacute;tences. Typiquement, de l'int&amp;eacute;gration HTML ne sera pas factur&amp;eacute;e au m&amp;ecirc;me prix que du d&amp;eacute;veloppement Python. Cela permet &amp;eacute;galement de r&amp;eacute;fl&amp;eacute;chir sur la gestion de votre temps, et ce d&amp;egrave;s l'&amp;eacute;tape du devis.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Voici, d'apr&amp;egrave;s mon exp&amp;eacute;rience, &lt;strong&gt;des taux journaliers honn&amp;ecirc;tes&lt;/strong&gt; pour un autoentrepreneur d&amp;eacute;butant en r&amp;eacute;gion parisienne.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Int&amp;eacute;gration HTML : 350 &amp;euro;.&lt;/li&gt;
&lt;li&gt;D&amp;eacute;veloppement front / back : 400 &amp;euro;.&lt;/li&gt;
&lt;li&gt;Suivi de projet / conception : 450 &amp;euro;.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 07 Feb 2011 10:02:27 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/freelance-combien-facturer/</guid></item><item><title>Autoentrepreneur : premier bilan</title><link>http://valentinbourgoin.net/blog/article/autoentrepreneur-premier-bilan/</link><description>&lt;p&gt;Il y a tout juste 6 mois, je me lan&amp;ccedil;ais dans l'aventure de l'(auto-)entrepreneuriat. Aujourd'hui, c'est l'heure d'en dresser le premier bilan. &lt;strong&gt;Humain&lt;/strong&gt;, tout d'abord, mais aussi &lt;strong&gt;financier &lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;"En &amp;eacute;tant d&amp;eacute;veloppeur web freelance, combien on gagne ? Comment on vit ? Un CDI, c'est pas mieux ?"&lt;/p&gt;
&lt;p&gt;Je vais tenter de r&amp;eacute;pondre &amp;agrave; toutes ces questions en &lt;strong&gt;partageant mon exp&amp;eacute;rience&lt;/strong&gt; !&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Mon cas&lt;/h2&gt;
&lt;p&gt;Tout d'abord, petit pr&amp;eacute;ambule sur mon cas. On peut &amp;ecirc;tre autoentrepreneur en parall&amp;egrave;le de ses &amp;eacute;tudes ou d'un autre travail, mais on peut aussi l'&amp;ecirc;tre &lt;strong&gt;&amp;agrave; temps plein&lt;/strong&gt;. C'est mon cas, depuis cet &amp;eacute;t&amp;eacute;. Je poss&amp;eacute;dais un statut de travailleur ind&amp;eacute;pendant depuis 2006, qui m'a permis de me familiariser avec le concept de devis et de facturation pendant mes &amp;eacute;tudes.&lt;/p&gt;
&lt;p&gt;Puis, apr&amp;egrave;s mon dipl&amp;ocirc;me d'ing&amp;eacute;nieur et un an de CDI, j'ai d&amp;eacute;cid&amp;eacute; de me lancer. Un sacr&amp;eacute; pari, puisque ce qui n'&amp;eacute;tait alors qu'une entr&amp;eacute;e d'argent d'appoint allait devoir devenir mon&lt;strong&gt; unique source de revenus&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Avec "seulement" un gros loyer en r&amp;eacute;gion parisienne - mais pas de labrador &amp;agrave; charge - cela semblait &amp;ecirc;tre le bon moment pour limiter la prise de risques qu'implique toute cr&amp;eacute;ation d'activit&amp;eacute;.&lt;/p&gt;
&lt;h2&gt;La vie de freelance&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;La vie de freelance - ou plus g&amp;eacute;n&amp;eacute;ralement de t&amp;eacute;l&amp;eacute;-travailleur - est &amp;agrave; double-tranchant. Effectivement, on gagne beaucoup de temps &amp;agrave; ne pas se d&amp;eacute;placer jusqu'&amp;agrave; son lieu de travail (puisqu'on y dort). Oui, on est libre dans les horaires. Mais... il y a un "mais".&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Quand on passe tes journ&amp;eacute;es chez soi, le plus souvent devant son ordinateur, il faut faire attention &amp;agrave; plusieurs choses. Tout d'abord, &amp;agrave;&lt;strong&gt; instaurer des r&amp;egrave;gles&lt;/strong&gt;, voire une routine. Sinon, on va rapidement se retrouver &amp;agrave; pratiquer des horaires compl&amp;egrave;tement d&amp;eacute;cal&amp;eacute;s : travailler la nuit, se lever tard... Donc, comme au bureau, se donner des horaires : 9h - 18h30 par exemple, avec une pause d&amp;eacute;jeuner... loin de l'ordinateur, de pr&amp;eacute;f&amp;eacute;rence !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ca parait b&amp;ecirc;te, mais il faut aussi... s'habiller ! C'est tentant de coder en cale&amp;ccedil;on, mais &amp;ccedil;a n'est pas tr&amp;egrave;s professionnel. Donc, m&amp;ecirc;me si l'ordinateur est &amp;agrave; 5 m&amp;egrave;tres du lit, &amp;eacute;viter la solution de facilit&amp;eacute; : se laver, s'habiller, et seulement apr&amp;egrave;s, travailler.&lt;/p&gt;
&lt;p&gt;Il faut aussi braver courageusement les blagues des copains. "Oh, t'es chez toi toute la journ&amp;eacute;e, tu fous rien de toutes fa&amp;ccedil;ons..." ou autre "Et &amp;ccedil;a va, le ch&amp;ocirc;mage ?". Ils sont juste jaloux car pendant qu'eux, ils sont dans le m&amp;eacute;tro, nous, on maximise notre productivit&amp;eacute;.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Les aides&lt;/h2&gt;
&lt;p&gt;Lorsqu'on d&amp;eacute;bute une activit&amp;eacute; ind&amp;eacute;pendante, on continue d'avoir le droit au &lt;strong&gt;ch&amp;ocirc;mage&lt;/strong&gt;. Pour ma part, j'ai eu la chance de b&amp;eacute;n&amp;eacute;ficier d'une rupture de contrat conventionnelle, donc j'avais quelques mois de ch&amp;ocirc;mage devant moi. Dans ce cas l&amp;agrave;, P&amp;ocirc;le Emploi propose deux formules :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Continuer de toucher ses droits en compl&amp;eacute;ment &amp;agrave; ses revenus d&amp;eacute;clar&amp;eacute;s chaque mois.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;B&amp;eacute;n&amp;eacute;ficier d'un capital, avec le versement de 50% de tous ses droits.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'avais le droit &amp;agrave; environ 1200 &amp;euro; de ch&amp;ocirc;mage, pendant 9 mois (ma p&amp;eacute;riode cotis&amp;eacute;e). J'avais donc le choix :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soit avoir 1200 &amp;euro; assur&amp;eacute;s chaque mois (exemple : je gagne 500 &amp;euro; un mois, on m'en verse 700 pour compl&amp;eacute;ter).&lt;/li&gt;
&lt;li&gt;Soit avoir 50% des 10 800 &amp;euro; de mes droits.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'ai opt&amp;eacute; pour la seconde solution. Je n'avais pas besoin d'un capital de d&amp;eacute;part (aucun achat de mat&amp;eacute;riel &amp;agrave; faire, aucun investissement pour mon activit&amp;eacute;), mais il me semblait que 1200 &amp;euro; mensuels seraient vite atteints. Le capital est vers&amp;eacute; en deux fois : une partie imm&amp;eacute;diatement, l'autre 6 mois apr&amp;egrave;s.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Seconde aide tr&amp;egrave;s importante pour les ch&amp;ocirc;meurs ou jeunes autoentrepreneurs : &lt;strong&gt;l'ACCRE&lt;/strong&gt;. Il s'agit d'une Aide &amp;agrave; la Cr&amp;eacute;ation d'Entreprise pour les moins de 26 ans, qui peuvent b&amp;eacute;n&amp;eacute;ficier d'une r&amp;eacute;duction des charges de fa&amp;ccedil;on d&amp;eacute;gressive pendant trois ans. Ainsi, au lieu de payer 20,3% de mon chiffre d'affaire, je commen&amp;ccedil;ais le premier trimestre avec environ 7%. Non n&amp;eacute;gligeable, donc !&lt;/p&gt;
&lt;h2&gt;Les clients&lt;/h2&gt;
&lt;p&gt;Se lancer en freelance, c'est bien... Mais encore faut-il avoir &lt;strong&gt;des clients&lt;/strong&gt; ! De mon d&amp;eacute;but d'activit&amp;eacute;, je retiens que cela fonctionne beaucoup par contacts. Il faut donc privil&amp;eacute;gier au maximum son carnet d'adresses : anciens &amp;eacute;l&amp;egrave;ves, stages, coll&amp;egrave;gues de promo... Mes premiers contrats sont venus &amp;agrave; moi sans que je n'aie besoin de prospecter !&lt;/p&gt;
&lt;p&gt;De plus, il faut penser &amp;agrave; avoir une bonne visibilit&amp;eacute; sur les r&amp;eacute;seaux sociaux. Un compte twitter actif plus ou moins s&amp;eacute;rieux qu'on arrose de news, un facebook pour l'auto-promotion, un viadeo, linkedin, etc. Sans &amp;ecirc;tre non plus un pro du marketing, pensez &amp;agrave; votre r&amp;eacute;f&amp;eacute;rencement. Google offre 50 &amp;euro; d'Adwords pour les auto-entrepreneurs, profitez-en pour vous essayer &amp;agrave; la pub !&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;La facturation&lt;/h2&gt;
&lt;p&gt;Une fois que vous poss&amp;eacute;dez vos premiers clients vient l'&amp;eacute;tape la plus critique : &lt;strong&gt;le devis / facturation&lt;/strong&gt;. Quelle d&amp;eacute;marche adopter ? Baisser les prix pour &amp;ecirc;tre tr&amp;egrave;s concurrentiel ? Conserver des prix normaux mais miser sur la pr&amp;eacute;sentation et la qualit&amp;eacute; technique de la livraison ?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A mon avis, baisser les prix pour se faire une place sur le march&amp;eacute; n'est vraiment pas la bonne solution. Bien s&amp;ucirc;r, vous pourrez d&amp;eacute;crocher des contrats plus facilement. Mais &amp;agrave; travailler en-dessous de votre vraie valeur, vous courrez &amp;agrave; votre perte. Il faut vous fixer un prix de Jour-Homme conforme &amp;agrave; votre niveau et &amp;agrave; votre activit&amp;eacute;, et vous y tenir. A vous de savoir l'expliquer... et le m&amp;eacute;riter.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Je reviendrai plus en d&amp;eacute;tail dans un prochain billet sur le meilleur moyen de fixer efficacement son tarif journalier.&lt;/p&gt;
&lt;h2&gt;Bilan financier et humain&lt;/h2&gt;
&lt;p&gt;Enfin, je vais conclure en dressant un rapide &lt;strong&gt;bilan financier et humain&lt;/strong&gt; de ces 6 mois d'activit&amp;eacute;.&amp;nbsp;Entre ao&amp;ucirc;t 2010 et janvier 2011, j'ai factur&amp;eacute; exactement 11 600 &amp;euro; (bruts). La grande majorit&amp;eacute; des contrats ont &amp;eacute;t&amp;eacute; sign&amp;eacute;s &amp;agrave; la fin de cette p&amp;eacute;riode, puisque le mois de d&amp;eacute;cembre repr&amp;eacute;sente 75% de ces revenus.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Alors, est-ce rentable, par rapport &amp;agrave; un CDI ? Il est encore trop t&amp;ocirc;t pour r&amp;eacute;pondre, car ces 6 premiers mois ont &amp;eacute;t&amp;eacute; assez longs &amp;agrave; se lancer.&amp;nbsp;Toutefois, le plafond annuel de revenus d'un autoentrepreneur &amp;eacute;tant &amp;agrave; 32 000 &amp;euro; bruts, si on s'en tient au calcul de la partie pr&amp;eacute;c&amp;eacute;dente (o&amp;ugrave; 50% de ses revenus finissent r&amp;eacute;ellement dans nos poches), on peut vite voir que non, ce n'est pas forc&amp;eacute;ment "rentable".&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Seulement, en terme de &lt;strong&gt;qualit&amp;eacute; de vie&lt;/strong&gt;, m&amp;ecirc;me s'il faut s'habituer &amp;agrave; ce mode de vie un peu sp&amp;eacute;cial (un emploi du temps tr&amp;egrave;s flexible et pas de salaire fixe), je suis plut&amp;ocirc;t s&amp;eacute;duit. Une fois les r&amp;egrave;gles &amp;eacute;tablies, m&amp;ecirc;me si &amp;ccedil;a arrive de devoir finir un livrable en urgence de nuit ou que plusieurs &amp;nbsp;projets nous tombent dessus en m&amp;ecirc;me-temps, le t&amp;eacute;l&amp;eacute;travail est vraiment appr&amp;eacute;ciable. Tout comme le fait de passer de projet en projet et de les suivre de A &amp;agrave; Z, en relation directe avec le client !&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il ne faut &amp;nbsp;pas se voiler la face et voir ce statut, ce mode de vie, comme ce qu'il est r&amp;eacute;ellement : &lt;strong&gt;un tremplin vers l'entrepreneuriat&lt;/strong&gt;. Un essai de cr&amp;eacute;ation d'entreprise, mais pas une fin en soi.&lt;/p&gt;
</description><pubDate>Fri, 04 Feb 2011 18:10:02 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/autoentrepreneur-premier-bilan/</guid></item><item><title>Projets Django à l'école IMAC</title><link>http://valentinbourgoin.net/blog/article/projets-django-l-ecole-imac/</link><description>&lt;p&gt;Pour terminer le semestre en beaut&amp;eacute;, les &amp;eacute;tudiants de l'&amp;eacute;cole d'ing&amp;eacute;nieur IMAC &lt;a href="../../../../blog/article/enseignements/"&gt;auxquels je donne cours&lt;/a&gt; avaient &amp;agrave; r&amp;eacute;aliser &lt;strong&gt;un projet en utilisant le framework Django &lt;/strong&gt;par &amp;eacute;quipes de 5 &amp;agrave; 7. Le &lt;a href="http://cours.valentinbourgoin.net/imac3/projets-imac3/" target="_blank"&gt;sujet&lt;/a&gt;&amp;nbsp;&amp;eacute;tait relativement libre : un site institutionnel, communautaire ou d'e-commerce. Voici le fruit de leurs 5 semaines de travail. Bravo &amp;agrave; eux !&lt;/p&gt;
&lt;h2&gt;Fac by car&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt; &lt;a href="http://facbycar.alwaysdata.net"&gt;http://facbycar.alwaysdata.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch &lt;/strong&gt;: Site de co-voiturage r&amp;eacute;serv&amp;eacute; aux &amp;eacute;tudiants de l'Universit&amp;eacute; de Marne-la-Vall&amp;eacute;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt; : Yacine&amp;nbsp;Arhaliass,&amp;nbsp;Floriane Brin, Camille Dutrouilh, Paul&amp;nbsp;Hillereau,&amp;nbsp;Samuel Maillot,&amp;nbsp;Virginie Ralli&amp;egrave;re, Cl&amp;eacute;ment Robein.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;MyApps5&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&lt;/strong&gt;&amp;nbsp;&lt;a href="http://myapps5.pandaco.net/"&gt;http://myapps5.pandaco.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Galerie d'applications HTML5.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://etudiant.univ-mlv.fr/~abenoist/portfolio/Accueil.html" target="_blank"&gt;Adrien Benoist&lt;/a&gt;, &lt;a href="http://ah.pandaco.net/" target="_blank"&gt;Alexandre Huynh&lt;/a&gt;, &lt;a href="http://etudiant.univ-mlv.fr/~ajard/site/index.html" target="_blank"&gt;Aurore Jard&lt;/a&gt;, &lt;a href="http://slinh.free.fr/" target="_blank"&gt;Sophie Linh&lt;/a&gt;,&amp;nbsp;Thi Thanh Trang Phan.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;IMAC Center&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse : &lt;/strong&gt;&lt;a href="http://imaccenter.alwaysdata.net/"&gt;http://imaccenter.alwaysdata.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: R&amp;eacute;seau social r&amp;eacute;serv&amp;eacute; aux &amp;eacute;tudiants de l'IMAC (futurs, actuels et anciens).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://www.lionelauge.com" target="_blank"&gt;Lionel Aug&amp;eacute;&lt;/a&gt;, &lt;a href="http://www.julien-issartel.com" target="_blank"&gt;Julien Issartel&lt;/a&gt;, Yoann Gobert, &lt;a href="http://ikram.naciri.free.fr/" target="_blank"&gt;Ikram Naciri&lt;/a&gt;, Jordan Valnet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;BuyBioFrance&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse : &lt;/strong&gt;&lt;a href="http://buybiofrance.alwaysdata.net"&gt;http://buybiofrance.alwaysdata.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Site d'e-commerce de produits bio en relation directe avec les producteurs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://karinechor.ovh.org/" target="_blank"&gt;Karine Chor&lt;/a&gt;, Ludivine Cl&amp;eacute;menceau, Vincent Hurbourque,&amp;nbsp;&lt;a href="http://etudiant.univ-mlv.fr/~nmartino/portfolio/" target="_blank"&gt;Nicolas Martino&lt;/a&gt;,&amp;nbsp;Mathieu Taillandier.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;MyGroupies&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://mygroupies.alwaysdata.net"&gt;http://mygroupies.alwaysdata.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Site communautaire &amp;agrave; l'attention de musiciens et organisateurs d'&amp;eacute;v&amp;egrave;nements.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://camillebossoutrot.net/" target="_blank"&gt;Camille Bossoutrot&lt;/a&gt;, Nassim Khiter, &lt;a href="http://arnaud.casella.perso.sfr.fr" target="_blank"&gt;Arnaud Casella&lt;/a&gt;, Sol&amp;egrave;le Le Borgne, S&amp;eacute;bastien Margheriti.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Cin&amp;eacute;-court&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://cinecourt.alwaysdata.net"&gt;http://cinecourt.alwaysdata.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;: Site communautaire de partage de courts m&amp;eacute;trages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://www.laetitia-cunin.net/" target="_blank"&gt;Laetitia Cunin&lt;/a&gt;, Julie Escoffier, Thibaut Fluteaux, Maxime Pasquali, Yann Nivet, Julie Trang.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Cin&amp;eacute;mac&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adresse :&amp;nbsp;&lt;/strong&gt;&lt;a href="http://geocoucou.alwaysdata.net"&gt;http://geocoucou.alwaysdata.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pitch&amp;nbsp;&lt;/strong&gt;:&amp;nbsp;Site d&amp;rsquo;e-learning communautaire destin&amp;eacute; aux &amp;eacute;tudiants en audiovisuel de l'&amp;eacute;cole IMAC.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Membres de l'agence&lt;/strong&gt;&amp;nbsp;:&amp;nbsp;&lt;a href="http://cmellany.free.fr/" target="_blank"&gt;M&amp;eacute;lanie Charbonnier&lt;/a&gt;, &lt;a href="http://luciecordina.net/" target="_blank"&gt;Lucie Cordina&lt;/a&gt;, Arnaud Dabouis, Quentin Dangles, Eric Hauchecorne, Rapha&amp;euml;l Vandon.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Merci &amp;eacute;galement &amp;agrave; &lt;a href="http://www.alwaysdata.com" target="_blank"&gt;Alwaysdata&lt;/a&gt;&amp;nbsp;pour &lt;strong&gt;l'h&amp;eacute;bergement Django de qualit&amp;eacute;&lt;/strong&gt; et &amp;agrave; Florian Thirion et Fabien Kapala pour m'avoir assist&amp;eacute; lors des pr&amp;eacute;sentations finales.&lt;/p&gt;
</description><pubDate>Tue, 14 Dec 2010 02:03:35 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/projets-django-l-ecole-imac/</guid></item><item><title>Enseignements web à l'IMAC</title><link>http://valentinbourgoin.net/blog/article/enseignements/</link><description>&lt;p&gt;Je donne depuis le mois d'avril dernier des &lt;strong&gt;cours &lt;/strong&gt;en Master 1 Informatique &amp;agrave; l'Universit&amp;eacute; de Marne-la-Vall&amp;eacute;e et depuis octobre &amp;agrave; l'&amp;eacute;cole d'ing&amp;eacute;nieur IMAC (1&amp;egrave;re et 3&amp;egrave;me ann&amp;eacute;es).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pour que mes &amp;eacute;tudiants retrouvent chaque semaine le bon TD, j'ai d&amp;eacute;velopp&amp;eacute;, en Django, une&lt;strong&gt; plateforme d&amp;eacute;di&amp;eacute;e&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Rien de tr&amp;egrave;s compliqu&amp;eacute;, beaucoup de copi&amp;eacute;s coll&amp;eacute;s de ce blog, un rafra&amp;icirc;chissement du CSS et le tour est jou&amp;eacute;. Si vous souhaitez y faire un tour, c'est par ici que &amp;ccedil;a se passe : &lt;a href="http://cours.valentinbourgoin.net"&gt;http://cours.valentinbourgoin.net&lt;/a&gt;. J'y parle d'int&amp;eacute;gration HTML, de jQuery, de PHP et un peu de Django. Forc&amp;eacute;ment.&lt;/p&gt;
</description><pubDate>Mon, 01 Nov 2010 02:16:00 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/enseignements/</guid></item><item><title>Django - l'interface d'administration</title><link>http://valentinbourgoin.net/blog/article/django-linterface-dadministration/</link><description>&lt;p&gt;Dans les articles pr&amp;eacute;c&amp;eacute;dents, nous avons &lt;a href="../../../../blog/article/creer-un-portfolio-avec-django-conception/"&gt;con&amp;ccedil;u la structure d'un futur portfolio Django&lt;/a&gt; et en avons &lt;a href="../../../../blog/article/creer-un-portfolio-avec-django-les-modeles/"&gt;d&amp;eacute;velopp&amp;eacute; les mod&amp;egrave;les&lt;/a&gt;. Maintenant, nous allons lancer&lt;strong&gt; l'interface d'administration&lt;/strong&gt; g&amp;eacute;n&amp;eacute;rique propos&amp;eacute;e par Django afin d'avoir la possibilit&amp;eacute; d'ajouter des donn&amp;eacute;es &amp;agrave; notre application.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cette derni&amp;egrave;re&amp;nbsp;nous permettra d'ajouter / &amp;eacute;diter / supprimer (&lt;acronym title="Create, Read, Update, Delete"&gt;CRUD&lt;/acronym&gt;) tous les objets que nous aurons d&amp;eacute;cid&amp;eacute; de rendre personnalisable.&lt;/p&gt;
&lt;h2&gt;Activer l'interface d'administration&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;Avant toute chose, il faut activer l'interface d'administration. Pour cela, dans votre fichier &lt;strong&gt;urls.py &lt;/strong&gt;(celui de la racine, correspondant &amp;agrave; votre projet), d&amp;eacute;commentez les deux lignes pour avoir un r&amp;eacute;sultat de la forme suivante :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Example:
    # (r'^mysite/', include('mysite.foo.urls')),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    &lt;strong&gt;(r'^admin/', include(admin.site.urls)),&lt;/strong&gt;
)&lt;/pre&gt;
&lt;p class="literal-block"&gt;Puis, dans settings.py, ajoutez l'interface d'administration dans les applications install&amp;eacute;es (si ce n'est pas d&amp;eacute;j&amp;agrave; le cas) :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: python"&gt;INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'website.apps.portfolio',
)&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Vous devez maintenant &lt;strong&gt;synchroniser la base de donn&amp;eacute;es&lt;/strong&gt; pour ajouter les tables correspondant &amp;agrave; l'admin :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py syncdb&lt;/pre&gt;
&lt;p&gt;Relancez votre serveur de d&amp;eacute;veloppement&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py runserver&lt;/pre&gt;
&lt;p&gt;et rendez-vous sur&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: shell"&gt;http://localhost:8000/admin/&lt;/pre&gt;
&lt;p&gt;Bienvenue sur l'interface d'administration de Django !&lt;/p&gt;
&lt;h2&gt;Personnaliser l'interface&lt;/h2&gt;
&lt;p&gt;Vous pouvez maintenant personnaliser les informations (ou plut&amp;ocirc;t les mod&amp;egrave;les) que vous voudrez modifier gr&amp;acirc;ce &amp;agrave; cette interface. Typiquement, pour notre portfolio, il s'agit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des &lt;strong&gt;cr&amp;eacute;ations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;De leurs &lt;strong&gt;images &lt;/strong&gt;respectives.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;tags &lt;/strong&gt;qui les d&amp;eacute;finissent.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous allez donc &amp;eacute;diter le fichier &lt;strong&gt;admin.py&lt;/strong&gt; de votre application (apps/portfolio/admin.py) et d&amp;eacute;finir une classe pour l'administration des cr&amp;eacute;ations, que vous allez relier au mod&amp;egrave;le Crea :&lt;/p&gt;
&lt;pre class="brush: python"&gt;from django.contrib import admin
from website.apps.portfolio.models import Crea, Tag, Pict

class CreaAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'creation_date', 'link')
    search_field = ('title', 'description')
    date_hierarchy = 'creation_date'
    prepopulated_fields = {'slug': ('title',)}

admin.site.register(Crea, CreaAdmin)&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;Si vous retournez sur la page de l'interface, vous verrez que vous pouvez maintenant &lt;strong&gt;ajouter et modifier vos objets Crea&lt;/strong&gt;. Nous allons maintenant faire de m&amp;ecirc;me avec les images et les tags. Seulement, vu qu'il s'agit-l&amp;agrave; d'objets li&amp;eacute;s entre eux (une ForeignKey), nous allons les ajouter directement &amp;agrave; la gestion des cr&amp;eacute;ations. Ainsi, quand vous voudrez ajouter une cr&amp;eacute;ation, vous pourrez g&amp;eacute;rer ses images et ses tags sur la m&amp;ecirc;me page. Pour cela, nous alons utiliser tr&amp;egrave;s simplement &lt;a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects"&gt;TabularInline &lt;/a&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;pre class="brush: python"&gt;class PictInline(admin.TabularInline):
    model = Pict

class TagInline(admin.TabularInline):
    model = Crea.tags.through&lt;/pre&gt;
&lt;p&gt;Ici, on mappe directement la classe d'administration avec le mod&amp;egrave;le. Concernant les tags, on utilise le mot cl&amp;eacute; through pour r&amp;eacute;cup&amp;eacute;rer la relation en elle-m&amp;ecirc;me (il s'agit d'une ManyToMany). Vous n'aurez plus qu'&amp;agrave; ajouter ces classes Tabular &amp;agrave; la classe CreaAdmin :&lt;/p&gt;
&lt;pre class="brush: python"&gt;class CreaAdmin(admin.ModelAdmin):
    [...]
    inlines = [PictInline, TaskInline]&lt;/pre&gt;
&lt;p&gt;D&amp;eacute;sormais, dans l'interface d'administration, vous pourrez g&amp;eacute;rer vos &lt;strong&gt;cr&amp;eacute;ations&lt;/strong&gt;, les &lt;strong&gt;images &lt;/strong&gt;et les &lt;strong&gt;tags &lt;/strong&gt;sur la m&amp;ecirc;me page !&lt;/p&gt;
&lt;p&gt;Dans le prochain article, nous aborderons le c&amp;ocirc;t&amp;eacute; front et nous concentrerons sur&lt;strong&gt; les vues&lt;/strong&gt;. R&amp;eacute;visez votre &lt;a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur"&gt;MVC&lt;/a&gt; !&lt;/p&gt;
</description><pubDate>Wed, 15 Sep 2010 15:52:19 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/django-linterface-dadministration/</guid></item><item><title>Créer un portfolio avec Django - Les modèles</title><link>http://valentinbourgoin.net/blog/article/creer-un-portfolio-avec-django-les-modeles/</link><description>&lt;p&gt;Dans &lt;a href="../../../../blog/article/creer-un-portfolio-avec-django-conception/"&gt;l'article pr&amp;eacute;c&amp;eacute;dent&lt;/a&gt;, nous avons con&amp;ccedil;u la structure de notre futur portfolio. Aujourd'hui, nous allons d&amp;eacute;marrer le projet django et y mod&amp;eacute;liser cette structure gr&amp;acirc;ce aux &lt;strong&gt;mod&amp;egrave;les&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Previously on this blog&lt;/h2&gt;
&lt;p&gt;Nous avons r&amp;eacute;flechi sur le sch&amp;eacute;ma conceptuel de notre application. Apr&amp;egrave;s avoir list&amp;eacute; toutes les donn&amp;eacute;es &amp;agrave; stocker et les relations entre elles, nous nouss sommes arr&amp;ecirc;t&amp;eacute;s sur ce diagramme :&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="../../../../media/img/entries/mcd_portfolio.png" alt="" width="324" height="176" /&gt;&lt;/p&gt;
&lt;h2&gt;Cr&amp;eacute;er un projet django&lt;/h2&gt;
&lt;p&gt;Maintenant que nous avons con&amp;ccedil;u l'architecture de notre application, les choses s&amp;eacute;rieuses peuvent commencer. Nous allons cr&amp;eacute;er notre projet django. Pour cette &amp;eacute;tape, vous devez poss&amp;eacute;der quelques bases en python et avoir un environnement de d&amp;eacute;veloppement django op&amp;eacute;rationnel. Si ce n'est pas le cas, je vous invite &amp;agrave; installer django en suivant &lt;a href="../../../../blog/article/installer-django-sous-windows/"&gt;ce tutoriel (windows)&lt;/a&gt; ou &lt;a href="http://docs.djangoproject.com/en/1.2/topics/install/" target="_blank"&gt;celui-ci (officiel, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La premi&amp;egrave;re &amp;eacute;tape consiste &amp;agrave; cr&amp;eacute;er la base de donn&amp;eacute;es (on utilisera mySQL) et l'utilisateur avec laquelle django communiquera. Vous pouvez le faire par le biais de phpmyadmin. Nommons-la "website".&lt;/p&gt;
&lt;p&gt;Puis, dans le projet d&amp;eacute;di&amp;eacute; &amp;agrave; vos projets django, nous allons cr&amp;eacute;er notre application (&lt;strong&gt;website&lt;/strong&gt;) et son unique module (&lt;strong&gt;portfolio&lt;/strong&gt;).&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ django-admin.py startproject website
$ cd website
$ django-admin startapp portfolio&lt;/pre&gt;
&lt;p&gt;A la racine du projet (website), nous allons cr&amp;eacute;er deux r&amp;eacute;pertoires :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;templates/&lt;/strong&gt;, qui accueuillera les pages HTML dont on aura besoin plus tard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;media/&lt;/strong&gt;, o&amp;ugrave; seront plac&amp;eacute;s les images, css, javascript...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enfin, toujours &amp;agrave; la racine, cr&amp;eacute;ez un r&amp;eacute;pertoire &lt;strong&gt;apps/&lt;/strong&gt; qui renfermera les diff&amp;eacute;rents modules. Ici, nous n'avons qu'un seul module, mais cela permettra de faire &amp;eacute;voluer notre application plus simplement si vous voulez ajouter un nouveau module par la suite (Un blog par exemple !). D&amp;eacute;placez le r&amp;eacute;pertoire &lt;strong&gt;portfolio/&lt;/strong&gt; dans ce r&amp;eacute;pertoire&lt;strong&gt; apps/&lt;/strong&gt;, dans lequel vous aurez pris soin de cr&amp;eacute;er un fichier &lt;strong&gt;__init__.py&lt;/strong&gt; vide (vous pouvez copier / coller ce fichier depuis un autre r&amp;eacute;pertoire).&lt;/p&gt;
&lt;p&gt;Vous devez alors avoir l'architecture suivante :&lt;/p&gt;
&lt;pre&gt;.&lt;br /&gt;|-- __init__.py&lt;br /&gt;|-- apps&lt;br /&gt;|   |-- __init__.py&lt;br /&gt;|   `-- portfolio&lt;br /&gt;|       |-- __init__.py&lt;br /&gt;|       |-- models.py&lt;br /&gt;|       `-- views.py&lt;br /&gt;|-- manage.py&lt;br /&gt;|-- media&lt;br /&gt;|-- settings.py&lt;br /&gt;|-- templates&lt;br /&gt;`-- urls.py&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;V&amp;eacute;rifions que le projet fonctionne bien. Tapez la commande suivante pour d&amp;eacute;marrer le serveur de d&amp;eacute;veloppement :&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py runserver&lt;/pre&gt;
&lt;p&gt;Et, &amp;agrave; l'aide de votre navigateur, allez&amp;agrave;  l'adresse&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ http://localhost:8000&lt;/pre&gt;
&lt;p&gt;Tout fonctionne ? Parfait !&lt;/p&gt;
&lt;h2&gt;Param&amp;eacute;trer l'application&lt;/h2&gt;
&lt;p&gt;Maintenant, param&amp;eacute;trons correctement l'application en &amp;eacute;ditant le fichier &lt;strong&gt;settings.py&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nous allons tout d'abord cr&amp;eacute;er, en haut du fichier, une constante PROJECT_PATH qui contiendra le path global du projet.&lt;/p&gt;
&lt;pre class="brush: python"&gt;import os.path
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
&lt;/pre&gt;
&lt;p&gt;Editez les lignes suivantes pour ajuster la langue et le fuseau horraire :&lt;/p&gt;
&lt;div class="codehilite"&gt;
&lt;pre class="brush: python"&gt;TIME_ZONE = 'Europe/Paris'
LANGUAGE_CODE = 'fr-fr'
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;On ajoute notre r&amp;eacute;pertoire m&amp;eacute;dia (path et url) ainsi que celui de la future interface d'administration :&lt;/p&gt;
&lt;pre class="brush: shell"&gt;MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/admin/'&lt;/pre&gt;
&lt;p&gt;On ajoute notre r&amp;eacute;pertoire de templates :&lt;/p&gt;
&lt;pre class="brush: shell"&gt;TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'templates'),
)&lt;/pre&gt;
&lt;p&gt;Et enfin, on ajoute notre module &amp;agrave; la liste des applications install&amp;eacute;es :&lt;/p&gt;
&lt;div class="codehilite"&gt;
&lt;pre class="brush: shell"&gt;INSTALLED_APPS = ('django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'website.apps.portfolio',
)&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;Les mod&amp;egrave;les&lt;/h2&gt;
&lt;p&gt;Maintenant, &amp;eacute;ditons le fichier models.py de notre application afin d'y introduire le sch&amp;eacute;ma que nous avons d&amp;eacute;fini. Chaque table correspond &amp;agrave; une classe poss&amp;eacute;dant des attributs.&lt;/p&gt;
&lt;p&gt;Commen&amp;ccedil;ons par la &lt;strong&gt;cr&amp;eacute;ation &lt;/strong&gt;en elle-m&amp;ecirc;me :&lt;/p&gt;
&lt;pre class="brush: python"&gt;class Crea(models.Model):
    title = models.CharField(max_length=200)
    slug = models.CharField(max_length=200)
    overview = models.TextField()
    description = models.TextField()&lt;br /&gt;
    thumb = models.ImageField(upload_to='img/crea/thumb/')
    creation_date = models.DateTimeField()
    link = models.URLField()
    tags = models.ManyToManyField('Tag')
    picts = models.OneToManyField('Pict')

    class Meta:
        verbose_name = _('Creation')
        verbose_name_plural = _('Creations')&amp;lt;

    def __unicode__(self):
        return self.title&lt;/pre&gt;
&lt;p&gt;Nous avons ajout&amp;eacute; deux champs qui n'&amp;eacute;taient pas dans le diagramme. Il s'agit des relations. Une &lt;strong&gt;ManyToMany&lt;/strong&gt; pour les tags (un tag peut &amp;ecirc;tre li&amp;eacute; &amp;agrave; plusieurs cr&amp;eacute;ations) et un &lt;strong&gt;OneToMany &lt;/strong&gt;pour les images (une image n'est li&amp;eacute;e qu'&amp;agrave; une seule cr&amp;eacute;ation). C'est django qui g&amp;eacute;n&amp;eacute;rera tout seul la table de relation n&amp;eacute;cessaire (pour le many to many).&lt;/p&gt;
&lt;p&gt;Passons aux &lt;strong&gt;tags &lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="brush: python"&gt;class Tag(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200)

    def __unicode__(self):
        return self.tag&lt;/pre&gt;
&lt;p&gt;Et enfin, les &lt;strong&gt;images &lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="brush: python"&gt;class Pict(models.Model):
    pict = models.ImageField(upload_to='creas/')
    rank = models.IntegerField()
    crea = models.ForeignKey('Crea')

    class Meta:
        verbose_name = _('Image')
        verbose_name_plural = _('Images')

    def __unicode__(self)
        return self.get_absolute_url()&lt;/pre&gt;
&lt;p&gt;Pour en savoir plus sur les diff&amp;eacute;rents champs utilis&amp;eacute;s dans ces mod&amp;egrave;les, je vous invite &amp;agrave; consulter la &lt;a href="http://docs.djangoproject.com/en/dev/ref/models/fields/" target="_blank"&gt;documentation&lt;/a&gt; qui recence toutes les possibilit&amp;eacute;s d'attributs.&lt;/p&gt;
&lt;p&gt;Une fois que le fichier models.py a &amp;eacute;t&amp;eacute; &amp;eacute;dit&amp;eacute;, v&amp;eacute;rifions que nous n'avons pas commis d'erreur :&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py validate&lt;/pre&gt;
&lt;p&gt;Puis, synchronisons le tout avec la base de donn&amp;eacute;es. Django va alors cr&amp;eacute;er une table par classe (plus une pour la relation entre tags et cr&amp;eacute;ations, donc).&lt;/p&gt;
&lt;pre class="brush: shell"&gt;$ manage.py syncdb&lt;/pre&gt;
&lt;p&gt;Les mod&amp;egrave;les sont pr&amp;ecirc;ts ! Dans le prochain article, nous installerons &lt;strong&gt;l'interface d'administration&lt;/strong&gt; qui nous permettra d'y ins&amp;eacute;rer nos premi&amp;egrave;res donn&amp;eacute;es !&lt;/p&gt;
</description><pubDate>Tue, 10 Aug 2010 02:21:41 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/creer-un-portfolio-avec-django-les-modeles/</guid></item><item><title>Créer un portfolio avec Django - Conception</title><link>http://valentinbourgoin.net/blog/article/creer-un-portfolio-avec-django-conception/</link><description>&lt;p&gt;Les articles qui vont suivre seront d&amp;eacute;di&amp;eacute;s &amp;agrave; la cr&amp;eacute;ation d'un simple portfolio en utilisant &lt;strong&gt;python &lt;/strong&gt;et &lt;strong&gt;django&lt;/strong&gt;.  La saga s'ouvre avec la premi&amp;egrave;re &amp;eacute;tape, la plus importante : la  conception de l'application. Ici, pas de code, simplement de la  r&amp;eacute;flexion...&lt;/p&gt;
&lt;p&gt;Le but de ce futur portfolio sera bien &amp;eacute;videment de pr&amp;eacute;senter ses cr&amp;eacute;ations et de les caract&amp;eacute;riser par des mots cl&amp;eacute;s et des images (captures d'&amp;eacute;cran ou autre). Chaque r&amp;eacute;alisation poss&amp;eacute;dera un certain nombre de param&amp;egrave;tres pour les illustrer. Ce sont ces param&amp;egrave;tres que nous allons devoir d&amp;eacute;finir.&lt;/p&gt;
&lt;p&gt;L'application sera donc compos&amp;eacute;e de trois entit&amp;eacute;es. Tout d'abord, la &lt;strong&gt;cr&amp;eacute;ation &lt;/strong&gt;: la r&amp;eacute;alisation en elle-m&amp;ecirc;me, puis le &lt;strong&gt;tag &lt;/strong&gt;: le mot cl&amp;eacute; caract&amp;eacute;risant la cr&amp;eacute;ation et enfin &lt;strong&gt;l'image&lt;/strong&gt; d'illustration. Chaque cr&amp;eacute;ation pourra &amp;ecirc;tre reli&amp;eacute;e &amp;agrave; un ou plusieurs tags et &amp;agrave; une ou plusieurs images.&lt;/p&gt;
&lt;p&gt;D&amp;eacute;taillons maintenant les param&amp;egrave;tres de chacune de ces entit&amp;eacute;s :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cr&amp;eacute;ation &lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nom de la cr&amp;eacute;ation.&lt;/li&gt;
&lt;li&gt;Slug : identifiant unique sous forme de cha&amp;icirc;ne de caract&amp;egrave;re.&lt;/li&gt;
&lt;li&gt;Description courte : texte court d&amp;eacute;crivant en quelques mots la r&amp;eacute;f&amp;eacute;rence.&lt;/li&gt;
&lt;li&gt;Description longue : texte d&amp;eacute;crivant les t&amp;acirc;ches r&amp;eacute;alis&amp;eacute;es, etc.&lt;/li&gt;
&lt;li&gt;Vignette : petite image illustrant la cr&amp;eacute;ation.&lt;/li&gt;
&lt;li&gt;Date de la cr&amp;eacute;ation.&lt;/li&gt;
&lt;li&gt;URL (externe) o&amp;ugrave; est visible la cr&amp;eacute;ation.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tag &lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le mot cl&amp;eacute; en lui-m&amp;ecirc;me.&lt;/li&gt;
&lt;li&gt;Slug : identifiant unique permettant d'acc&amp;eacute;der au mot-cl&amp;eacute;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Image &lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L'URL de l'image.&lt;/li&gt;
&lt;li&gt;Son ordre d'affichage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si l'on met ces donn&amp;eacute;es en page sous la forme d'un &lt;a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le_conceptuel_de_donn%C3%A9es" target="_blank"&gt;MCD&lt;/a&gt; (Mod&amp;egrave;le Conceptuel de Donn&amp;eacute;es), cela donne le sch&amp;eacute;ma suivant :&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.valentinbourgoin.net/media/img/entries/mcd_portfolio.png" alt="" width="550" height="300" /&gt;&lt;/p&gt;
&lt;p&gt;A noter que nous avons affaire ici &amp;agrave; deux types de relations. Un tag peut &amp;ecirc;tre reli&amp;eacute; &amp;agrave; plusieurs cr&amp;eacute;ations, alors qu'une image n'est li&amp;eacute;e qu'&amp;agrave; une seule cr&amp;eacute;ation. Les cr&amp;eacute;ations, quant &amp;agrave; elles, peuvent faire appel &amp;agrave; plusieurs tags et plusieurs images.&lt;/p&gt;
&lt;p&gt;C'est tout pour la phase de conception ! La prochaine &amp;eacute;tape sera de mod&amp;eacute;liser ces donn&amp;eacute;es dans un &lt;strong&gt;projet django&lt;/strong&gt; ! Donc d'ici-l&amp;agrave;, profitez-en pour &lt;a href="http://www.siteduzero.com/tutoriel-2-196-python.html" target="_blank"&gt;r&amp;eacute;viser votre python&lt;/a&gt; ou pour &lt;a href="../../../../blog/article/installer-django-sous-windows/"&gt;installer Django&lt;/a&gt;...&lt;/p&gt;
</description><pubDate>Mon, 09 Aug 2010 23:44:48 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/creer-un-portfolio-avec-django-conception/</guid></item><item><title>Nouvelle architecture : Django</title><link>http://valentinbourgoin.net/blog/article/nouvelle-architecture-django/</link><description>&lt;p&gt;Depuis le d&amp;eacute;but de ma nouvelle activit&amp;eacute;, j'ai eu, comme j'en avais parl&amp;eacute; dans le billet pr&amp;eacute;c&amp;eacute;dent, le temps de m'autoformer sur des technologies qui me tenaient &amp;agrave; coeur. J'ai commenc&amp;eacute; par le &lt;a href="http://www.djangoproject.com"&gt;&lt;strong&gt;framework Django&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour apprendre, il n'y a rien de mieux que de se jeter &amp;agrave; l'eau sur un nouveau projet. J'ai donc d&amp;eacute;cid&amp;eacute; de refaire enti&amp;egrave;rement le &lt;strong&gt;moteur de mon porfolio / blog &lt;/strong&gt;en utilisant Django. Et j'ai &amp;eacute;t&amp;eacute; vraiment s&amp;eacute;duit.&lt;/p&gt;
&lt;p&gt;Comme vous avez pu le constater, il n'y a pas eu de gros chamboulement graphique (j'aurais du y passer des mois avant d'&amp;ecirc;tre presque satisfait), mais le moteur a vraiment &amp;eacute;t&amp;eacute;&lt;strong&gt; refait &amp;agrave; neuf.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans la version pr&amp;eacute;c&amp;eacute;dente, qui datait de deux ans, le tout tournait autour d'un sch&amp;eacute;ma MVC maison en PHP, sans mySQL mais avec les informations stock&amp;eacute;s dans des fichiers XML (&amp;agrave; l'&amp;eacute;poque, c'&amp;eacute;tait pour faire joujou avec simplexml). Le c&amp;ocirc;t&amp;eacute; blog, quant &amp;agrave; lui, &amp;eacute;tait un simple wordpress. Alors, oui, je sais, pourquoi ne pas garder wordpress, pourquoi r&amp;eacute;inventer la roue, nianiania ? Simplement pour me familiariser avec ce framework. Un moteur de blog est une chose simple et facilement adaptable. Cela me semblait un bon point de d&amp;eacute;part pour (re)d&amp;eacute;couvrir Django !&lt;/p&gt;
&lt;p&gt;J'ai &amp;eacute;t&amp;eacute; impression&amp;eacute; par la&lt;strong&gt; rapidit&amp;eacute; de d&amp;eacute;veloppement&lt;/strong&gt;. Malgr&amp;eacute; le nouveau langage pour moi (python), on n'est pas perdus et les modules front / back se d&amp;eacute;ploient en quelques lignes. Apr&amp;egrave;s quelques bons tutos, on est vite capable de se d&amp;eacute;brouiller ! J'en ai aussi profit&amp;eacute; pour d&amp;eacute;serter OVH au profit d'&lt;a href="http://www.alwaysdata.com"&gt;alwaysdata&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;D'ailleurs, en parlant de tutos, mes prochains articles seront d&amp;eacute;di&amp;eacute;s au &lt;strong&gt;d&amp;eacute;veloppement d'un portfolio en Django&lt;/strong&gt;. Si &amp;ccedil;a vous int&amp;eacute;resse, repassez par l&amp;agrave; :)&lt;/p&gt;
</description><pubDate>Thu, 05 Aug 2010 00:53:18 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/nouvelle-architecture-django/</guid></item><item><title>Free-lance, le grand saut</title><link>http://valentinbourgoin.net/blog/article/free-lance-le-grand-saut/</link><description>&lt;p&gt;Et voil&amp;agrave;. C'est le grand saut.&lt;/p&gt;
&lt;p&gt;Apr&amp;egrave;s plus d'un an chez &lt;a href="http://www.e-citizen.com/"&gt;e-citizen&lt;/a&gt;, j'ai d&amp;eacute;cid&amp;eacute; de me mettre&lt;strong&gt; &amp;agrave; mon compte&lt;/strong&gt;. Avec pour l'instant mon ancien statut de "travailleur ind&amp;eacute;pendant", mais tr&amp;egrave;s bient&amp;ocirc;t en tant qu'&lt;a href="http://www.lautoentrepreneur.fr/"&gt;autoentrepreneur &lt;/a&gt;ou &lt;a href="http://www.entrepreneur-individuel.fr/"&gt;entrepreneur individuel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je vais profiter de cette p&amp;eacute;riode de libert&amp;eacute; pour, tout en  prospectant des clients et en r&amp;eacute;pondant &amp;agrave; des appels d'offre,  m'int&amp;eacute;resser &amp;agrave; des technologies que je n'avais jamais eu le temps (ou  trop peu) d'aborder :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Django&lt;/strong&gt;, pour changer un peu du PHP, et re-d&amp;eacute;couvrir ce framework complet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D&amp;eacute;veloppement Android&lt;/strong&gt; pour avoir un aper&amp;ccedil;u sur le mobile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Administration syst&amp;egrave;me&lt;/strong&gt; pour me familiariser d'avantage avec des probl&amp;eacute;matiques de serveurs.&lt;/li&gt;
&lt;li&gt;Joomla / Drupal / Wordpress ou autre &lt;strong&gt;CMS &lt;/strong&gt;pour avoir la possibilit&amp;eacute; de monter tr&amp;egrave;s rapidement des sites complets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous l'aurez compris, une p&amp;eacute;riode sous le signe de&lt;strong&gt; l'auto-formation&lt;/strong&gt;. Et de la formation aussi, d'ailleurs, puisque je continuerai de donner &lt;a href="http://valentinbourgoin.net/blog/web/travaux-diriges-web-2-0-101/"&gt;des cours &amp;agrave; l'Universit&amp;eacute; de Marne la Vall&amp;eacute;e&lt;/a&gt;. Mais je reste bien &amp;eacute;videmment &amp;agrave; la recherche de tout projet me permettant de mettre en place ces technologies. Ou d'autres ! &lt;strong&gt;N'h&amp;eacute;sitez pas &amp;agrave; me contacter&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source de l'image : &lt;a href="http://www.flickr.com/photos/alexiadelfino/1061988124/"&gt;alexiadelfino / flickR&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description><pubDate>Tue, 03 Aug 2010 14:31:55 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/free-lance-le-grand-saut/</guid></item><item><title>Travaux Dirigés - web 2.0</title><link>http://valentinbourgoin.net/blog/article/travaux-diriges-web-20/</link><description>&lt;p&gt;J'ai &amp;eacute;t&amp;eacute;, le semestre dernier, charg&amp;eacute; de TD en Master 1 Informatique &amp;agrave;  l'Universit&amp;eacute; de Marne-la-Vall&amp;eacute;e. J'ai d&amp;eacute;cid&amp;eacute; d'axer le cours, intitul&amp;eacute;  par la formation &lt;strong&gt;web 2.0&lt;/strong&gt; autour des technologies suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xHTML / CSS&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;li&gt;AJAX&lt;/li&gt;
&lt;li&gt;PHP5 (MVC).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici la liste des sujets :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://valentin.alwaysdata.net/web2/TD1.zip" target="_blank"&gt;TD 1 - Int&amp;eacute;gration HTML / CSS d'un template pr&amp;eacute;d&amp;eacute;fini&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://valentin.alwaysdata.net/web2/TD1%20bis%20-%20Menu%20d%c3%a9roulant%20CSS.pdf"&gt;TD 1 (bis) - Menu d&amp;eacute;roulant CSS pur&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://valentin.alwaysdata.net/web2/TD2%20-%20jQuery.pdf"&gt;TD 2 - Introduction &amp;agrave; jQuery / AJAX&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://valentin.alwaysdata.net/web2/TD3%20-%20Mashup.pdf"&gt;TD 3 - Mashup : API Twitter (AJAX)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://valentin.alwaysdata.net/web2/TD4%20-%20MVC.pdf"&gt;TD 4 - Introduction aux frameworks web : mod&amp;egrave;le MVC en PHP&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L'ann&amp;eacute;e prochaine, je serai &amp;agrave; priori charg&amp;eacute; des TDs de web &amp;agrave;&lt;strong&gt; l'&amp;eacute;cole d'ing&amp;eacute;nieur IMAC&lt;/strong&gt; !&lt;/p&gt;
</description><pubDate>Sun, 27 Jun 2010 19:32:29 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/travaux-diriges-web-20/</guid></item><item><title>Concevoir une application Ruby on Rails</title><link>http://valentinbourgoin.net/blog/article/concevoir-une-application-ruby-rails/</link><description>&lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt; (RoR) est un framework web  dont nous allons  illustrer la puissance en cr&amp;eacute;ant une simple application de gestion de  vid&amp;eacute;oth&amp;egrave;que, en minimisant les lignes de code. Nous utiliserons sa  version 2.0, sortie le 7 d&amp;eacute;cembre 2008, et qui poss&amp;egrave;de plusieurs  diff&amp;eacute;rences avec la pr&amp;eacute;c&amp;eacute;dente, notamment au niveau de la g&amp;eacute;n&amp;eacute;ration du  code (&lt;a href="http://en.wikipedia.org/wiki/Scaffold_%28programming%29"&gt;Scaffold&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Nous verrons tout d'abord comment &lt;strong&gt;installer&lt;/strong&gt; Ruby on Rails en  local ou le lancer depuis un serveur distant. Puis, nous pr&amp;eacute;senterons  les concepts de base de d&amp;eacute;veloppement en cr&amp;eacute;ant nos &lt;strong&gt;mod&amp;egrave;les de donn&amp;eacute;es&lt;/strong&gt; et en personnalisant les &lt;strong&gt;vues&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Installer Ruby on Rails&lt;/h2&gt;
&lt;h3&gt;En local&lt;/h3&gt;
&lt;p&gt;Sous debian / ubuntu, mettez vous en superutilisateur pour installer ruby :&lt;/p&gt;
&lt;pre lang="bash"&gt;apt-get install ruby irb ri rdoc build-essantial&lt;/pre&gt;
&lt;p&gt;Puis, la gem rails :&lt;/p&gt;
&lt;pre lang="bash"&gt;gem install rails --include-dependencies&lt;/pre&gt;
&lt;p&gt;V&amp;eacute;rifions la version de rails install&amp;eacute;e :&lt;/p&gt;
&lt;pre lang="bash"&gt;rails &amp;ndash;v&lt;/pre&gt;
&lt;h3&gt;Sur un serveur distant&lt;/h3&gt;
&lt;p&gt;Si vous utilisez un serveur supportant ruby avec rails pr&amp;eacute;install&amp;eacute;, comme c'est le cas chez &lt;a href="http://alwaysdata.com/"&gt;alwaysdata&lt;/a&gt; par exemple, vous n'avez rien &amp;agrave; faire. Vous pouvez vous passer du  serveur de d&amp;eacute;veloppement int&amp;eacute;gr&amp;eacute; &amp;agrave; RoR. Par contre, vous devrez  effectuer toutes les commandes suivantes via un connexion ssh.&lt;/p&gt;
&lt;h2&gt;Utiliser Rails&lt;/h2&gt;
&lt;h3&gt;Cr&amp;eacute;er l'application&lt;/h3&gt;
&lt;p&gt;Pour cr&amp;eacute;er une nouvelle application, placez-vous dans votre dossier  personnel. Une simple commande vous permettra de g&amp;eacute;n&amp;eacute;rer toutes  l'arborescence du futur projet, que nous nommerons &lt;strong&gt;myMovies&lt;/strong&gt;.&lt;/p&gt;
&lt;pre lang="bash"&gt;rails myMovies&lt;/pre&gt;
&lt;h3&gt;Lancer le serveur&lt;/h3&gt;
&lt;p&gt;Si vous travaillez en local, vous devrez lancer le serveur de  d&amp;eacute;veloppement int&amp;eacute;gr&amp;eacute; &amp;agrave; RoR, WEBrick, pour que votre application soit  accessible. Pour ce faire, tapez simplement :&lt;/p&gt;
&lt;pre lang="bash"&gt;ruby script/server&lt;/pre&gt;
&lt;p&gt;Une fois le serveur lanc&amp;eacute;, votre site sera accessible &amp;agrave; l'adresse :&lt;/p&gt;
&lt;pre lang="bash"&gt;http://localhost:3000&lt;/pre&gt;
&lt;p&gt;Si vous travaillez sur un serveur distant, vous pourrez normalement  visualiser directement votre application sans passer par le lancement  manuel de WEBrick.&lt;/p&gt;
&lt;h3&gt;Cr&amp;eacute;er et configurer la base&lt;/h3&gt;
&lt;p&gt;Par le biais de votre SGBD, commencez par &lt;strong&gt;cr&amp;eacute;er une base de donn&amp;eacute;es&lt;/strong&gt; pour votre projet, nomm&amp;eacute;e - par exemple - myMovies.&lt;/p&gt;
&lt;p&gt;Configurons maintenant l'acc&amp;egrave;s &amp;agrave; cette base, en &amp;eacute;ditant le fichier &lt;strong&gt;/myMovies/config/database.yml&lt;/strong&gt; en renseignant le moteur (ici mySQL) l'h&amp;ocirc;te, l'utilisateur mySQL et le  mot de passe. Note : il est possible de diff&amp;eacute;rencier les bases de  d&amp;eacute;veloppement et de production.&lt;/p&gt;
&lt;p&gt;Une fois l'application configur&amp;eacute;e, on pourra simplement cr&amp;eacute;er la base gr&amp;acirc;ce &amp;agrave; la commande :&lt;/p&gt;
&lt;pre lang="bash"&gt;rake db:create:all&lt;/pre&gt;
&lt;h3&gt;Cr&amp;eacute;er un mod&amp;egrave;le&lt;/h3&gt;
&lt;p&gt;Cette &amp;eacute;tape est cruciale car elle d&amp;eacute;termine toute &lt;strong&gt;l'architecture&lt;/strong&gt; des donn&amp;eacute;es de notre application. Vous devrez d&amp;eacute;terminer toutes les  entit&amp;eacute;s qu'il vous sera n&amp;eacute;cessaire de stocker. D'une mauvaise conception  d&amp;eacute;coulerait une application bancale. Dans notre cas, la question ne se  pose pas car nous avons choisi un cas de figure particuli&amp;egrave;rement simple.  Nous n'avons &amp;agrave; travailler que sur un seul mod&amp;egrave;le : &lt;strong&gt;movie&lt;/strong&gt;. Bien  s&amp;ucirc;r, il sera possible d'ajouter des entit&amp;eacute;s plus tard (des commentaires,  par exemple), mais faisons simple pour commencer.&lt;/p&gt;
&lt;p&gt;Maintenant, r&amp;eacute;fl&amp;eacute;chissons sur le &lt;strong&gt;donn&amp;eacute;es &lt;/strong&gt;que nous avons besoin de  stocker pour chaque mod&amp;egrave;le : le titre du film, son r&amp;eacute;alisateur, l'ann&amp;eacute;e  de sortie, une br&amp;egrave;ve description et une url permettant d'en savoir plus  (un lien imdb par exemple). Pour cela, lan&amp;ccedil;ons la commande :&lt;/p&gt;
&lt;pre lang="bash"&gt;ruby script/generate scaffold Movie title:string director:string year:string decription:text url:string&lt;/pre&gt;
&lt;p&gt;Nous lan&amp;ccedil;ons ainsi le scaffold qui va g&amp;eacute;n&amp;eacute;rer tout le code li&amp;eacute; &amp;agrave; ce  mod&amp;egrave;le, de la table dans la base de donn&amp;eacute;e aux vues g&amp;eacute;n&amp;eacute;riques destin&amp;eacute;es  &amp;agrave; son affichage. Nous avons juste &amp;agrave; mettre &amp;agrave; jour la base de donn&amp;eacute;es :&lt;/p&gt;
&lt;pre lang="bash"&gt;rake db:migrate&lt;/pre&gt;
&lt;h3&gt;L'interface g&amp;eacute;n&amp;eacute;r&amp;eacute;e&lt;/h3&gt;
&lt;p&gt;Voyons maintenant ce que nous avons g&amp;eacute;n&amp;eacute;r&amp;eacute; avec cette simple commande. Apr&amp;egrave;s avoir lanc&amp;eacute; le serveur, allez sur&lt;/p&gt;
&lt;pre lang="bash"&gt;http://localhost:3000/movies&lt;/pre&gt;
&lt;p&gt;Nous avons maintenant une veritable interface &lt;strong&gt;CRUD &lt;/strong&gt;pour  l&amp;rsquo;ajout et l&amp;rsquo;&amp;eacute;dition de films. Essayez d&amp;rsquo;ajouter un nouveau film ; il  apparaitra dans la liste et vous pourrez l&amp;rsquo;&amp;eacute;ditez ou le supprimer.&lt;/p&gt;
&lt;h3&gt;Validation du mod&amp;egrave;le&lt;/h3&gt;
&lt;p&gt;On peut aller plus loin dans la cr&amp;eacute;ation du mod&amp;egrave;le. Si certaines des  donn&amp;eacute;es sont obligatoire au bon fonctionnement de l'application, comment  emp&amp;ecirc;cher la saisie d'entr&amp;eacute;es incorrectes et mal form&amp;eacute;es ? C'est l&amp;agrave;  qu'intervient la validation du mod&amp;egrave;le. Pour cela, ouvrez le mod&amp;egrave;le  proprement dit, stock&amp;eacute; dans le fichier &lt;strong&gt;/myMovies/app/models/movies.rb&lt;/strong&gt;.  Pour l'instant, le fichier est quasiment vide, et c'est normal. C'est  ici que nous allons renseigner les informations relatives &amp;agrave; la  validation. Au sein de la classe, tapez (attention &amp;agrave; la place des  espaces) :&lt;/p&gt;
&lt;pre lang="bash"&gt;validates_presence of :title, :director, :year&lt;/pre&gt;
&lt;p&gt;C'est tout ! Dans l'application, essayez de saisir un film sans  r&amp;eacute;alisateur ou sans date ; l'enregistrement &amp;eacute;chouera. Finis, les tests  bancaux : tout est automatis&amp;eacute; gr&amp;acirc;ce RoR !&lt;/p&gt;
&lt;h3&gt;Personnaliser l'application&lt;/h3&gt;
&lt;p&gt;Comme vous pouvez le voir, sans que nous n'ayons besoin d'&amp;eacute;crire la  moindre v&amp;eacute;ritable ligne de code, RoR nous a g&amp;eacute;n&amp;eacute;r&amp;eacute; une interface  compl&amp;egrave;te CRUD (Create, Read, Update, Delete) pour notre mod&amp;egrave;le. On peut  ais&amp;eacute;ment ajouter des nouveaux films, &amp;eacute;diter ou supprimer les existants,  et visualiser le tout en d&amp;eacute;tails. Libre &amp;agrave; nous de personnaliser les vues  gr&amp;acirc;ce au syst&amp;egrave;me de &lt;strong&gt;templates &lt;/strong&gt;que nous allons voir maintenant.&lt;br /&gt; Vous l'avez vu, l'habillage de l'interface est tr&amp;egrave;s sommaire. A nous de  l'adapter et de l'int&amp;eacute;grer dans un design complet. Pour cela, rien de  compliqu&amp;eacute; ; il ne s'agit que de XHTML / CSS standard. Regardez dans le  dossier &lt;strong&gt;/myMovies/app/views/movie/&lt;/strong&gt; : c'est ici que sont cach&amp;eacute;s  les templates correspondant aux vues pour notre mod&amp;egrave;le. On y retrouve  les diff&amp;eacute;rentes actions possibles : &lt;strong&gt;l'affichage d&amp;eacute;taill&amp;eacute;&lt;/strong&gt; (show.html.erb), &lt;strong&gt;l'&amp;eacute;dition&lt;/strong&gt; (edit.html.erb), &lt;strong&gt;l'ajout &lt;/strong&gt;(new.html.erb) et enfin la liste en&lt;strong&gt; page d'accueil &lt;/strong&gt;(index.html.erb).&lt;/p&gt;
&lt;p&gt;Ces templates sont incorpor&amp;eacute;s dans une mise en page globale, d&amp;eacute;finie elle par le ficher &lt;strong&gt;myMovies/app/views/layouts/movies.html.erb &lt;/strong&gt;par  le biais de la ligne &amp;lt;%= yield&amp;gt;. Vous pouvez ainsi modifier vos  diff&amp;eacute;rentes vues, de la structure HTML au CSS (stock&amp;eacute; dans  /public/stylesheets) en mettant les mains dans le cambouis un minimum...&lt;/p&gt;
&lt;h2&gt;Aller plus loin&lt;/h2&gt;
&lt;p&gt;Voici une application de test mise en place &amp;agrave; partir de ce tutoriel : &lt;a href="http://valentin.alwaysdata.net/Movies/public/movies"&gt;myMovies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez en savoir plus sur Ruby on Rails, vous pouvez consulter &lt;a href="http://valentinbourgoin.net/blog/wp-content/uploads/2009/05/Ruby_on_Rails.pdf"&gt;ce dossier&lt;/a&gt;, r&amp;eacute;dig&amp;eacute; par &lt;a href="http://www.mathieuthibault.net/"&gt;Mathieu Thibault&lt;/a&gt;, &lt;a href="http://vincentnavetat.net/"&gt;Vincent Navetat&lt;/a&gt; et moi-m&amp;ecirc;me pour un cours de l'&lt;a href="http://imac.univ-mlv.fr/"&gt;IMAC&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Sun, 03 May 2009 19:32:29 +0200</pubDate><guid>http://valentinbourgoin.net/blog/article/concevoir-une-application-ruby-rails/</guid></item><item><title>Statut d'autoentrepreneur, l'arnaque ?</title><link>http://valentinbourgoin.net/blog/article/statut-dautoentrepreneur-larnaque/</link><description>&lt;p&gt;En vigueur depuis le 1er janvier 2009, le statut d'autoentrepreneur permet - sur le papier - de simplifier la &lt;strong&gt;cr&amp;eacute;ation d'une activit&amp;eacute; &amp;eacute;conomique ind&amp;eacute;pendante&lt;/strong&gt;.  Cependant, qu'apporte-t-il de nouveau par rapport aux pr&amp;eacute;c&amp;eacute;dents  r&amp;eacute;gimes de freelance, en particulier celui "d'artiste-auteur" ? Faut-il  changer de statut, pour une activit&amp;eacute; occasionnelle tout du moins ?&lt;/p&gt;
&lt;h2&gt;Le r&amp;eacute;gime des artistes-auteurs&lt;/h2&gt;
&lt;p&gt;Je poss&amp;egrave;de depuis octobre 2007 un statut de &lt;strong&gt;travailleur ind&amp;eacute;pendant&lt;/strong&gt;,  dit "artiste-auteur" qui me permet d'exercer l&amp;eacute;galement - en parall&amp;egrave;le  de mes &amp;eacute;tudes - une activit&amp;eacute; de d&amp;eacute;veloppeur web / designer en freelance.  Apr&amp;egrave;s quelques d&amp;eacute;boires avec les imp&amp;ocirc;ts d&amp;ucirc;s &amp;agrave; mon inexp&amp;eacute;rience, j'ai  fini par &amp;ecirc;tre en r&amp;egrave;gle et peux &amp;eacute;diter des factures &amp;agrave; ma guise, du moment  que je reste sous un certain seuil de chiffre d'affaire annuel : &lt;strong&gt;27 000 &amp;euro;&lt;/strong&gt;. Autant dire inaccessible, vu le caract&amp;egrave;re occasionnel de mon activit&amp;eacute;.&lt;/p&gt;
&lt;p&gt;Autre avantage, ce genre d'activit&amp;eacute; peut &amp;ecirc;tre&lt;strong&gt; dispens&amp;eacute; de TVA&lt;/strong&gt; pendant les trois premi&amp;egrave;res ann&amp;eacute;es. C'est-&amp;agrave;-dire qu'il n'y aucune  d&amp;eacute;claration de taxe &amp;agrave; faire, pour peu qu'on se soit bien d&amp;eacute;brouill&amp;eacute; lors  de la cr&amp;eacute;ation de l'entreprise. Il n'y a qu'une seule d&amp;eacute;claration &amp;agrave;  faire par an, en m&amp;ecirc;me temps que la d&amp;eacute;claration de revenus. Et la somme  d&amp;eacute;clar&amp;eacute;e &amp;eacute;tant en g&amp;eacute;n&amp;eacute;ral faible, elle en est imposable. (Note : si vous  n'&amp;ecirc;tes pas d&amp;eacute;tach&amp;eacute; du foyer fiscal de vos parents, vous devrez joindre  un formulaire &amp;agrave; leur d&amp;eacute;claration d'imp&amp;ocirc;ts. En esp&amp;eacute;rant que cela ne les  fasse pas changer de palier...)&lt;/p&gt;
&lt;p&gt;Pour r&amp;eacute;sumer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Micro BNC&lt;/strong&gt; (r&amp;eacute;gime sp&amp;eacute;cial)&lt;/li&gt;
&lt;li&gt;Exempt&amp;eacute; de TVA selon l'article &lt;a href="http://www.legifrance.gouv.fr/citoyen/unarticledecode.ow?code=CGIMPOT0.rcv&amp;amp;art=293/B"&gt;293B du CGI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Plafond annuel max : 27 000 &amp;euro;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Le statut d'autoentrepreneur&lt;/h2&gt;
&lt;p&gt;Qu'en est-il de ce nouveau statut ? D'apr&amp;egrave;s le site qui lui est d&amp;eacute;di&amp;eacute;, celui-ci poss&amp;egrave;de quatre grandes lignes :&lt;/p&gt;
&lt;div class="cadre"&gt;&lt;strong&gt;1 - Simplifier la cr&amp;eacute;ation ou la cessassion d'une activit&amp;eacute; &amp;eacute;conomique ind&amp;eacute;pendante&lt;/strong&gt;&lt;br /&gt; Mise en place d'un kit de l'auto entrepreneur, un formulaire de  seulement 3 pages, devrait proposer les outils pour en une heure, cr&amp;eacute;er,  interrompre, reprendre et cesser une activit&amp;eacute; ind&amp;eacute;pendante.
&lt;p&gt;2 - Pr&amp;eacute;l&amp;egrave;vement &amp;agrave; la source des pr&amp;eacute;l&amp;egrave;vements sociaux et fiscaux&lt;br /&gt; Instaurer sur option le pr&amp;eacute;l&amp;egrave;vement &amp;agrave; la source pour le travail ind&amp;eacute;pendant.&lt;br /&gt; Christine Lagarde, Ministre de l'&amp;eacute;conomie : "Je veux que l'entrepreneur  puisse payer ses imp&amp;ocirc;ts quand il touche son chiffre d'affaires, n'en  paye pas quand il n'a pas de revenus et arr&amp;ecirc;te d'en payer d&amp;egrave;s qu'il  arr&amp;ecirc;te son activit&amp;eacute;".&lt;br /&gt; L'entrepreneur aura un pr&amp;eacute;l&amp;egrave;vement forfaitaire "charges sociales plus  imp&amp;ocirc;ts" &amp;eacute;gal &amp;agrave; 13% du chiffre d'affaires pour les activit&amp;eacute;s  d'achat-revente et &amp;agrave; 23% pour les activit&amp;eacute;s de service.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3 - Protection du patrimoine personnel de l&amp;rsquo;auto-entrepreneur&lt;/strong&gt;&lt;br /&gt; Sortir de leur vuln&amp;eacute;rabilit&amp;eacute; les plus petits entrepreneurs en cr&amp;eacute;ant un  patrimoine de l&amp;rsquo;entreprise individuelle, r&amp;eacute;ceptacle &amp;agrave; des capitaux  propres d&amp;eacute;di&amp;eacute;s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4 - Instaurer un droit &amp;agrave; l'&amp;eacute;chec&lt;/strong&gt;&lt;br /&gt; Trop souvent, notre droit positif fait obstacle &amp;agrave; la r&amp;eacute;insertion  professionnelle de celui qui a &amp;eacute;t&amp;eacute; victime d'un &amp;eacute;chec &amp;eacute;conomique ou qui a  subi une condamnation p&amp;eacute;nale. "Il faut savoir cr&amp;eacute;er en France, &amp;agrave; la  fois cette culture de l&amp;rsquo;&amp;eacute;chec qui nous manque, mais aussi savoir  reconna&amp;icirc;tre &amp;agrave; celui qui a eu le courage d&amp;rsquo;entreprendre le droit de  pouvoir le refaire en profitant &amp;eacute;videmment de son exp&amp;eacute;rience".&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Depuis le lancement de ce nouveau statut, l'accent est mis sur "&lt;strong&gt;pas de chiffre d'affaire = pas de charge&lt;/strong&gt;".  Seulement, cela reste flou car c'&amp;eacute;tait d&amp;eacute;j&amp;agrave; le cas avec le pr&amp;eacute;c&amp;eacute;dent  r&amp;eacute;gime. Par contre, les charges (d&amp;eacute;sormais en indemnit&amp;eacute;s forfaitaires)  restent fixe et assez &amp;eacute;lev&amp;eacute;es : 21,3% dans mon cas. Payable par mois,  trimestre ou ann&amp;eacute;e. En contrepartie, les autoentrepreneurs b&amp;eacute;n&amp;eacute;ficient  d'un net avantage pratique : toutes leurs d&amp;eacute;clarations / documentation  sont accessibles en ligne depuis le site officiel. Plus besoin donc de  correspondre avec le contr&amp;ocirc;leur de son centre d'imp&amp;ocirc;ts. Int&amp;eacute;ressant,  mais reste &amp;agrave; savoir si ce service suffit &amp;agrave; g&amp;eacute;rer enti&amp;egrave;rement son  activit&amp;eacute;...&lt;/p&gt;
&lt;h2&gt;Au final, que choisir ?&lt;/h2&gt;
&lt;p&gt;Il est clair que pour une activit&amp;eacute; peu r&amp;eacute;guli&amp;egrave;re, l'ancien statut de  travailleur ind&amp;eacute;pendant para&amp;icirc;t plus rentable. M&amp;ecirc;me s'il est plus  compliqu&amp;eacute; &amp;agrave; prendre en main, notamment au niveau des d&amp;eacute;clarations, il  r&amp;eacute;clame beaucoup moins de charges. Apr&amp;egrave;s, la question reste en suspend  pour une activit&amp;eacute; &amp;agrave; temps complet, ou lorsqu'on d&amp;eacute;passe le seuil de  chiffre d'affaire annuel.&lt;/p&gt;
&lt;h2&gt;Quelques liens&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.motamot.com/zoompages/auteurs.html"&gt;Commencer une activit&amp;eacute; d'artiste auteur&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.motamot.com/zoompages/micro.html"&gt;En savoir plus sur les micro entreprises&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.auto-entrepreneur.fr/"&gt;Le site officiel du statut d'autoentrepreneur&lt;/a&gt;, pour s'informer et faire toutes ses d&amp;eacute;clarations en ligne.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Tue, 03 Feb 2009 15:32:29 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/statut-dautoentrepreneur-larnaque/</guid></item><item><title>Installer Django sous Windows</title><link>http://valentinbourgoin.net/blog/article/installer-django-sous-windows/</link><description>&lt;h2&gt;Django, qu'est ce que c'est ?&lt;/h2&gt;
&lt;p&gt;&lt;a hreflang="en" href="http://www.djangoproject.com/documentation/overview/"&gt;Django&lt;/a&gt; est un framework web bas&amp;eacute; sur le langage &lt;a hreflang="en" href="http://www.python.org/"&gt;Python&lt;/a&gt; qui permet un d&amp;eacute;veloppement simple et ultra-rapide. A l'instar de &lt;a hreflang="en" href="http://www.symfony-project.org/"&gt;Symfony &lt;/a&gt;ou &lt;a hreflang="en" href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt;, il suit le mod&amp;egrave;le de conception &lt;a hreflang="fr" href="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur"&gt;Mod&amp;egrave;le-Vue-Contr&amp;ocirc;leur&lt;/a&gt; ; toute la gesion de la structure des donn&amp;eacute;es est assur&amp;eacute;e par des  classes de Mod&amp;egrave;les, les Vues permettent l'affichage des informations et  enfin les Contr&amp;ocirc;leurs r&amp;eacute;pondent au requ&amp;ecirc;tes des utilisateurs. Ainsi,  gr&amp;acirc;ce &amp;agrave; ces trois entit&amp;eacute;s, le framework sera capable de g&amp;eacute;n&amp;eacute;rer toute  une application web, en back et frontoffice.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;La plupart des informations glan&amp;eacute;es sur Internet concernant  l'installation de Django se fait souvent sous environnement Linux. Voici  la marche &amp;agrave; suivre pour permettre aux utilisateurs de Windows  d'utiliser Django. Celle-ci est assez simple. Je met &amp;agrave; votre disposition  &lt;a href="http://valentinbourgoin.net/blog/wp-admin/public/Django_installers.zip"&gt;une archive&lt;/a&gt; contenant tous les installateurs dont j'ai eu besoin. Ceux-ci datent du  mois de juillet 2008, et ne seront peut &amp;ecirc;tre plus d'actualit&amp;eacute; dans  quelques mois.&lt;/p&gt;
&lt;h3&gt;Installer Python&lt;/h3&gt;
&lt;p&gt;Tout d'abord, vous devez avoir la derni&amp;egrave;re version de Python. Vous  pouvez la t&amp;eacute;l&amp;eacute;charger sur le site officiel. Une fois l'installateur  lanc&amp;eacute;, conservez les options par d&amp;eacute;faut ; le dossier d'installation sera  C:\Python25 (pour la version 2.5).&lt;/p&gt;
&lt;h3&gt;Installer PostgreSQL et psycopg&lt;/h3&gt;
&lt;p&gt;Django g&amp;egrave;re plusieurs types de SGBD. N&amp;eacute;anmoins, je vous conseille  d'installer postgreSQL, accompagn&amp;eacute; de psycopg (qui permettra &amp;agrave; Python de  communiquer avec la base). Une fois r&amp;eacute;cup&amp;eacute;r&amp;eacute; le .msi d'installation sur  le &lt;a hreflang="en" href="http://www.postgresql.org/download/"&gt;site&lt;/a&gt;,  conservez l&amp;agrave;-encore les options par d&amp;eacute;faut, jusqu'&amp;agrave; l'&amp;eacute;cran de  configuration ("Initialise database cluster"). L&amp;agrave;, choisissez un login  (postgres par exemple) et un mot de passe permettant d'acc&amp;egrave;der &amp;agrave; la  future base de donn&amp;eacute;es.&lt;br /&gt;Une fois l'installation termin&amp;eacute;e, lancez le  programme pgAdmin III depuis le menu d&amp;eacute;marrer. Vous pourrez vous y  connecter gr&amp;acirc;ce au mot de passe pr&amp;eacute;alablement choisi. L'installation  s'est donc bien d&amp;eacute;roul&amp;eacute;e ! Vous n'avez plus qu'&amp;agrave; installer &lt;a hreflang="en" href="http://initd.org/tracker/psycopg"&gt;psycopg&lt;/a&gt;, tr&amp;egrave;s simplement en t&amp;eacute;l&amp;eacute;chargeant l'ex&amp;eacute;cutable windows.&lt;/p&gt;
&lt;h3&gt;Installer Apache et mod_python&lt;/h3&gt;
&lt;p&gt;T&amp;eacute;l&amp;eacute;chargez simplement la deni&amp;egrave;re version d'&lt;a hreflang="en" href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt; et &amp;eacute;xecutez l'installateur. Choisissez bien de lancer Apache sur le  port 80. Pour v&amp;eacute;rifier que l'installation s'est bien d&amp;eacute;roul&amp;eacute;e, lancez  votre navigateur sur l'url http://127.0.0.1. Vous devriez avoir une page  g&amp;eacute;n&amp;eacute;r&amp;eacute;e par le serveur : "It works". En installant Apache, vous avez  aussi acc&amp;egrave;s au moniteur du service, dans la barre de taches. C'est l&amp;agrave;  que vous pourrez relancer ou arr&amp;ecirc;ter le serveur.&lt;br /&gt;Maintenant, au tour de &lt;a hreflang="en" href="http://www.modpython.org/"&gt;mod_python&lt;/a&gt; qui permettra &amp;agrave; Apache d'interpr&amp;eacute;ter le code Python. Suivez simplement  l'assistant d'installation. Puis, &amp;eacute;ditez le fichier httpd.conf d'Apache,  situ&amp;eacute; dans son r&amp;eacute;pertoire d'installation : C:\Program Files\Apache  Software Foundation\Apache 2.X\conf\httpd.conf. Ajoutez le chargement de  mod_python &amp;agrave; l'endroit o&amp;ugrave; sont regroup&amp;eacute;s tous les "LoadModule" (au  d&amp;eacute;but du fichier) de la fa&amp;ccedil;on suivante :&lt;/p&gt;
&lt;pre lang="apache"&gt;LoadModule python_module modules/mod_python.so&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Relancez Apache par le moniteur de services. Si le serveur refuse de  se r&amp;eacute;initialisez, vous avez commis une erreur en &amp;eacute;ditant le fichier  httpd.conf. Recommencez (il existe un fichier de backup dans le m&amp;ecirc;me  r&amp;eacute;pertoire conf).&lt;/p&gt;
&lt;h3&gt;Installer Subversion&lt;/h3&gt;
&lt;p&gt;Pour r&amp;eacute;cup&amp;eacute;rer la derni&amp;egrave;re version de d&amp;eacute;veloppement de Django, nous allons utiliser subversion. Vous pouvez le t&amp;eacute;l&amp;eacute;charger &lt;a href="http://subversion.tigris.org/files/documents/15/29065/svn-1.3.0-setup.exe"&gt;ici&lt;/a&gt;.  Pour les adeptes des interfaces graphiques, il existe aussi TurtoiseSVN  (que je d&amp;eacute;conseille n&amp;eacute;anmoins). Cela vous permettra, entre autres, de  mettre &amp;agrave; jour automatiquement votre version de Django en lan&amp;ccedil;ant un  simple update depuis votre r&amp;eacute;pertoire d'installation. &lt;a hreflang="fr" href="http://fr.wikipedia.org/wiki/Subversion_%28logiciel%29"&gt;Plus d'informations sur Subversion&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Installer Django&lt;/h3&gt;
&lt;p&gt;Enfin nous y arrivons ! Gr&amp;acirc;ce &amp;agrave; SVN, nous allons faire un commit  depuis le site officiel du framework. Pour cela, lancez l'invite de  commande et tapez&lt;/p&gt;
&lt;pre lang="bash"&gt;C:\&amp;gt;cd C:\python25\Lib\sites-package&lt;br /&gt;C:\python25\Lib\sites-package&amp;gt;svn co http://code.djangoproject.com/svn/django/trunk/ django&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Djanjo va alors s'installer dans le r&amp;eacute;pertoire de Python. Pour un  usage ult&amp;eacute;rieur plus facile, vous pouvez faire une copie du fichier  django-admin.py de Django\bin vers C:\Python25\Scripts. De plus, vous  pouvez aussi changer vos variables d'environnement. Pour cel&amp;agrave;, faites un  clic droit sur le poste de travail &amp;gt; Propri&amp;eacute;t&amp;eacute;s. Puis, dans l'onglet  Avanc&amp;eacute;, cliquez sur "Variables d'environnement". A la suite de la  chaine de caract&amp;egrave;res du PATH, rajoutez les chemins ci-dessous :&lt;/p&gt;
&lt;pre lang="bash"&gt;C:\Python25;C:\Python25\Scripts\;C:\Program Files\Subversion\bin;&lt;br /&gt;&lt;/pre&gt;
&lt;h3&gt;Configurer Apache&lt;/h3&gt;
&lt;p&gt;Revenons &amp;agrave; Apache. Nous allons configurer votre espace de  d&amp;eacute;veloppement local. R&amp;eacute;&amp;eacute;ditez votre fichier httpd.conf et placez vous  tout en bas. Copiez collez les lignes suivantes, permettant de cr&amp;eacute;er un  alias de votre r&amp;eacute;pertoire de d&amp;eacute;veloppement Django. (C:\Django ici)&lt;/p&gt;
&lt;pre lang="apache"&gt;&lt;br /&gt;     SetHandler python-program&lt;br /&gt;     PythonPath "['C:/django'] + sys.path"&lt;br /&gt;     PythonHandler django.core.handlers.modpython&lt;br /&gt;     SetEnv DJANGO_SETTINGS_MODULE testproject.settings&lt;br /&gt;     PythonDebug On&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     SetHandler None&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     SetHandler None&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;La configuration est donc termin&amp;eacute;e ! Vous trouverez tous les ex&amp;eacute;cutables n&amp;eacute;cessaire &amp;agrave; cette installation &lt;a href="http://valentinbourgoin.net/public/Django_installers.zip"&gt;ici&lt;/a&gt;. Nous pouvons donc entrer dans le vif du sujet.&lt;/p&gt;
&lt;h2&gt;D&amp;eacute;marrer avec Django&lt;/h2&gt;
&lt;p&gt;Pour v&amp;eacute;rifier que l'installation s'est correctement d&amp;eacute;roul&amp;eacute;e, nous  allons commencer un nouveau projet Django. Pour en savoir plus sur les  commandes que nous allons utiliser, je vous invite &amp;agrave; consulter la &lt;a hreflang="en" href="http://www.djangoproject.com/documentation/"&gt;doc du framework&lt;/a&gt;, tr&amp;egrave;s bien faite (ou les futurs articles de ce blog !)&lt;br /&gt;Commen&amp;ccedil;ons &amp;agrave; cr&amp;eacute;er notre dossier Django.&lt;/p&gt;
&lt;pre lang="bash"&gt;C:\&amp;gt;mkdir Django&lt;br /&gt;C:\&amp;gt;cd Django&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Puis, nous allons cr&amp;eacute;er un nouveau projet Django&lt;/p&gt;
&lt;pre lang="bash"&gt;C:\Django\&amp;gt;django-admin.py startproject monprojet&lt;br /&gt;C:\Django\&amp;gt;cd monprojet&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Le squelette du projet Django est donc initialis&amp;eacute;. Pour pouvoir le  tester, nous devons effectuer un runserver qui lancera le serveur de  d&amp;eacute;veloppement en local (par d&amp;eacute;faut sur le port 8000) en validant vos  mod&amp;egrave;les (vides pour l'instant, donc &amp;ccedil;a devrait aller).&lt;/p&gt;
&lt;pre lang="bash"&gt;C:\Django\monprojet\&amp;gt;python manage.py runserver&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Ainsi, en lan&amp;ccedil;ant votre navigateur sur l'url  http://127.0.0.1:8000/monprojet/, vous verrez la page par d&amp;eacute;faut du  projet Django vide.&lt;/p&gt;
&lt;p&gt;Maintenant, &amp;agrave; vous de jouer ! Pour d&amp;eacute;couvrir Django (et python !), je vous conseille le tutorial du &lt;a hreflang="fr" href="http://www.django-fr.org/documentation/"&gt;site officiel&lt;/a&gt; : R&amp;eacute;daction de votre premi&amp;egrave;re application (en quatre parties, traduites en plus !).&lt;/p&gt;
</description><pubDate>Wed, 10 Dec 2008 23:32:29 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/installer-django-sous-windows/</guid></item><item><title>PHPSESSID squatteur d'URL</title><link>http://valentinbourgoin.net/blog/article/phpsessid-squatteur-durl/</link><description>&lt;p&gt;Lors de l'utilisation de variables de session, il arrive qu'une  session_id vienne pourrir notre jolie URL fraichement rewrit&amp;eacute;e. La  solution, en une seule ligne. Dans le .htaccess :&lt;/p&gt;
&lt;pre lang="bash"&gt;php_flag session.use_trans_sid off&lt;/pre&gt;
</description><pubDate>Tue, 11 Nov 2008 23:32:29 +0100</pubDate><guid>http://valentinbourgoin.net/blog/article/phpsessid-squatteur-durl/</guid></item></channel></rss>

