<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coder-Studio &#187; Aquanum</title>
	<atom:link href="http://www.coder-studio.com/blog/author/aquanum/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coder-studio.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 02 Mar 2011 22:17:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Robot wifi terminé</title>
		<link>http://www.coder-studio.com/blog/robot-wifi-termine/</link>
		<comments>http://www.coder-studio.com/blog/robot-wifi-termine/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 12:50:14 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[Embarqué]]></category>
		<category><![CDATA[Robotique]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=339</guid>
		<description><![CDATA[Voici deux nouvelles vidéos de notre projet de robot wifi que nous venons de terminer. On peut encore l'améliorer, mais avons atteint notre but initial et développé toutes les fonctionnalités que nous souhaitions implémenter Vous pouvez retrouver plus d'info sur notre robot sur mon site.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Voici deux nouvelles vidéos de notre projet de robot wifi que nous venons de terminer. On peut encore l'améliorer, mais avons atteint notre but initial et développé toutes les fonctionnalités que nous souhaitions implémenter <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Vous pouvez retrouver plus d'info sur notre robot <a href="http://www.yoannsculo.fr/" target="_blank">sur mon site.</a></p>
<p><object class="aligncenter" width="425" height="344" data="http://www.youtube.com/v/rzsYxudxMRQ&amp;hl=fr&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rzsYxudxMRQ&amp;hl=fr&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p><object class="aligncenter" width="425" height="344" data="http://www.youtube.com/v/CM0XtpQLot8&amp;hl=fr&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/CM0XtpQLot8&amp;hl=fr&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/robot-wifi-termine/feed/</wfw:commentRss>
		<slash:comments>5407</slash:comments>
		</item>
		<item>
		<title>Détournement de Nabaztag et reverse engineering</title>
		<link>http://www.coder-studio.com/blog/detournement-de-nabaztag-et-reverse-engineering/</link>
		<comments>http://www.coder-studio.com/blog/detournement-de-nabaztag-et-reverse-engineering/#comments</comments>
		<pubDate>Fri, 08 May 2009 17:57:41 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[Embarqué]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[électronique]]></category>
		<category><![CDATA[JTAG]]></category>
		<category><![CDATA[Nabaztag]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[violet]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=305</guid>
		<description><![CDATA[J'ai reçu à Noël dernier une jolie petite bestiole. Un bon gadget de geek Le Nabaztag. Très bonne idée à la base, le concept est intéressant, c'est typiquement le genre de truc qui m'intéresse. Sauf ... que ce Nabaztag est finalement un peu trop inutile à mon goût et surtout bien trop contrôlé par la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
<div id="attachment_94" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-94" title="nabaztag" src="http://www.yoannsculo.fr/wp-content/uploads/2009/05/nabaztag-300x300.jpg" alt="Nabaztag" width="300" height="300" /><p class="wp-caption-text">Nabaztag</p></div>
<p>J'ai reçu à Noël dernier une jolie petite bestiole. Un bon gadget de geek <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Le Nabaztag.</p>
<p style="text-align: justify;">Très bonne idée à la base, le concept est intéressant, c'est typiquement le genre de truc qui m'intéresse. Sauf ... que ce Nabaztag est finalement un peu trop inutile à mon goût et surtout bien trop contrôlé par la société qui le vend, à savoir la société Violet. Déjà, qu'est-ce que cette petite bestiole ? Il s'agit en fait d'un terminal connecté à Internet en wifi par lui même et qui peut interagir à la fois avec du contenu sur Internet et avec l'utilisateur. Il est alors possible de lire la météo, suivre ses emails, écouter la radio, écouter des podcast, lire des flux en streaming, suivre des flux RSS, etc. Notre ami lapin clignote de partout et bouge les oreilles dans tous les sens et peut même lire des puces RFID. Bref une bonne idée dans l'absolu, mais finalement ce lapin m'a plus énervé que servi pour l'instant. J'écoute beaucoup de webradio sur Internet, on peut charger des radios sans problème ... sauf que notre ami lapin lit comme un abruti les trames METADATA (titres des musiques entre autres) des flux http des radios. Du coup on a droit à des gros parasites aléatoires dans la musique, parce que le lapin essaye de faire lire du texte au lieu du flux mp3... ahah bien joué !</p>
<p style="text-align: justify;"><span id="more-305"></span>Second truc qui m'embête pas mal. Le lapin se connecte par Internet au serveur de Violet. Le système embarqué au sein du lapin n'est pas super puissant, donc tout le traitement a lieu, semblerait-il, de manière déportée, le lapin ne reçoit que des commandes.En gros si la société fait faillite ou arrête le développement du lapin ... le lapin devient hors d'usage. J'ai quand même du mal à me savoir dépendant d'une société pour utiliser un objet comme celui-ci. En dehors du fait que le lapin n'est pas super fiable, dépend du serveur de violet pour fonctionner comme réveil ou lire ses mails etc, le gadget reste intéressant, mais hélas ça reste un gadget. Je n'ai pas réussi à l'intégrer dans ma vie de tous le jours. Dommage.</p>
<p style="text-align: justify;">En dehors des services de base proposés par Violet pour le nabaztag, la société a créé une API pour permettre aux propriétaires de Nabaztag de le commander eux mêmes, c'est à dire faire bouger les oreilles, lancer des flux mp3 à la demande, lancer le synthétiseur de parole, etc. Mais, même problème ce ne sont que de simples requêtes HTTP qui ne permettent pas d'aller bien loin. Et puis accessoirement, le lapin est carrément manipulable depuis n'importe quel coin de la planète, du moment qu'une personne a l'identifiant de votre lapin (sorte d'adresse MAC). Vous avez vite fait de tomber par hasard sur l'adresse d'un lapin existant.</p>
<p style="text-align: justify;">Bref, après moins de 2 semaines de tentatives d'utilisation je n'ai pas résisté à la tentation de démonter cette petite bestiole. Il s'avère qu'elle cache du matériel plutôt sympathique, et j'ai découvert avec joie qu'elle disposait d'un port JTAG, permettant de programmer le processeur directement.</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 680px"><img class="size-full wp-image-96" title="dsc06946_small" src="http://www.yoannsculo.fr/wp-content/uploads/2009/05/dsc06946_small.jpg" alt="Nabaztag Démonté" width="670" height="503" /><p class="wp-caption-text">Nabaztag Démonté</p></div>
<div id="attachment_98" class="wp-caption aligncenter" style="width: 680px"><img class="size-full wp-image-98" title="dsc06951_small" src="http://www.yoannsculo.fr/wp-content/uploads/2009/05/dsc06951_small.jpg" alt="Carte embarquée du Nabaztag" width="670" height="503" /><p class="wp-caption-text">Carte embarquée du Nabaztag</p></div>
<p>J'ai pu donc diséquer le lapin et découvrir ce qu'il se trouvait à l'intérieur:</p>
<ul>
<li>2 moteurs continus pour faire bouger les oreilles</li>
<li>Un lecteur de puce RFID</li>
<li>Un micro</li>
<li>Une prise jack reliée à la carte son</li>
<li>Un potentiomètre pour régler le volume</li>
<li>Une carte wifi</li>
<li>Un haut parleur</li>
<li>Des DELs associées et leurs cônes de direction pour avoir de jolies petits ronds lumineux sur la coque par transparence</li>
</ul>
<div id="attachment_101" class="wp-caption alignright" style="width: 160px"><img class="size-thumbnail wp-image-101" title="mcbstm32" src="http://www.yoannsculo.fr/wp-content/uploads/2009/05/mcbstm32-150x150.jpg" alt="MCBSTM32 - Carte de développement pour processeur ARM" width="150" height="150" /><p class="wp-caption-text">MCBSTM32 - Carte de développement pour processeur ARM</p></div>
<p style="text-align: justify;">
<p>Je ne vais pas détailler minutieusement tous les composants de la carte principale. Quelqu'un s'en est déjà chargé sur <a href="http://www.petertyser.com/2007/03/11/nabaztag-nabaztagtag-dissection/" target="_blank">ce blog</a>. Je peux lire sur le processeur "OKI L670405I - INNN, ARM 722EBAUJ". Il semblerait qu'il s'agisse d'un processeur <a href="http://www.arm.com/products/CPUs/ARM7TDMI.html" target="_blank">ARM7 TDMI</a>, ce processeur pourrait d'après mes recherches (je n'en suis pas sûr) être programmé par une <a href="http://embeddedgear.com/mcbstm32.aspx" target="_blank">carte de développement</a> qui vaut 229$. Ahah la bonne blague ! Il doit peut être y avoir moyen de trouver un moyen moins cher, mais je ne le connais pas encore.</p>
<p style="text-align: justify;">Du coup j'essaye de découvrir comment reprogrammer le processeur pour y mettre un Firmware maison et libre de surcroit. En gros dans l'idée de permettre aux gens d'utiliser leur nabaztag sur des serveurs qui ne sont pas ceux de Violet. (Free your rabits !!!) Cela impliquerait un certain travail, analyse minutieuse des specifications matérielles, reprogrammation des drivers, reprogrammation des protocoles de communication, reprogrammation d'un serveur etc. Mais c'est le genre de projet qui m'intéresserait vraiment : refaire de A à Z le firmware à des fins pédagogiques. J'essaye de contacter des gens sur Internet qui semblent intéressés par la libération des lapins, pour l'instant pas de réponse positive. Mais je cherche toujours ! Pour l'instant je ne sais pas trop par où commencer avec le peu de connaissances et de matériel que j'ai à ma disposition. Mais si par hasard, vous êtes intéressé par une telle entreprise n'hésitez pas à <a href="http://www.yoannsculo.fr/contact/" target="_blank">me contacter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/detournement-de-nabaztag-et-reverse-engineering/feed/</wfw:commentRss>
		<slash:comments>4450</slash:comments>
		</item>
		<item>
		<title>Mon premier robot - Premier prototype</title>
		<link>http://www.coder-studio.com/blog/mon-premier-robot-premier-prototype/</link>
		<comments>http://www.coder-studio.com/blog/mon-premier-robot-premier-prototype/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 21:40:34 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[Embarqué]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Robotique]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[Fox Board]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wiimote]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=254</guid>
		<description><![CDATA[Je réalise mon rêve d'enfance en ce moment, la réalisation d'un robot de A à Z. Je regrette de finir mes études à l'UTT dans 2 mois, ça commence à devenir vraiment passionnant ! Donc en fait je travaille sur un robot wifi commandé par manette de wii. J'ai réussi à caser ça comme projet [...]]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344" data="http://www.youtube.com/v/eSErBSeCOCU&amp;hl=fr&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/eSErBSeCOCU&amp;hl=fr&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p style="text-align: justify;">Je réalise mon rêve d'enfance en ce moment, la réalisation d'un robot de A à Z. Je regrette de finir mes études à l'UTT dans 2 mois, ça commence à devenir vraiment passionnant ! Donc en fait je travaille sur un robot wifi commandé par manette de wii. J'ai réussi à caser ça comme projet dans mon cursus, au lieu de faire un cours bouche trou pour finir ma 5eme année, bah je me suis lancé avec un autre étudiant dans le développement d'un chti robot <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Il ne s'agit pour l'instant que de notre premier prototype, comme vous pouvez le voir il n'est pas entièrement autonome. On doit encore travailler sur l'alimentation du système embarqué (Carte Fox), du routeur wifi et des servomoteurs. Pour l'instant on a des gros fils rattachés au robot. On cherche des batteries adaptées pour alimenter tout ça. C'est que ça pompe du courant ce ptit machin.</p>
<p style="text-align: justify;">Il reste encore du boulot, le robot a la fâcheuse tendance à se mettre en mode autiste et à faire n'importe quoi. On a écarté un problème lié au wifi, donc ça doit venir du code qui marche paaaas bien <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Reste ensuite à faire marcher la pince, qui n'a pas encore été implémentée dans le code. Ensuite on pourra utiliser OpenCV pour faire un peu de traitement d'image et donner la possibilité au robot de repérer un certain nombre de choses.</p>
<p style="text-align: justify;">Je suis en train de me préparer un blog perso exprès pour présenter l'avancement de mes projets de robotique, et de programmation en générale. Je posterai de temps en temps sur Coder-Studio mon avancement du projet <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  et donnerai à l'occasion l'adresse pour compléter mes billets sur mes robots. Sinon, désolé pour la vidéo, elle est assez courte et on ne voit pas trop la manette de wii. En fait je n'avais plus de place sur ma carte mémoire...</p>
<p style="text-align: justify;">Voilà donc c'est un premier aperçu très rapide du projet. Je ferai une vidéo plus complète au prochain épisode avec un billet contenant plus de détails sur le robot <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/mon-premier-robot-premier-prototype/feed/</wfw:commentRss>
		<slash:comments>4858</slash:comments>
		</item>
		<item>
		<title>Simerion – Retour de développement</title>
		<link>http://www.coder-studio.com/blog/simerion-%e2%80%93-retour-de-developpement/</link>
		<comments>http://www.coder-studio.com/blog/simerion-%e2%80%93-retour-de-developpement/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 00:32:04 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Jeu en ligne alternatif]]></category>
		<category><![CDATA[Jeu web]]></category>
		<category><![CDATA[Nainwak]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Simerion]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=242</guid>
		<description><![CDATA[Je me suis lancé en 2005 avec Wett dans le développement d’un jeu par navigateur web: Simerion pour les gens qui ne connaissent pas. Il s’agit d’un jeu mélangeant à la fois le genre RPG et gestion. L’idée étant d’endosser le rôle d’un colon fraichement envoyé sur de nouvelles planètes. Chaque joueur choisit un métier, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a title="Simerion" href="http://www.simerion.fr" target="_blank"><img class="size-full wp-image-247 alignleft" title="simerion" src="http://www.coder-studio.com/blog/wp-content/uploads/2009/04/simerion.jpg" alt="simerion" width="200" height="117" /></a>Je me suis lancé en 2005 avec Wett dans le développement d’un jeu par navigateur web: <a title="Simerion" href="http://www.simerion.fr" target="_blank">Simerion</a> pour les gens qui ne connaissent pas. Il s’agit d’un jeu mélangeant à la fois le genre RPG et gestion. L’idée étant d’endosser le rôle d’un colon fraichement envoyé sur de nouvelles planètes. Chaque joueur choisit un métier, et le principe est simple : du RolePlay, tout le monde fait ce qu’il veut, tout est possible. Bref, dans le principe, le jeu idéal, mais hélas pas forcément en pratique.</p>
<p style="text-align: justify;">J’ai quitté l’équipe de Simerion, après 5 ans de conception et développement, il y a un peu plus d’un mois pour différentes raisons que j’aborderai plus loin. Mais je profite de ce billet pour faire une sorte de bilan du projet, de mon point de vue. L’idée étant de faire un retour d’expérience afin de pointer du doigt ce que nous avons pu apprendre mais aussi afin de mettre en évidence les erreurs que nous avons commises. Le tout dans l’espoir de pouvoir aider des personnes s’engageant dans un projet similaire.<br />
Tout d’abord, je précise que le jeu n’est pas arrêté. Il est toujours en développement, je n’ai fait que quitter l’équipe. Donc si mon article vous donne envie d’en savoir plus ou de rejoindre l’équipe de développement, n’hésitez pas à vous rendre sur <a title="Simerion" href="http://www.simerion.fr" target="_blank">www.simerion.fr</a></p>
<p style="text-align: justify;"><a title="Simerion" href="http://www.simerion.fr" target="_blank"><span id="more-242"></span></a></p>
<p style="text-align: justify;">Tout d’abord, un rapide historique :</p>
<p><strong>2005</strong> : Wett et moi-même avons ressorti du fond d’un tiroir les bases d’un projet que j’avais esquissé 2 ans plus tôt. Durant 5 mois nous mettons ainsi à plat toutes nos idées sur un forum et wiki. Mais très rapidement nos études respectives (classes prépa) nous ont poussées à mettre en pause le projet.<br />
<strong>Juillet 2006</strong> : Un an plus tard nous reprenons notre projet en main et continuons à travailler sur la conception durant un mois de manière soutenue.<br />
<strong>Août 2006</strong> : Nous commençons enfin le développement et devenons membre de l’association <a title="Nainwak" href="http://www.nainwak.org" target="_blank">Nainwak </a>qui nous hébergera par la suite.<br />
<strong>Août 2007</strong> : Un an plus tard, avec l’aide d’Altheran qui nous a rejoint en mars, nous sortons notre première version alpha avec une cinquantaine de joueurs.<br />
<strong>Mars 2009</strong> : Plus d’un an et demi plus tard, la beta alors que je quitte l’équipe.</p>
<p>Voici donc une suite de points, qui maintenant avec le recul me semblent importants à souligner.</p>
<h3>Travailler en équipe</h3>
<p>A travers ce projet j’ai pu découvrir la nécessité de travailler à plusieurs. Et cela pour plusieurs raisons. Tout d’abord afin de s’entre-motiver lorsque certains d’entre nous sont démotivés. Voir d’autres personnes travailler sur le projet peut très facilement nous remonter à bloc. Le développement d’un jeu web comme Simerion ne doit pas se faire en comité réduit. Attention l’effet inverse n’est pas pour autant une bonne idée. S’entourer de trop de monde peut être néfaste pour le projet. Il faut prendre le juste nombre de programmeurs, en prenant en compte leurs disponibilités et leurs compétences.</p>
<h3>Bien choisir son langage</h3>
<p>Notre choix s’est porté initialement sur le PHP couplé à de l’Ajax afin de bénéficier d’un jeu accessible partout depuis Internet avec une grande interaction avec les joueurs. Pourquoi le PHP ? Parce que ce langage m’était déjà familier et était simple à prendre  en main. Cependant avec le recul, nous n’aurions sans doute pas dû employer celui-ci préférant sans doute le JAVA ou le C++ afin de réaliser un véritable MMORPG. A maintes reprises nous nous sommes mordus les doigts quant à notre choix de technologie. Nous avons très rapidement atteint les limites du PHP et de l’Ajax. Nous avons été bridés par nos choix initiaux qui nous ne ont pas permis pleinement de faire ce que nous souhaitions réaliser. Mais il était trop tard pour changer.<br />
Je conseille vraiment au départ de faire le tour de toutes les technologies lorsque l’on s’aventure dans un projet web d’ampleur. Chaque langage possède ses avantages et inconvénients qu’il faut comparer. Nous ne l’avons pas fait, et cela nous a desservis.</p>
<h3>Ne pas réinventer la roue</h3>
<p style="text-align: justify;">Une autre erreur que nous avons commise a été de ne pas faire le tour des Frameworks PHP et Ajax existants. En jeunes fous que nous étions, nous avons créé notre propre moteur de jeu de A à Z et notre propre Framework Ajax. Nous avons réinventé la roue et avons perdu un temps fou. D’un autre côté, nous ne savions pas forcément que des outils tout fait existaient, cela nous a toutefois permis de comprendre le fonctionnement d’un certain nombre de techniques et technologies. Mais si c’était à refaire j’utiliserais au maximum des outils déjà disponibles.<br />
Avant de commencer un projet conséquent. Je pense qu’il faut vraiment regarder, comparer les outils à sa disposition et ne pas fonce dans le tas tête baissée. Utiliser des outils déjà faits peut faire réellement gagner un temps précieux.</p>
<h3>Utiliser des schémas et diagrammes UML</h3>
<p style="text-align: justify;">L’utilisation de diagrammes UML est assez primordiale. Il est difficile d’être rigoureux sur la durée  afin de mettre sur papier les idées avant de coder. Mais c’est un mal pour un bien au final, car c’est un gain de temps non négligeable. Toutefois les diagrammes UML ne sont utiles que si l’on ne change pas d’idée en permanence. Auquel cas, les diagrammes sont en permanence remis en cause, ce qui est pour ce coup-ci une grosse perte de temps.</p>
<h3>Eviter l’approche du « tout objet »</h3>
<p style="text-align: justify;">L’approche objet d’un jeu web est assez complexe. A première vue, le « tout objets » peut sembler être une bonne chose, mais les objets ne sont pas les amis des bases de données. Qui dit objets, dit attributs, et qui dit attributs dit base de données derrière chargée et mise à jour en permanence. Travailler avec les objets et leurs instances implique d’optimiser en permanence le code afin que  le serveur ne s’écroule pas sous les requêtes SQL. Par exemple, si je veux charger une instance d’appartement d’un joueur dans Simerion, nous devons charger un objet qui va définir son type (classe), puis un objet qui va définir son instance de conteneur (bâtiment) ainsi que la classe de celui-ci. Vu que nous avons besoin parfois de localiser cet appartement, nous avons besoin de charger la région dans laquelle se trouve notre bâtiment (une table supplémentaire). Comme il y a plusieurs planètes il faut également charger sur quelle planète se trouve cette région (une table de plus). Au final la création d’un objet devient pharamineuse en terme de ressources, nécessitant une flopée de requêtes SQL. Imaginez comment charger des collections entières d’appartements... De quoi mettre à terre le serveur. Nous sommes alors obligés d’optimiser en nous éloignant peu à peu du système classique d’objets. Travailler en objet est intéressant, mais dès que l’on se met à travailler sur des pages qui vont recevoir énormément de visites, l’intérêt en prend un sérieux coup.<br />
Je pense qu’il n’y a pas de solution absolue et  qu’il faut privilégier les objets pour la maintenabilité du code. Par contre, en ce qui concerne le lien avec les BDD, il faut trouver un compromis et essayer de s’éloigner  du schéma classique qui consiste à tout charger lors de la création de l’objet. Je pense qu’il suffirait de regarder du côté des gros Frameworks ce qu’il se fait en la matière. La liaison avec la BDD est une chose assez pointilleuse et complexe, je pense que même au bout de 5 ans, le code n’est pas optimisé au maximum de ce côté-là. Par conséquent, aller voir les outils qui existent déjà peut être d’une très grande aide.</p>
<h3>Ne pas remettre en question son code en permanence</h3>
<p style="text-align: justify;">Une des choses qui nous a fait le plus perdre de temps a été la permanente remise en question de notre code. C’est bien plus facile à dire qu’à faire, mais il faut à tout pris se contenter au plus tôt de son travail pour avancer de l’avant. De la même façon, il faut éviter d’optimiser à mort tout et tout de suite, il faut le faire au fur et à mesure en trouvant un juste milieu. J’aborderai plus loin la question du travail étape par étape, mais il est très très important, d’après l’expérience que j’ai tirée de Simerion, de se contenter de ce qui fonctionne et aller de l’avant pour avoir du concret et non pas du code en permanence remanié. Une fois que le code fonctionne il est alors possible de l’optimiser, mais il faut viser à mon sens le fonctionnel avant de foncer tête baissée sur la sécurité et l’optimisation du jeu.</p>
<h3>Bien choisir son cycle de développement</h3>
<p style="text-align: justify;">Le choix de notre cycle de développement n’a définitivement pas été le bon. Et ce dernier est à mon sens la raison de notre (mon) échec. 5 ans ! Nous avons passé 5 ans sur ce projet et toujours pas de jeu jouable en version publique à mon départ … C’est entre autres une des raisons de mon arrêt. C’est même un exploit d’avoir tenu aussi longtemps. Nous avons choisi en effet de n’ouvrir le jeu que lorsqu’une version du jeu serait suffisamment jouable pour retenir le joueur. Or, le principe de Simerion est de pouvoir tout faire. Tout est interdépendant, et tout s’équilibre. Il est alors impossible de sortir une version jouable tant que TOUT le jeu n’a pas été programmé. Quelle erreur nous avons faite ici !<br />
Dès que le concept est posé sur papier un jeu amateur doit, selon moi, sortir au plus vite en production. A la fois pour avoir des retours des joueurs, mais aussi afin de se motiver dans son travail de développement. C’est extrêmement déprimant de ne pas avoir de retour de joueurs avant des mois, voir des années dans notre cas. La motivation est naturellement en constante baisse, et pas un joueur pour vous rebooster. Il ne faut compter que sur les membres de l’équipe qui eux aussi sont en manque de motivation.<br />
Donc vraiment je conseille vivement de développer les jeux web sur des versions fréquentés par les joueurs (tout du moins pour les jeux amateurs). Il faut sortir régulièrement les versions de développement et surtout ne pas attendre aussi longtemps que nous entre chaque version. En faisant cela on entretient la communauté de joueurs qui nous supporte et nous est très utile, et on entretient notre motivation dans le projet. Sans cela, tout s’effondre au bout de X mois ou années. Et tout l’investissement aura été vain.</p>
<h3>Créer une communauté autour de son jeu</h3>
<p style="text-align: justify;">Comme je le disais précédemment, il est nécessaire de s’entourer dès le début d’une communauté de joueurs. Ces derniers pourront tester votre jeu, donner leur avis, proposer leurs idées d’améliorations etc. N’ayant pas lancé de version jouable durable de Simerion, nous n’avons pas eu de communauté derrière nous pour nous soutenir dans notre développement. Et c’est une conséquence très négative, qui va avec notre mauvais choix de cycle de développement.<br />
Je conseille donc vraiment de travailler dès le début à la création d’une communauté entourant le projet à la fois pour y puiser de la motivation, mais aussi afin de se faire aider. Car bien souvent, la communauté gravitant autour de votre jeu est source de nouveaux membres pour votre équipe de développement.</p>
<h3>Les amateurs ne peuvent pas rivaliser avec les pros</h3>
<p style="text-align: justify;">Cela fait mal à dire, mais la création d’un jeu RPG complexe n’est pas à la portée d’une équipe d’amateurs. Qu’on me montre le contraire et j’en serais ravis ! Mais le fait est que la création d’images, de décors, d’histoires, de scénarios, de quêtes et de missions nécessite un travail pharaonique. J’ai les 95% du temps endossé le rôle du développeur, du scénariste et de l’illustrateur à la fois. Ceci est quasiment impossible à gérer dans un tel projet. Idéalement il faudrait avoir dans son équipe au moins un graphiste / illustrateur et plusieurs scénaristes pour remplir le jeu. Mais il s’agit d’atouts rares, et il faut bien souvent ne compter que sur soi même. Sur cet aspect je suis assez pessimiste hélas, je pense qu’un jeu de l’envergure de type Fallout, Baldur’s gate, Final Fantasy, ou même Zelda n’auraient pas pu être réalisés par des amateurs. Cela demande trop de travail en dehors de la partie programmation. Le jeu ultime est à mon sens impossible à développer par des amateurs, hélas… A mon sens, un jeu amateur ne doit pas voir trop gros dès le départ. Il faut y aller au fur et à mesure, en se faisant plaisir et tout en gardant à l’esprit que nous ne pouvons pas rivaliser avec les grands. Le jeu ultime amateur n’est pas réalisable, cela demande beaucoup trop de travail. Avec Simerion nous sommes partis sur un concept trop complexe, trop utopique … La clé de la réussite est un cadrage dès le départ qui trouve un compromis entre un concept novateur et le minium de code possible.</p>
<h3>Tenir un cahier des charges et une documentation à jour</h3>
<p style="text-align: justify;">Un point important dans le cycle de développement réside dans la tenue d’un cahier des charges et d’une documentation à jour. En effet, il n’est pas rare de mettre en pause le projet pendant X mois. Et reprendre le code après une période d’inactivité est vraiment très difficile (même pour du code tapé soi même).  Le cahier des charges permet de garder une vue globale sur le projet avec un certain recul, il vous permet de poser au clair toutes les idées et mieux structurer ses  idées. La documentation permet, elle de son côté d’expliquer le fonctionnement du jeu (aspect technique) mais aussi d’expliquer pourquoi tel ou tel choix d’algorithme. La documentation peut vous faire gagner un temps fou pour vous remettre dans votre code, ou pour comprendre le code d’un autre programmeur. Ces deux outils permettent également l’intégration de nouveaux membres à l’équipe de développement (chose à laquelle on ne pense pas forcément). Le fait est que Simerion est devenu une véritable usine à gaz et que plusieurs personnes se sont cassées les dents à essayer de comprendre notre code pas toujours commenté ni expliqué. Le manque d’explication peut alors être un frein au recrutement de nouveaux développeurs.</p>
<h3>Se faire soutenir</h3>
<p style="text-align: justify;">Nous avons rejoint dès le départ l’association <a title="Nainwak" href="http://www.nainwak.org" target="_blank">Nainwak</a>, qui nous a hébergés, soutenus et conseillés. Nous n’aurions sans doute pas tenu autant de temps sans elle. Nous avons même eu la chance grâce à elle d’être exposant à 2 reprises au festival du jeu vidéo. Nous avons pu rencontrer des professionnels qui ont été intéressés par notre jeu. Cela fut une expérience très enrichissante.<br />
Je conseille vivement à toute personne se lançant dans un jeu web sérieux de contacter Nainwak. La mission de cette association est d’aider les amateurs, et elle y travaille à merveille.</p>
<h3>Bilan</h3>
<p style="text-align: justify;">J’ai complètement arrêté Simerion tout d’abord parce que je ne prenais plus aucun plaisir à travailler dessus. Le développement était devenu interminable et j’avais besoin de passer à autre chose. A cela se sont ajoutés des problèmes de santés plus une saturation du web en général. Abandonner Simerion alors que ce projet me tenait tellement à cœur a été une chose très difficile, mais je pense qu’au bout de 5 ans, il fallait simplement passer à autre chose.<br />
Simerion a été une expérience vraiment très enrichissante. J’ai pu apprendre énormément et rencontrer beaucoup de monde. Mais je pense que si nous nous étions pris autrement dès le départ nous aurions sans doute bien mieux réussi, et je serais encore sur le projet. Mais tout cela fait partie de l’apprentissage. C’est chuter pour mieux se relever et mieux démarrer mes prochains projets.<br />
Toutefois, nous nous sommes lancés dans un concept dément, où tout devait être possible. Le jeu ultime en quelques sortes. Un tel jeu n’est tout bonnement pas réalisable et complètement utopique (A moins d’être un studio de jeu vidéo avec de la monnaie sonnante et trébuchante pour assurer le coup). Mauvais choix de départ, concept trop ambitieux, mauvaise démarche de développement, réinvention de la roue ont été autant d’erreurs qui ont amenés Simerion à ne pas arriver au point escompté. On apprend de ses erreurs et j’espère que les nôtres pourront vous êtes bénéfiques également.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/simerion-%e2%80%93-retour-de-developpement/feed/</wfw:commentRss>
		<slash:comments>1729</slash:comments>
		</item>
		<item>
		<title>Interface GSM sur système Linux embarqué</title>
		<link>http://www.coder-studio.com/blog/interface-gsm-sur-systeme-linux-embarque/</link>
		<comments>http://www.coder-studio.com/blog/interface-gsm-sur-systeme-linux-embarque/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 15:38:38 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[C & C++]]></category>
		<category><![CDATA[Embarqué]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[AT]]></category>
		<category><![CDATA[Fox Board]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[SMS]]></category>

		<guid isPermaLink="false">http://r19649.ovh.net/cs/blog/?p=25</guid>
		<description><![CDATA[J'ai été amené à travailler dans le cadre de mes études sur un petit projet de développement d'une Interface GSM sur un système Linux embarqué. Ayant découvert la puissance du système, j'ai pensé vous faire part de mes découvertes sur l'utilisation de cette carte. Dans mon cas le principe était de créer un système autonome [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_24" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-24" title="carte_fox" src="http://r19649.ovh.net/cs/blog/wp-content/uploads/2009/02/acme_fox-300x197.jpg" alt="Carte Fox" width="300" height="197" /><p class="wp-caption-text">Carte Fox</p></div>
<p style="text-align: justify;">J'ai été amené à travailler dans le cadre de mes études sur un petit projet de développement d'une Interface GSM sur un système Linux embarqué. Ayant découvert la puissance du système, j'ai pensé vous faire part de mes découvertes sur l'utilisation de cette carte.</p>
<p style="text-align: justify;">Dans mon cas le principe était de créer un système autonome d'envoi de SMS aux étudiants de mon école. L'idée étant de pouvoir envoyer les résultats des examens directement par SMS aux étudiants, ce qui est ma foi fort sympatique <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2 style="text-align: justify;">Le Matériel</h2>
<p style="text-align: justify;">Alors, tout d'abord : Carte FOX Késako !? Il s'agit d'un système embarqué à bas coût utilisant le système d’exploitation Linux. La carte est dotée d’un processeur AXIS à 100MHz et de 32 MB de RAM, de connectiques USB, Ethernet, d’un port série console ainsi que 40 pins pouvant être reliées à plusieurs BUS de données. Elle permet de développer en bon nombre de langages : C, C++, PHP, PYTHON, Shell, … et permet des connections HTTP, FTP, SSH et TELNET. De petite taille et faible consommation électrique (1 W) est idéale pour mettre en place rapidement des projets de type embarqué.</p>
<p style="text-align: justify;">
<div id="attachment_36" class="wp-caption alignright" style="width: 210px"><img class="size-full wp-image-36" title="gm862-quad" src="http://r19649.ovh.net/cs/blog/wp-content/uploads/2009/02/gm862-quad.jpg" alt="Modem GSM" width="200" height="200" /><p class="wp-caption-text">Modem GSM</p></div>
<p>Le modem GSM utilisé ici est un modem de la marque Telit. Il est relié à la carte FOX par l’intermédiaire d’une carte d’extension. La carte FOX peut communiquer avec le modem par l’intermédiaire du port série /dev/ttyS2. Une simple utilisation de carte SIM classique permet de se connecter au réseau GSM. Il est possible de trouver cette carte seule sur le site d'<a href="http://foxlx.acmesystems.it/?id=4">ACME SYSTEMS</a> à 176 € frais de port tout compris. Si l'on ajoute le kit GPRS cela monte jusqu'à 626 €, ce qui commence déjà à faire beaucoup. Je pense qu'une solution plus abordable serait de relier la carte basique à un téléphone portable pour communiquer en série étant donné que dans notre cas nous n'avons pas besoin de tous les éléments de la carte d'extension.</p>
<p style="text-align: justify;">Les modems GSM utilisent un protocole de commandes appelées "commandes AT". Chaque constructeur fait un peu ce qu'il veut avec ses normes, ce qui fait que chaque modem est plus ou moins différent et qu'il faut se référer à la <a href="http://www.telit.com/module/infopool/download.php?id=542">doc du constructeur</a>. Ces commandes AT sont donc envoyées via le port série pour soumettre différentes commandes au modem. On peut notamment dans notre cas manipuler et envoyer des SMS par l’intermédiaire de celles-ci.</p>
<p><span id="more-25"></span></p>
<h2 style="text-align: justify;">Environnement de développement</h2>
<p style="text-align: justify;">La compilation d’un programme en C sur la carte fox nécessite un compilateur croisé permettant de compiler le code C pour les processeurs AXIS. La compilation directe sur la carte n’étant pas possible, il faut par conséquent utiliser un SDK  pour compiler le programme. J'ai travaillé avec le <a href="http://foxlx.acmesystems.it/?id=5">SDK Axis</a> fourni pour la carte fox.</p>
<p style="text-align: justify;">Avant toute chose il faut se rendre dans le dossier du SDK (~/devboard-R2_01 pour ma part) et y taper la commande suivante afin d’initialiser l’environnement de développement.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code9'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p259"><td class="code" id="p25code9"><pre class="shell" style="font-family:monospace;">. init_env</pre></td></tr></table></div>

<p>Ensuite, il faut choisir le compilateur AXIS</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code10'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2510"><td class="code" id="p25code10"><pre class="shell" style="font-family:monospace;">make cris-axis-linux-gnu</pre></td></tr></table></div>

<p>On doit alors créer un Makefile pour notre programme. Voici celui que j'ai créé :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code11'); return false;">View Code</a> MAKEFILE</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2511"><td class="code" id="p25code11"><pre class="makefile" style="font-family:monospace;">AXIS_USABLE_LIBS=UCLIBC GLIBC
include $(AXIS_TOP_DIR)/tools/build/Rules.axis
PROGS = sms
INSTDIR= $(prefix)/mnt/flash
INSTMODE= 0755
INSTOWNER= root
INSTGROUP= root
OBJS = main.o atcommand.o modem.o
all: $(PROGS)
$(PROGS): $(OBJS)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
scp sms root@fox01:/mnt/flash/tx
clean:
rm -f *.o
rm -f sms</pre></td></tr></table></div>

<p style="text-align: justify;">Il n’y a alors plus qu’à faire un make pour compiler le programme et à l’envoyer sur la carte en FTP ou SCP. Ayant dû compiler à de très nombreuses reprises mon programme, j’ai rajouté l’envoi du fichier dans le makefile via la commande scp. Les fichiers utilisateurs sont déposés sur la carte Flash dans le répertoire /mnt/flash. Attention toutefois, car la mémoire flash EPROM est limitée en nombre d'écritures. Il vaut mieux tant que possible éviter d'écrire dans cette mémoire régulièrement. Privilégier la RAM (dossier /var par exemple) plutôt que sur la carte flash. Seul soucis, la carte se réinitialise à chaque redémarrage, par conséquent les tests peuvent être faits en RAM et une fois que l'application compilée est stable il est préférable de la déposer sur la carte flash afin de ne pas perdre le programme à chaque reboot.</p>
<p style="text-align: justify;">La connexion à la carte fox se fait en telnet (ou ssh) simplement à l’aide de la commande suivante grâce à un simple telnet</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code12'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2512"><td class="code" id="p25code12"><pre class="shell" style="font-family:monospace;">telnet adresse_ip_de_la_fox</pre></td></tr></table></div>

<h2 style="text-align: justify;">Développement du programme</h2>
<h3>Utilisation des commandes AT</h3>
<p style="text-align: justify;">Le modem se commande directement grâce aux commandes AT.  Ces commandes AT suivent une certaine syntaxe et nécessitent une mise en forme particulière pour leur envoi sur le modem. Ce dernier reconnaît plusieurs caractères de contrôle :</p>
<p style="text-align: justify;"><strong>&lt;CR&gt;</strong> : Caractère de retour chariot : Sa valeur ASCII en décimal est fixée à 13 par défaut. (et peut être changée grâce au paramètre AT S3) Sa valeur hexadécimale quant à elle est 0x0D.</p>
<p style="text-align: justify;"><strong>&lt;LF&gt;</strong> : Caractère d’interligne : Sa valeur ASCII en décimal est fixée à 10 par défaut</p>
<p style="text-align: justify;"><strong>&lt;CTRL+Z&gt;</strong> : Combinaison des touches CTRL et Z. Sa valeur hexa est 0x1A</p>
<p style="text-align: justify;">Ces caractères sont demandés et utilisés par le modem pour identifier les commandes AT. Chacune d’entre-elles utilise ces caractères de contrôle plus ou moins différemment. Voici un aperçu des différentes commandes que j’ai utilisées avec leurs caractères de contrôle.</p>
<p style="text-align: justify;"><strong>ATE0&lt;CR&gt;</strong><br />
Cette commande permet de désactiver la commande écho (ATE1 la réactive). Cela demande donc au modem de ne pas répéter systématiquement les commandes qui lui sont envoyées.</p>
<p style="text-align: justify;"><strong>AT+CMGF=1&lt;CR&gt;</strong></p>
<p style="text-align: justify;">Cette commande permet de régler le format de message pour l’envoi de SMS. Par défaut, le modem est en mode PDU (AT+CMGF=0). C'est-à-dire que l’envoi de message se fait en hexadécimal. AT+CMGF=1 permet de passer en mode texte, ce qui simplifie les manipulations de SMS.</p>
<p style="text-align: justify;"><strong>AT+CMGS="06XXXXXXXX"&lt;CR&gt;</strong></p>
<p style="text-align: justify;">Cette commande permet de commencer la rédaction d’un SMS. On précise en argument le numéro de téléphone choisi. En retour on obtient le caractère d’invite de commande « &gt; » qui nous invite à rentrer le texte du SMS.</p>
<p style="text-align: justify;"><strong>Texte du SMS&lt;CTRL+Z&gt;&lt;CR&gt;</strong><br />
Cette fin de commande permet alors de préciser le texte et de valider l’envoi du SMS par un CTRL+Z et un retour chariot.</p>
<p style="text-align: justify;">Il est important de noter que l'envoi de la commande AT d'envoi de SMS se fait en 2 parties et pas en un coup. (j'ai testé pendant plusieurs semaines... ça ne marche pas ^^)</p>
<p style="text-align: justify;">Le modem répond à ces commandes par des messages de retour. Ces derniers indiquent si celles-ci ont été exécutées avec succès ou non. La plupart de ces réponses sont entourées des caractères <strong>&lt;CR&gt;&lt;LF&gt;</strong> Il y a toutefois des exceptions, notamment pour <strong>AT+CMGS</strong> qui renvoie <strong>+CMGS: &lt;mr&gt;</strong> ou <strong>+CMS ERROR: &lt;err&gt;</strong> Mais dans la plupart des cas les retours sont rapportés de la manière suivante :<br />
<strong>&lt;CR&gt;&lt;LF&gt;OK&lt;CR&gt;&lt;LF&gt;<br />
&lt;CR&gt;&lt;LF&gt;ERROR&lt;CR&gt;&lt;LF&gt;<br />
&lt;CR&gt;&lt;LF&gt;...&lt;CR&gt;&lt;LF&gt;</strong></p>
<p style="text-align: justify;">Ces commandes AT doivent être transmises au modem par le port série /dev/ttyS2. Il existe plusieurs façons de communiquer sur le port série :</p>
<p style="text-align: justify;"><strong>Termnetd</strong> (<a href="http://foxlx.acmesystems.it/?id=69">http://foxlx.acmesystems.it/?id=69</a>)</p>
<p style="text-align: justify;">Il s’agit d’un processus permettant de relier un port TCP/IP à un port série de manière transparente. Une fois que le deamon est lancé sur la carte fox, il est possible de se connecter depuis l’extérieur grâce à la commande telnet adress_ip_fox 7000. Le port 7000 (choisi dans la config de termnetd) redirige directement sur le port série et il est alors possible de rentrer manuellement des commandes AT et de voir leur comportement direct sur le modem. Ce programme est utile pour comprendre le fonctionnement des commandes AT.</p>
<p style="text-align: justify;"><strong>Script Chat</strong> (<a href="http://linux.about.com/od/commands/l/blcmdl8_chat.htm">http://linux.about.com/od/commands/l/blcmdl8_chat.htm</a>)<br />
Il est possible d’utiliser la commande UNIX chat permettant de dialoguer de manière automatisée avec le modem.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code13'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2513"><td class="code" id="p25code13"><pre class="shell" style="font-family:monospace;">/usr/sbin/chat -V -s -f &lt;fichier_script&gt; &gt; /dev/ttyS2 &lt; /dev/ttyS2 2&gt;&lt;fichier_resultat&gt;</pre></td></tr></table></div>

<p style="text-align: justify;">La réponse du modem est alors enregistrée dans le fichier de résultat choisi.</p>
<p style="text-align: justify;"><strong>Programme en C</strong><br />
Il est également possible de dialoguer avec le modem via un programme C. Le dialogue se fait alors en écrivant et en lisant sur /dev/ttyS2. La prise en main est beaucoup plus complexe que les 2 précédentes méthodes, mais permet une totale maitrise du modem.</p>
<h3 style="text-align: justify;">Développement en C</h3>
<p style="text-align: justify;">Le code pour envoyer un SMS n'est pas bien compliqué, mon but n'est pas là de copier/coller intégralement mon code, mais plutôt d'expliquer les grandes lignes son fonctionnement et de vous donner envie de bidouiller une carte fox ^^</p>
<p style="text-align: justify;">L'idée est donc d'initialiser tout d'abord la connexion série à l'aide de Termios. La documentation sur le site du constructeur regorge d'informations et propose du <a href="http://foxlx.acmesystems.it/foxlx_acmesystems_it/00035/serial_test.c">code tout fait</a> pour gérer la connexion série. Une fois la configuration réalisée (c'est très rapide à réaliser), il n'y a plus qu'à faire un write sur /dev/ttyS2</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code14'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2514"><td class="code" id="p25code14"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> command1<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">char</span> command2<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
sprintf<span style="color: #009900;">&#40;</span>command1<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;AT+CMGS=&quot;</span><span style="color: #339933;">%</span>s<span style="color: #ff0000;">&quot;x0D&quot;</span><span style="color: #339933;">,</span> number<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sprintf<span style="color: #009900;">&#40;</span>command2<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%sx1Ax0D&quot;</span><span style="color: #339933;">,</span> text<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
write <span style="color: #009900;">&#40;</span>tty_fd<span style="color: #339933;">,</span> command1<span style="color: #339933;">,</span> strlen<span style="color: #009900;">&#40;</span>command1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sleep<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// attend la réponse du modem afin d'envoyer la seconde partie</span>
write<span style="color: #009900;">&#40;</span>tty_fd<span style="color: #339933;">,</span>command2<span style="color: #339933;">,</span>strlen<span style="color: #009900;">&#40;</span>command2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Et le SMS est envoyé ! Après libre à vous de rajouter à la suite une lecture de la réponse du modem (gentil petit read). Dès lors il est possible de se faire une petite fonction d'envoi de SMS à partir d'arguments tels que le numéro de téléphone et le texte du message. J'en ai profité pour me rajouter un système de logs et de manipulation du modem (redémarrage, arrêt). Je me suis créé une interface web en bash (scripts cgi) et par simples appels de notre programme C il est alors possible de se construire une application métier complexe. On a plus qu'à brancher notre carte fox sur le réseau et celle-ci peut envoyer des SMS à distance de manière assistée grâce à des formulaires web !</p>
<h2 style="text-align: justify;">Préparation de la carte FOX</h2>
<p style="text-align: justify;">Dernier point de précision: au démarrage, le modem n’est pas allumé ni configuré. Il faut par conséquent créer un script de démarrage à déposer dans /etc/init.d/boottime . Voici le script que j'ai utilisé:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code15'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2515"><td class="code" id="p25code15"><pre class="shell" style="font-family:monospace;">#!/bin/sh
# démarrage du modem
setbits -p b -b 7 -s 1
# Lancement de termnetd (pour les tests)
/mnt/flash/termnetd
# Initialisation série du modem (mon petit programme d’initialisation de la connexion série)
/mnt/flash/tx/sms -init
sleep 20
# Initialisation AT du modem
/usr/sbin/chat -V -s -f /mnt/flash/tx/scripts/scriptAT.chat &gt;
/dev/ttyS2 &lt; /dev/ttyS2 2&gt; /mnt/flash/tx/scripts/scriptAT_result.txt
# Ecriture des logs (pour le fun ^^)
echo “`date` : MODEM start” &gt;&gt; /mnt/flash/tx/log/fox.log</pre></td></tr></table></div>

<p style="text-align: justify;">On commence par allumer le modem, on initialise la connexion série avec le programme en C puis attend 20 secondes que le modem soit identifié sur le réseau. Le temps choisi est totalement arbitraire. Cela semble fonctionner correctement avec cette période, mais idéalement il serait intéressant d’interroger le modem pour déterminer s’il est bien connecté au réseau. Ensuite on exécute un script chat que voici :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p25code16'); return false;">View Code</a> SCRIPT_CHAT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2516"><td class="code" id="p25code16"><pre class="script_chat" style="font-family:monospace;">ABORT BUSY
ABORT 'NO CARRIER'
ABORT ERROR
'' AT
OK ATZ
OK 'ATE0'
OK 'AT+CMGF=1'
OK ''</pre></td></tr></table></div>

<p style="text-align: justify;">Ce dernier permet de désactiver l’écho afin de ne pas recevoir mes commandes en double, et permet d’activer le mode texte pour l’envoi de SMS. Par défaut l’envoi de SMS se fait en mode PDU (sous forme hexadécimale), ce qui est bien plus compliqué à utiliser. Une fois ce script exécuté, le modem est prêt à être utilisé. On peut rajouter un log à la fin pour identifier le démarrage du modem.</p>
<p style="text-align: justify;">La carte fox est une carte embarqué assez simple à prendre en main, les utilisations sont assez illimités. Le rêve de tout bidouilleur !<br />
Je songe à m'en commander une très bientôt, je ne peux pas résister à tant de potentiel de bidouille.</p>
<p style="text-align: justify;">A suivre : Comment connecter la carte fox au réseau GPRS pour pouvoir aller sur le net et envoyer des mail <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/interface-gsm-sur-systeme-linux-embarque/feed/</wfw:commentRss>
		<slash:comments>1886</slash:comments>
		</item>
		<item>
		<title>Coder-Studio V3 est né !</title>
		<link>http://www.coder-studio.com/blog/coder-studio-v3-est-ne/</link>
		<comments>http://www.coder-studio.com/blog/coder-studio-v3-est-ne/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 21:31:58 +0000</pubDate>
		<dc:creator>Aquanum</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://r19649.ovh.net/cs/blog/?p=3</guid>
		<description><![CDATA[Après des années d'attente, voici enfin la sortie de la nouvelle version de Coder-Studio. Plus conforme à nos utilisations, le format blog a été choisi à l'unanimité par les membres. L'idée est de se regrouper autour de ce blog afin de proposer articles, notes et tutoriaux. Et cela pour discuter, comme à notre habitude, de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Après des années d'attente, voici enfin la sortie de la nouvelle version de Coder-Studio. Plus conforme à nos utilisations, le format blog a été choisi à l'unanimité par les membres. L'idée est de se regrouper autour de ce blog afin de proposer articles, notes et tutoriaux. Et cela pour discuter, comme à notre habitude, de tout ce qui touche à l'informatique de près ou de loin. Chacun, de part son cheminement personnel et professionnel, bénéficie d'une expérience qui lui est propre ainsi que de connaissances qui peuvent être profitables à tous. Cette V3 de Coder-Studio s'inscrit donc toujours dans cette volonté de partage qui nous est chère. J'espère que cette nouvelle version sera un succès et que nous prendrons du plaisir à écrire ensemble sur ce blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/coder-studio-v3-est-ne/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

