Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

pirms 5 gadiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. <!doctype html>
  2. <html lang=fr>
  3. <head>
  4. <!-- Always define the charset before the title -->
  5. <meta charset=utf-8>
  6. <title>★ L&#39;élitisme de la curiosité — Biologeek — David Larlet</title>
  7. <!-- Define a viewport to mobile devices to use - telling the browser to assume that the page is as wide as the device (width=device-width) and setting the initial page zoom level to be 1 (initial-scale=1.0) -->
  8. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  9. <!-- Fake favicon, to avoid extra request to the server -->
  10. <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  11. <link type="application/atom+xml" rel="alternate" title="Feed" href="/david/log/" />
  12. <link rel="manifest" href="/manifest.json">
  13. <link rel="stylesheet" href="/static/david/css/larlet-david-_J6Rv.css" data-instant-track />
  14. <noscript>
  15. <style type="text/css">
  16. /* Otherwise fonts are loaded by JS for faster initial rendering. See scripts at the bottom. */
  17. body {
  18. font-family: 'EquityTextB', serif;
  19. }
  20. h1, h2, h3, h4, h5, h6, time, nav a, nav a:link, nav a:visited {
  21. font-family: 'EquityCapsB', sans-serif;
  22. font-variant: normal;
  23. }
  24. </style>
  25. </noscript>
  26. <!-- Canonical URL for SEO purposes -->
  27. <link rel="canonical" href="https://larlet.fr/david/biologeek/archives/20090313-lelitisme-de-la-curiosite">
  28. </head>
  29. <body>
  30. <div>
  31. <header>
  32. <nav>
  33. <p>
  34. <small>
  35. Je suis <a href="/david/" title="Profil public">David Larlet</a>, <a href="/david/pro/" title="Activité professionnelle">artisan</a> du web qui vous <a href="/david/pro/accompagnement/" title="Activité d’accompagnement">accompagne</a><span class="more-infos"> dans l’acquisition de savoirs pour concevoir des <a href="/david/pro/produits-essentiels/" title="Qu’est-ce qu’un produit essentiel ?">produits essentiels</a></span>. <span class="more-more-infos">Discutons ensemble d’une <a href="/david/pro/devis/" title="En savoir plus">non-demande de devis</a>.</span> Je partage ici mes <a href="/david/blog/" title="Expériences bienveillantes">réflexions</a> et <a href="/david/correspondances/2017/" title="Lettres hebdomadaires">correspondances</a>.
  36. </small>
  37. </p>
  38. </nav>
  39. </header>
  40. <section>
  41. <h1 property="schema:name">★ L&#39;élitisme de la curiosité</h1>
  42. <article typeof="schema:BlogPosting">
  43. <div property="schema:articleBody">
  44. <img src="/static/david/biologeek/images/logos/php.png" alt="vignette" style="float:left; margin: 0.5em 1em;" property="schema:thumbnailUrl" />
  45. <p>J'ai comme prévu fait une rapide description des <a href="https://larlet.fr/david/biologeek/archives/20090104-django-vs-concurrence-php/">avantages de Django à La Cantine</a> (oui ce billet date un peu...) et je ne compte pas faire un résumé de ce qui a été dit. Je souhaiterais en revanche revenir sur une question concernant l'élitisme de Python ou Ruby face à PHP car c'est vraiment dommage que ce soit ressenti comme tel par les développeurs PHP.</p>
  46. <p>Ces langages sont <strong>accessibles</strong>, il ne faut pas une semaine pour faire son premier programme mais une après-midi, il suffit juste d'être motivé pour essayer et pouvoir en juger par soi-même. Il y a énormément de support derrière (listes de diffusion, salons irc, tutoriels, blogs, etc) donc ce n'est finalement qu'un problème de « barrière psychologique » qui peut venir :</p>
  47. <h2>D'une peur de l'inconnu</h2>
  48. <p>Ou peut-être plus <strong>surestimation</strong> finalement. Il ne faut pas croire que certains langages sont réservés à certaines personnes ultra-compétentes, c'est faux.</p>
  49. <p>Le plus marrant c'est qu'il s'agit du contraire avec ces langages car ils permettent de créer ses premières applications très rapidement, sans avoir besoin de connaître toutes les fonctions/modules de la bibliothèque standard.</p>
  50. <p>Pour reprendre <a href="http://www.clochix.net/post/2009/01/21/C-est-le-printemps">un témoignage récent</a> :</p>
  51. <blockquote>
  52. <p>je l'ai [Django] testé, et ai été assez épaté par sa simplicité et sa puissance. Je suis fan de Symfony, mais il est assez complexe, et sa courbe d'apprentissage est rude. Django m'est apparu bien plus simple. Sans connaître Python, j'ai pu en quelques heures seulement commencer à jouer avec le framework, réaliser une première application, la faire évoluer assez rapidement...</p>
  53. </blockquote>
  54. <p>Il faut aller au-delà de cette peur, <strong>prendre le temps d'essayer et de juger si ça vaut l'investissement en temps que vous allez y consacrer</strong>. C'est un risque mais... une vie sans risque doit être bien ennuyeuse ! :-)</p>
  55. <h2>D'un manque de confiance en soi</h2>
  56. <p>Suivre un tutoriel d'apprentissage est rapide et facile. C'est lorsqu'il faut aller plus loin que ça prend du temps (j'apprends encore de nouvelles choses sur Django et Python quasi-quotidiennement), mais si un simple tutoriel vous permet d'apercevoir les fondements du langage et s'il va vous plaire ou pas. <a href="https://larlet.fr/david/biologeek/archives/20050218-cours-pour-apprendre-python/">Ces tutoriels</a> ne sont pas réservés à une élite !</p>
  57. <p>Après il faut aussi accepter de repartir, non pas de rien (si vous connaissez Symfony par exemple, essayer/adopter Django sera très simple) mais forcément apprendre de nouvelles méthodes, de nouvelles façons d'envisager certains problèmes. <strong>Accepter de redevenir débutant fait du bien mais demande une bonne part de confiance en soi, en sa capacité d'adaptation</strong>.</p>
  58. <h2>D'un manque de curiosité</h2>
  59. <p>Il est bien sûr plus simple de rester dans son petit confort mais c'est peut-être ce qui me déprime le plus, penser qu'il y a des développeurs qui vont utiliser pendant 10 ans une même techno, sans essayer autre chose alors que l'<strong>on fait un métier qui permet de ne jamais s'ennuyer grâce à son évolution constante</strong>.</p>
  60. <p>Je commence à bien connaître Python et je n'en deviens pas monomaniaque pour autant, je suis conscient de ses limites et j'explore d'autres pistes qui pourraient y pallier. Bien sûr ça demande un certain effort mais je considère que ça fait partie de ma veille technologique quotidienne.</p>
  61. <p>Pour revenir à l'événement, mon but n'était pas de convaincre tout le monde de passer à Django mais juste d'attiser la curiosité de certains (ce qui aura au moins marché <a href="http://twitter.com/yannickc/status/1116792721">pour une personne</a> \o/).</p>
  62. <p>En guise de conclusion, j'ai écrit <a href="http://www.gnulinuxmag.com/index.php/2009/02/27/gnulinux-magazine-n%C2%B0114-mars-2009-chez-votre-marchand-de-journaux">un article pour Linux Magazine</a> qui devrait être dans vos kiosques et qui permet de débuter avec Django en prenant l'exemple de développement d'un blog (très proche de <a href="http://gillesfabio.com/blog/2009/01/29/creer-un-blog-avec-django/">celui de Gilles</a>). L'avantage c'est qu'il s'agit aussi d'une comparaison avec d'autres frameworks web Python vous permettant de choisir en fonction de vos besoins. Si votre curiosité vous démange ;-).</p>
  63. </div>
  64. </article>
  65. <footer>
  66. <h6 property="schema:datePublished">— 13/03/2009</h6>
  67. </footer>
  68. </section>
  69. <section>
  70. <div>
  71. <h3>Articles peut-être en rapport</h3>
  72. <ul>
  73. <li><a href="/david/biologeek/archives/20101206-strategie-de-chiffrement-des-donnees-et-emails/" title="Accès à Stratégie de chiffrement des données et emails">Stratégie de chiffrement des données et emails</a></li>
  74. <li><a href="/david/biologeek/archives/20100522-critique-de-livres-photo-2/" title="Accès à Critique de livres photo 2">Critique de livres photo 2</a></li>
  75. <li><a href="/david/biologeek/archives/20100512-quelques-conseils-photo/" title="Accès à Quelques conseils photo">Quelques conseils photo</a></li>
  76. </ul>
  77. </div>
  78. </section>
  79. <section>
  80. <div id="comments">
  81. <h3>Commentaires</h3>
  82. <div class="comment" typeof="schema:UserComments">
  83. <p class="comment-meta">
  84. <span class="comment-author" property="schema:creator">Camille roux</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  85. </p>
  86. <div class="comment-content" property="schema:commentText">
  87. <p>Bonjour,</p>
  88. <p>J&#39;aurais envie de ne pas mettre Python et Ruby dans le meme panier que PHP. Pour Rails par exemple, alors qu&#39;il est très facile de faire un tutoriel, il<br />serait pour moi une erreur de dire que Ruby et Rails sont faciles. Il s&#39;agit d&#39;une simplicité apparente, car les deux sont extrêmement bien pensés. Derriére ça, Ruby est un langage complet avec des notions complexes comme les blocs, les lamba fonctions, les modules, le duck typing, l&#39;aspect dynamique... Et serait possible de dire la même chose pour Rails.<br />Cependant, j&#39;adore Ruby. Une fois les bases acquises on se retrouve avec un langage très puissant entre main.<br />Je pense qu&#39;il s&#39;agit de la réelle complexité d&#39;un langage qui conditionne la qualité d&#39;une communauté. PHP est simple et basique, sa communauté est de mauvaise qualité : niveau faible, peu d&#39;innovation, peu de projets bien pensés. En revanche, quand on regarde du côté de Ruby et Rails, c&#39;est tout l&#39;inverse : langage complexe à acquérir complètement, cela a filtré la communauté, de ce fait, Ruby est une des communauté qui innove le plus, les projets sont très bien pensés, magnifique...</p>
  89. <p>Camille Roux<br /><a href="http://HTTP://www.camilleroux.com">HTTP://www.camilleroux.com</a></p>
  90. </div>
  91. </div>
  92. <div class="comment" typeof="schema:UserComments">
  93. <p class="comment-meta">
  94. <span class="comment-author" property="schema:creator">Tenshu</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  95. </p>
  96. <div class="comment-content" property="schema:commentText">
  97. <p>Et voilà il en fallait un pour cracher dans la soupe camille n&#39;a fait.<br />Je comprend ce billet, j&#39;ai moi même essayé django et python l&#39;a toujours atiré pour son côté simple et fun.</p>
  98. <p>Par contre il est assez insuportable que l&#39;on ne cesse de nous seriner que php c&#39;est un langage de débutant et tout les arguments qui font que les compétences des developpeurs php sont niés et.leurs salaires dévalorises a compétences égales mais techno différentes.</p>
  99. <p>J&#39;ai bien aimé django oui, mais n&#39;y est pas trouvé tout ce que fait symfony, je n&#39;ai pas non plus aimé son système de templating.</p>
  100. <p>Que voulez vous je doit être un developeur à l&#39;image de php ... &quot;médiocre&quot;.<br />Ou alors l&#39;elitisime des uns se mue bien souvent en snobisme.<br />Allez savoir...</p>
  101. </div>
  102. </div>
  103. <div class="comment" typeof="schema:UserComments">
  104. <p class="comment-meta">
  105. <span class="comment-author" property="schema:creator">Damien</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  106. </p>
  107. <div class="comment-content" property="schema:commentText">
  108. <p>Je ne suis pas non plus d&#39;accord avec Camille.<br />PHP évolue beaucoup vers la professionnalisation. Et si php4 était encore considérable comme un &quot;langage de débutant&quot;, php5 n&#39;est plus à mettre dans le même panier.</p>
  109. <p>Après, le fait qu&#39;un langage propose des fonctionnalités objet avancées ne force pas les utilisateurs à les utiliser. Un développeur ne souhaitant pas utiliser le duck typing ou les modules ne le fera pas et pi c&#39;est tout (c)Philippe Lucas.</p>
  110. <p>Développant en Ruby et en PHP, je ne pense pas que l&#39;un soit moins abordable que l&#39;autre. Il faut juste s&#39;y mettre.<br />Et c&#39;est à ce niveau que je suis complètement d&#39;accord avec cet article.</p>
  111. </div>
  112. </div>
  113. <div class="comment" typeof="schema:UserComments">
  114. <p class="comment-meta">
  115. <span class="comment-author" property="schema:creator">Thierry Stiegler</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  116. </p>
  117. <div class="comment-content" property="schema:commentText">
  118. <p>@Camille Rails c&#39;est pas du Ruby ? Enfin bref.</p>
  119. <p>Je suis passé depuis peu avec Django, j&#39;en suis heureux car il correspond à MA philosophie et MON approche du développement. Python pour moi est un réel plaisir, il exergue tout ce que j&#39;aime voir dans la programmation.</p>
  120. <p>En ce qui concerne PHP, je lui reconnais le mérite de m&#39;y avoir attellé et permis de décrocher un premeir Job. Il y&#39;a de très bons projets en PHP, celui qui me sort que PHPUNit est une merde n&#39;a rien compris, idem pour Symfony. (On voit toujours la paille dans l&#39;oeuil du voisin hein ;) )</p>
  121. <p>PHP souffre de certaines lacunes (namespace) et de choix parfois étrange (le . pour la concaténation...), mais il reste massivement disponible et facilite la recherche de contrats - et par extension de quoi manger.</p>
  122. <p>Il propose également des produits comme Magento, dont on a pas de réels équivalents (marketing, communauté et presta de service derrière).</p>
  123. <p>C&#39;est une approche particulière du développement, c&#39;est un projet libre et vivant. C&#39;est dans la diversité qu&#39;on trouve l&#39;émulation et la volonté d&#39;aller plus loin.</p>
  124. <p>Choisir une technologie ce n&#39;est pas qu&#39;objectif, c&#39;est également une question subjective, de gout. Le développement c&#39;est tout un art ;)</p>
  125. <p>A plus.</p>
  126. <p></p>
  127. </div>
  128. </div>
  129. <div class="comment" typeof="schema:UserComments">
  130. <p class="comment-meta">
  131. <span class="comment-author" property="schema:creator">Nicolas Froidure</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  132. </p>
  133. <div class="comment-content" property="schema:commentText">
  134. <p>Si PHP est plus démocratisé, c&#39;est surtout qu&#39;il a été diffusé de manière globale plus tôt et plus vite. D&#39;où le fait qu&#39;il soit très utilisé. Mais bon, j&#39;imagine que l&#39;élite de la programmation n&#39;y a pas pensé... :)</p>
  135. <p>Si je prends mon cas, j&#39;ai mon propre Framework/CMS écrit en PHP et même si je le voulais, c&#39;est pas demain que je passerai à Ruby. Surtout que le langage n&#39;est pas ce qu&#39;il y a de plus important, ce qui importe, c&#39;est comprendre comment il fonctionne pour mieux optimiser ses programmes. Or, cela nécessite une expérience minimale de deux ans en deçà desquels c&#39;est risqué de passer un programme en prod.</p>
  136. </div>
  137. </div>
  138. <div class="comment" typeof="schema:UserComments">
  139. <p class="comment-meta">
  140. <span class="comment-author" property="schema:creator">Guillaume</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  141. </p>
  142. <div class="comment-content" property="schema:commentText">
  143. <p>@ Thierry Stiegler : j&#39;ai du mal à comprendre ton impression de Symfony mais je suis surement &quot;une merde n&#39;a rien compris&quot; comme tu le dis si bien... As tu vraiment travaillé avec jusqu&#39;à mettre une appli en production ou alors tu n&#39;as pas pris le temps pour APPRENDRE à l&#39;utiliser et tu as garder des aprioris de &quot;merde n&#39;a rien compris&quot; ?</p>
  144. </div>
  145. </div>
  146. <div class="comment" typeof="schema:UserComments">
  147. <p class="comment-meta">
  148. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  149. </p>
  150. <div class="comment-content" property="schema:commentText">
  151. <p>@Camille Roux : violent d&#39;attaquer ainsi sur un billet qui essaye de démontrer qu&#39;il n&#39;y a pas d&#39;élitisme à avoir...</p>
  152. <p>&gt; PHP est simple et basique, sa communauté est de mauvaise qualité : niveau faible, peu d&#39;innovation, peu de projets bien pensés.</p>
  153. <p>J&#39;aurais tendance à dire que les projets sont indépendants de la technologie employée. J&#39;étais consterné il y a quelques jours de lire sur un salon irc dédié à Python :</p>
  154. <p>&gt; j&#39;ai décidé que je voulais devenir un expert python</p>
  155. <p>Je trouve vraiment dommage de se focaliser sur la technique alors qu&#39;un projet c&#39;est avant tout une équipe et une passion... la démarche &quot;J&#39;ai eu l&#39;idée d&#39;un super projet et je compte le réaliser en Python pour telles raisons et c&#39;est pourquoi j&#39;en apprends le plus possible à ce sujet&quot; est tellement plus constructive/bénéfique.</p>
  156. <p>@Thierry Stiegler :</p>
  157. <p>&gt; Le développement c&#39;est tout un art ;)</p>
  158. <p>Tout à fait d&#39;accord ! (cf. billets contextuels ci-dessous ;))</p>
  159. <p>@Nicolas Froidure :</p>
  160. <p>&gt; Si PHP est plus démocratisé, c&#39;est surtout qu&#39;il a été diffusé de manière globale plus tôt et plus vite. D&#39;où le fait qu&#39;il soit très utilisé.</p>
  161. <p>Tout à fait et on arrive à la notion de bagage évoquée par Pep :<br /><a href="http://callmepep.org/blog/post/2009/03/13/Au-del%25C3%25A0-de-PHP">http://callmepep.org/blog/post/2009/03/13/Au-del%C3%A0-de-PHP</a></p>
  162. <p>Beaucoup de personnes ont débuté PHP sans avoir les bases de programmation (et je suis bien placé pour le savoir), donc ça constitue un frein au passage à un autre langage. Mais au bout d&#39;un certain temps à jouer avec PHP, je pense que l&#39;on arrive à avoir les bases de programmation suffisante pour tenter l&#39;expérience. Et c&#39;est ce que l&#39;on retrouve dans :</p>
  163. <p>&gt; cela nécessite une expérience minimale de deux ans</p>
  164. <p>Au bout de 2 ans à faire du PHP (faire != adapter), si l&#39;on n&#39;a pas acquis les bases de la programmation c&#39;est un peu dommage.</p>
  165. </div>
  166. </div>
  167. <div class="comment" typeof="schema:UserComments">
  168. <p class="comment-meta">
  169. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  170. </p>
  171. <div class="comment-content" property="schema:commentText">
  172. <p>&quot;Si PHP est plus démocratisé, c&#39;est surtout qu&#39;il a été diffusé de manière globale plus tôt et plus vite.&quot;</p>
  173. <p>S&#39;l a été diffusé plus tôt et plus vite, c&#39;est surtout parce qu&#39;il était infiniment plus facile de le déployer pour les grands hébergeurs que la concurrence. mod_php a été de fait rapidement plus stable et gérable (sécurité, upgrade) que CGI, mod_perl, etc. Ici il faut prendre en compte la force d&#39;appel de l&#39;hébergement mutualisé (synonyme le plus souvent de &quot;pas de shell&quot;).</p>
  174. </div>
  175. </div>
  176. <div class="comment" typeof="schema:UserComments">
  177. <p class="comment-meta">
  178. <span class="comment-author" property="schema:creator">No&#39;</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  179. </p>
  180. <div class="comment-content" property="schema:commentText">
  181. <p>oh pinaise...</p>
  182. <p>Puisqu&#39;on est entre développeurs, je vais résumer comme ça... toutes les assertions qui suivent sont &#39;True&#39;</p>
  183. <p>fait != opinion<br />gout != fait<br />toi.preferences() != moi.preferences()<br />toi.preferences() not in moi.interets()<br />toi.realisations() in moi.interets()</p>
  184. <p>Démerdez-vous comme vous voulez, mais essayez donc de trouver l&#39;outil qui vous convient le mieux, celui qui vous rend productif, heureux, à l&#39;aise, vous permet de résoudre le plus facilement et le plus rapidement possible...<br />ET ARRÊTEZ DE PENSER QUE VOUS ÊTES AU CENTRE DE L&#39;UNIVERS ET QUE VOUS AVEZ TOUT LE TEMPS RAISON.</p>
  185. <p>Un peu de remise en question de temps en temps ne fait *jamais* de mal.</p>
  186. </div>
  187. </div>
  188. <div class="comment" typeof="schema:UserComments">
  189. <p class="comment-meta">
  190. <span class="comment-author" property="schema:creator">Nicolas Froidure</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  191. </p>
  192. <div class="comment-content" property="schema:commentText">
  193. <p>Ah, et puisqu&#39;on en est à parler de Ruby, je suis sur :<br /><a href="http://fr.wikipedia.org/wiki/Ruby">http://fr.wikipedia.org/wiki/Ruby</a></p>
  194. <p>- pourquoi tous ces def end ? Quand je prend le fichier central de mon extension BBComposer en JS j&#39;ai 1002 { et 1002 }. Je me vois pas faire autant de def et de end...<br />- grosso-modo, je me dit que ça a l&#39;air d&#39;être un langage bien pour ceux qui aiment que tout soit bien &quot;rangé&quot; (bon point pour moi), mais pour ce qui est de créer des algorithmes très complexes, je suis pas sur que ça soit hyper pratique. Par exemple, pour éviter d&#39;avoir trop de lignes, je fais souvent des conditions &quot;en ligne&quot;. Existe-t-il des pointeurs comme en PHP ?<br />- je vois modèle MVC pour RoR, mais en PHP rien n&#39;empêche d&#39;utiliser son propre modèle MVC pour des raisons qui nous sont propres (<a href="http://www.elitwork.com/xcms_template.html">http://www.elitwork.com/xcms_template.html</a>). Est-ce bridé à jamais dans RoR ? Par exemple, j&#39;ai implémenté un modèle &quot;MMMVC&quot; pour Multi-Modèle Multi-Vue Controleur que je ne me vois pas jeter pour passer à RoR ou autre.</p>
  195. <p>Autant de questions qui me font penser que PHP a encore de beaux jours devant lui.</p>
  196. </div>
  197. </div>
  198. <div class="comment" typeof="schema:UserComments">
  199. <p class="comment-meta">
  200. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  201. </p>
  202. <div class="comment-content" property="schema:commentText">
  203. <p>ama j&#39;aurais tendance à dire que chaque projet a ses spécificités donc ces outils. Perso j&#39;oscille entre python, ruby, c, erlang, lua, js whatever, rarement en PHP ces derniers temps (mon dernier projet en php remonte à 3 ans...) et sans doute plus jamais compte tenu des dernières décision sur la syntaxe de ce langage. Et demain j&#39;utiliserais d&#39;autres langages certainement. Je commence déjà à en utiliser d&#39;autre ou acquérir de nouvelles méthodes de développement. Certains domaines ont des langages plus appropriés et cela vient de l&#39;origine de ces langages.</p>
  204. <p>Pour en revenir à PHP, il ne faut pas oublier qu&#39;à la base c&#39;est un langage pour le web pour intégrer du dynamisme dans les pages en s&#39;inspirant du C. Or aujourd&#39;hui le web a de plus en plus tendances à s&#39;ouvrir sur d&#39;autre univers. C&#39;est là que php montre ses limites. Actuellement les développeurs de PHP court après cette ouverture pour pour intégrer les nouvelles problématiques. PHP commence à devenir un langage plus générique mais continue de courir et manque cruellement de certaines fonctionnalités qui sont de plus en plus utilisées: concurrence, distribution... Je ne vois pas trop l&#39;interêt. J&#39;aurais été plus partisan de laisser php rester ce qu&#39;il est un bon langage intermediaire pour apporter du dynamisme dans les pages.</p>
  205. </div>
  206. </div>
  207. <div class="comment" typeof="schema:UserComments">
  208. <p class="comment-meta">
  209. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  210. </p>
  211. <div class="comment-content" property="schema:commentText">
  212. <p>&quot;Pour en revenir à PHP, il ne faut pas oublier qu&#39;à la base c&#39;est un langage pour le web pour intégrer du dynamisme dans les pages en s&#39;inspirant du C.&quot;</p>
  213. <p>Et de Perl.</p>
  214. <p>&quot;Or aujourd&#39;hui le web a de plus en plus tendances à s&#39;ouvrir sur d&#39;autre univers.&quot;</p>
  215. <p>Après une grosse ouverture à l&#39;univers de la publicité, le web s&#39;ouvre à l&#39;univers de la centralisation. Mais quel est le rapport avec PHP ? Ou alors on parle d&#39;un univers parallèle.</p>
  216. <p>&quot;PHP commence à devenir un langage plus générique mais continue de courir et manque cruellement de certaines fonctionnalités qui sont de plus en plus utilisées: concurrence, distribution...&quot;</p>
  217. <p>Concurrence et distribution dans le langage c&#39;est quand on veut implémenter une infrastructure haute disponibilité. Le but c&#39;est d&#39;utiliser cette infrastructure, pas de laisser le développeur du front end à s&#39;en préoccuper.</p>
  218. </div>
  219. </div>
  220. <div class="comment" typeof="schema:UserComments">
  221. <p class="comment-meta">
  222. <span class="comment-author" property="schema:creator">Nicolas Steinmetz</span> le <span class="comment-date" property="schema:commentTime">13/03/2009</span> :
  223. </p>
  224. <div class="comment-content" property="schema:commentText">
  225. <p>Rigolo, moi je trouve qu&#39;au final, après avoir fait un peu de php de ci de là, quand j&#39;ai cherché à &quot;vraiment&quot; me mettre à de la programmation pour des besoins perso, j&#39;ai trouvé python beaucoup plus accessible.</p>
  226. <p>Dans ma quête d&#39;un langage, j&#39;ai regardé PHP, Python/Django et Ruby/Rails et c&#39;est Python/Django avec lequel j&#39;ai le plus accroché, notamment sur la partie modèle objet et sa syntaxe (que j&#39;ai jamais compris en PHP alors que j&#39;ai trouvé ça limpide en python) .</p>
  227. <p>C&#39;est sur que si on resume Python à Zope (un peu le cas début des années 2000 quand Zope a commencé sa diffusion), il y avait surement une partie d&#39;élitisme (ressource nécessaire, compétences, serveur dédié etc) mais je pense plus que python a pêché par manque de visibilité plutôt qu&#39;autre chose, surtout par rapport à PHP qui offrait une bonne visibilité, facile à apprendre et présent sur de l&#39;hébergement mutualisé....</p>
  228. <p>Mes 2 cents</p>
  229. </div>
  230. </div>
  231. <div class="comment" typeof="schema:UserComments">
  232. <p class="comment-meta">
  233. <span class="comment-author" property="schema:creator">Country</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  234. </p>
  235. <div class="comment-content" property="schema:commentText">
  236. <p>&quot;ce qui aura au moins marché pour une personne \o/&quot;</p>
  237. <p>Vrai :) Ta présentation m&#39;avais donné envie d&#39;un peu plus m&#39;intéresser à Python/Django et je dois dire que je n&#39;ai pas décroché depuis. Bon, je suis encore un grand débutant (je passe plus de temps à faire des recherches dans la doc qu&#39;à coder) mais sa syntaxe et sa logique me semblent vraiment naturels.</p>
  238. <p>Même si j&#39;ai fait du PHP pendant de nombreuses années, je dois dire que je n&#39;ai pas trouvé de framework qui me corresponde vraiment, il y avait toujours quelque chose qui me déplaisait dans ceux que j&#39;ai testé (symfony, cakephp, zend, ...).</p>
  239. <p>Comme l&#39;a dit No&#39;, à chacun de trouver l&#39;outil qui lui convient le mieux et surtout de ne pas hésiter à tester de nouvelles choses, on est parfois agréablement surpris ;)</p>
  240. </div>
  241. </div>
  242. <div class="comment" typeof="schema:UserComments">
  243. <p class="comment-meta">
  244. <span class="comment-author" property="schema:creator">hk</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  245. </p>
  246. <div class="comment-content" property="schema:commentText">
  247. <p>Quel interet aussi d&#39;apprendre un langage avec lequel que je vais pas pouvoir trouver de boulot ? 90% des offres d&#39;emploi reste dans les langages PHP/Java/C/C++/C#...</p>
  248. </div>
  249. </div>
  250. <div class="comment" typeof="schema:UserComments">
  251. <p class="comment-meta">
  252. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  253. </p>
  254. <div class="comment-content" property="schema:commentText">
  255. <p>@Damien B ou tu fais semblant de ne pas comprendre ou tu n&#39;as pas compris ce qu&#39;était le web. Dire que le web s&#39;ouvre sur d&#39;autres univers c&#39;est dire qu&#39;il touche de nouveaux domaines en étant présent dans de plus en plus de media. Ces media (ou supports) ont chacun des spécificités propres à leur environnement. On leur demande de communiquer entre eux par ex (distribution) ou on demande à une appli web de travailler de manière asynchrone ou parallèles.</p>
  256. <p>Une application web ça ne se résume pas à un bête système de routes et de l&#39;affichage de donnée. Sur ces 2 partis là PHP reste utile. C&#39;est avant tout un système de template s&#39;appuyant sur un backend. Et je ne pense pas être reducteur en disant cela, c&#39;est pour cela que PHP a été crée à la base. Les developpeurs PHP cherchent actuellement à lui ajouter des fonctionnalités. Certains créent même des couches d&#39;abstractions alambiquées comme symfony. Mais pour développer une application web on a besoin de plus que ça aujourd&#39;hui.</p>
  257. <p>On a besoin de langages d&#39;interfaces plus simple et souple (javascript, lua ?) facilement embarquables. On a besoin de langages qui permettent de distribuer les données, de gérer les entrée/sorties de manière asynchrones, de permettre la concurrence. Bref on a besoin de langage plus puissant que ne l&#39;est PHP.</p>
  258. </div>
  259. </div>
  260. <div class="comment" typeof="schema:UserComments">
  261. <p class="comment-meta">
  262. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  263. </p>
  264. <div class="comment-content" property="schema:commentText">
  265. <p>@Country parce que parfois il faut voir plus loin que le temps présent. Regarde un peu les nouveaux projets web innovant actuellement tu verras que peu reposent sur du PHP. La plupart de ces projets utilisent des langages plus à même de répondre aux problématiques actuelles.</p>
  266. </div>
  267. </div>
  268. <div class="comment" typeof="schema:UserComments">
  269. <p class="comment-meta">
  270. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  271. </p>
  272. <div class="comment-content" property="schema:commentText">
  273. <p>&quot;Dire que le web s&#39;ouvre sur d&#39;autres univers c&#39;est dire qu&#39;il touche de nouveaux domaines en étant présent dans de plus en plus de media.&quot;</p>
  274. <p>Donc si je comprends, pour vous, internet n&#39;est pas un média ?</p>
  275. <p>&quot;Ces media (ou supports) ont chacun des spécificités propres à leur environnement.&quot;</p>
  276. <p>Exemple ?</p>
  277. <p>&quot;On leur demande de communiquer entre eux par ex (distribution)&quot;</p>
  278. <p>Distribution ? SMTP ?</p>
  279. <p>&quot;ou on demande à une appli web de travailler de manière asynchrone ou parallèles.&quot;</p>
  280. <p>Les applis web on toujours travaillé de manière parallèle, ou alors il faut que vous me montriez un serveur HTTP qui ne soit capable de ne servir qu&#39;une requête à la fois. Et quel est l&#39;intérêt pour le web d&#39;avoir de l&#39;asynchrone au niveau du langage (ce que ne fait ni Python ni Ruby d&#39;ailleurs il me semble) ? Je parle pour l&#39;utilisateur ?</p>
  281. <p>&quot;Mais pour développer une application web on a besoin de plus que ça aujourd&#39;hui.&quot;</p>
  282. <p>Qu&#39;est-ce que vous appelez application web ? Et là, subitement, la mémoire me revient : c&#39;est le même benoitc pour qui Stack veut dire &quot;tas&quot; et Heap veut dire &quot;pile&quot;.</p>
  283. <p></p>
  284. </div>
  285. </div>
  286. <div class="comment" typeof="schema:UserComments">
  287. <p class="comment-meta">
  288. <span class="comment-author" property="schema:creator">desfrenes</span> le <span class="comment-date" property="schema:commentTime">14/03/2009</span> :
  289. </p>
  290. <div class="comment-content" property="schema:commentText">
  291. <p>Comme le dit hk, il va encore falloir un bon moment avant que Python pèse vraiment sur le marché du travail coté web (j&#39;entend par là avant qu&#39;il y ait une offre d&#39;emploi &quot;visible&quot; du même niveau que celle en PHP/Java &amp; co), ça compte aussi pour beaucoup dans le manque de curiosité des développeurs.</p>
  292. <p>Ensuite, beaucoup des inconvénients de PHP sont estompés par les frameworks qui ont émergé ces dernières années. Je n&#39;ai rien vu d&#39;aussi magique que Django en PHP mais on arrive quand même à être assez productif avec des outils comme ZF, symfony, Doctrine, etc...<br />l&#39;intérêt de Django devient un peu moins évident à un développeur PHP quand il a vu le générateur d&#39;admin de symfony par ex, ou quand ce même développeur comprend qu&#39;il peut générer ses formulaires à partir de ses modèles.</p>
  293. <p>Bref, Python a de l&#39;avance, ou PHP du retard si on préfère, mais le gouffre n&#39;est pas si abyssal que ça. Je n&#39;en dirai pas autant des communautés d&#39;utilisateurs respectives, toutes proportions gardées.</p>
  294. <p>Selon moi le meilleur argument pour convaincre un développeur PHP de passer à Python c&#39;est de lui montrer qu&#39;il pourra aussi faire autre chose que du web...</p>
  295. </div>
  296. </div>
  297. <div class="comment" typeof="schema:UserComments">
  298. <p class="comment-meta">
  299. <span class="comment-author" property="schema:creator">xethorn</span> le <span class="comment-date" property="schema:commentTime">15/03/2009</span> :
  300. </p>
  301. <div class="comment-content" property="schema:commentText">
  302. <p>A la lecture de l&#39;article, je n&#39;ai qu&#39;un sentiment qui me trotte dans la tête : &quot;déception&quot;. Voici les raisons :</p>
  303. <p>• Une demie journée pour faire une application certes, tout du moins faire copier / coller des codes sources. Maintenant pour gérer plusieurs Vhost, il m&#39;a fallut une journée complète pour configurer mon serveur …</p>
  304. <p>• Les arguments cités &quot;d&#39;une peur de l&#39;inconnu&quot;, &quot;d&#39;un manque de confiance en soi&quot;, &quot;d&#39;un manque de curiosité&quot; est une attitude purement marketing visant à sensibiliser. Beaucoup ne veulent pas tester Django tout simplement parce que leur hébergeur actuel ne leur permet pas d&#39;essayer et d&#39;utiliser ensuite leurs productions en ligne.</p>
  305. <p>• Dire qu&#39;essayer Django revient à faire partie de &quot;l&#39;élitisme de la Curiosité&quot; me reste en travers de la gorge. On peut être très curieux et ne pas du tout être intéressé par Django. Chacun ses passions … ma vie n&#39;est pas une ligne de code qui se termine par un &quot;kill myself&quot;.</p>
  306. <p>« Beaucoup de personnes ont débuté PHP sans avoir les bases de programmation (et je suis bien placé pour le savoir), donc ça constitue un frein au passage à un autre langage. Mais au bout d&#39;un certain temps à jouer avec PHP »</p>
  307. <p>Ah ? Merci PHP, j&#39;ai réussi à apprendre d&#39;autres langages (Java, AS3, C++, Smalltalk …) en très peu de temps. Le PHP, comme n&#39;importe quel autre langage, permet de comprendre comment la machine fonctionne, interprète les données.</p>
  308. </div>
  309. </div>
  310. <div class="comment" typeof="schema:UserComments">
  311. <p class="comment-meta">
  312. <span class="comment-author" property="schema:creator">nautilebleu</span> le <span class="comment-date" property="schema:commentTime">15/03/2009</span> :
  313. </p>
  314. <div class="comment-content" property="schema:commentText">
  315. <p>Moi qui suis un vieux, je me souviens d&#39;une époque où proposer PHP (et plus globalement LAMP) pour un développement web, c&#39;était être dans l&#39;alternative… Comme quoi la querelle des anciens et des modernes…</p>
  316. <p>Je me suis pris au jeu hier après-midi car je devais rédiger une doc. Je pensais la faire avec Sphinx, mais impossible de le faire marcher (impossible de trouver le module roman.py) je ne me souviens pourtant pas avoir changé ma config python depuis la dernière fois que j&#39;ai utilisé Sphinx. Bref du coup, je me suis fait un petit script qui assure la conversion. Dans l&#39;ensemble l&#39;expérience a été plutôt concluante et agréable, malgré des problèmes avec l&#39;unicode (tous mes fichiers sont en unicode, et pourtant il faut que je les convertisse en entrée et en sortie, bizarre…)</p>
  317. <p>Je pense que le choix de PHP est avant tout un choix rassurant, pour le prestataire comme pour le client, comme le choix de Windows pour le desktop plutôt que Linux ou MacOS. Pourtant les choses peuvent changer très vite. En un an ou deux, le nombre de développeurs connaissant Cocoa a explosé grâce à l&#39;iPhone. Les mentalités évoluent, d&#39;ailleurs quand j&#39;ai eu besoin de trouver l&#39;équivalent d&#39;une fonction PHP en Python, je me suis vite rendu que Google comprend très bien &quot;Python substr&quot; ou &quot;Python str_replace&quot; !<br />Preuve que pas mal de gens s&#39;intéressent à Python ces temps-ci. Sans doute le coming out de Google avec App Engine n&#39;y est-il pas tout à fait étranger.</p>
  318. </div>
  319. </div>
  320. <div class="comment" typeof="schema:UserComments">
  321. <p class="comment-meta">
  322. <span class="comment-author" property="schema:creator">patfrat</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  323. </p>
  324. <div class="comment-content" property="schema:commentText">
  325. <p>Salut,<br />Cet article a suscité en moi un tel intérêt que j&#39;ai lu jusqu&#39;à la dernière ligne et le dernier mot des commentaires.<br />Je suis plutôt d&#39;accord avec les propos tenus dans cet article et j&#39;y ai collé pour ma part Ruby à la place de Python.<br />D&#39;accord sur le manque de confiance en soi, le manque de curiosité et la peur de l&#39;inconnu... pour ce qui est de se tourner vers d&#39;autres langages.</p>
  326. <p>Je suis &quot;webmaster&quot; depuis 8 ans maintenant. J&#39;ai commencé avec Php pour rendre mes sites dynamiques et j&#39;ai carrément créé mon propre CMS pour me faciliter la tâche. <br />Et il y a de celà 1 an et demi maintenant, je développe avec RubyOnRails et j&#39;adore ... mais je compte bien essayer aussi Python/Django.</p>
  327. <p>J&#39;utilise RoR pour développer l&#39;intranet de ma boîte (qui n&#39;est pas une petite boîte). Un développement en interne pour des outils très spécifiques aux besoins de l&#39;entreprise et réellement adaptés. J&#39;ai décidé d&#39;utiliser RoR pour ce faire car je ne connaissais pas ce framework et encore moins la langage Ruby mais que je savais que j&#39;avais les bases pour m&#39;en sortir avec mon expérience en Php. Et çà fonctionne. Et si demain Python peut répondre à certains de mes besoins, je ferai du Python.</p>
  328. <p>Aujourd&#39;hui, j&#39;ai même participé au suivi d&#39;un développement pour l&#39;entreprise réalisé par des étudiants en informatiques qui avaient justement choisi ce projet parce qu&#39;il fallait le développer avec Rails pour son intégration dans l&#39;intranet et que leur premier argument pour ce choix était qu&#39;il ne connaissaient pas Rails et que c&#39;était l&#39;occasion de le découvrir...</p>
  329. <p>Concernant l&#39;hébergement, mon blog est en rails sur un hébergement mutualisé, bien qu&#39;encore expérimental ... mais chez un hébergeur connu et à un tarif accessible... J&#39;ai lu dans les commentaires que mod_php avait grandement aidé à la popularité de php. J&#39;espère que mod_rails en fera de même.</p>
  330. <p>Bon, j&#39;arrête là mon monologue :D<br />Tout çà pour dire : Php, Ruby, Python, ... il suffit de trouver celui qui répond le mieux à ses besoins. J&#39;ai misé sur RoR pour l&#39;intranet de ma boîte, au risque de me planter et ce n&#39;est pas le cas ... je dirai même plutôt que j&#39;ai bien fait de m&#39;y coller. Mais si demain, je dois utiliser Python et après-demain autre chose ... peu importe, je le ferai.<br />Je n&#39;ai pas peur de l&#39;inconnu, j&#39;ai confiance en moi et je suis très curieux.</p>
  331. <p>Merci pour cet article.</p>
  332. </div>
  333. </div>
  334. <div class="comment" typeof="schema:UserComments">
  335. <p class="comment-meta">
  336. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  337. </p>
  338. <div class="comment-content" property="schema:commentText">
  339. <p>@Tous : merci pour vos retours d&#39;expériences, plutôt encourageants.</p>
  340. <p>@Damien B : oui l&#39;hébergement a été et reste toujours (dans une moindre mesure, ou alors je m&#39;améliore en admin sys, qui l&#39;eût cru) un vrai problème à l&#39;essor d&#39;autres solutions comparé à la simplicité (au moins pour les petits projets) du dépôt de fichiers.</p>
  341. <p>@No&#39; : Amen bro&#39; :)</p>
  342. <p>@hk :</p>
  343. <p>&gt; Quel interet aussi d&#39;apprendre un langage avec lequel que je vais pas pouvoir trouver de boulot ?</p>
  344. <p>Heureusement que nos parents avaient une approche un peu plus dynamique sinon on serait encore en train de faire du Fortran... voire pire.</p>
  345. <p>De ce que je vois passer, les offres en Python (par exemple) sont plus réduites mais me semblent de meilleure qualité ou en tout cas plus proches de ce que j&#39;appelle &quot;boulot&quot;.</p>
  346. <p>@xethorn : soit j&#39;ai mal montré la Lune, soit tu es resté concentré sur le doigt.</p>
  347. </div>
  348. </div>
  349. <div class="comment" typeof="schema:UserComments">
  350. <p class="comment-meta">
  351. <span class="comment-author" property="schema:creator">xethorn</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  352. </p>
  353. <div class="comment-content" property="schema:commentText">
  354. <p>@David : difficile à dire, j&#39;ai lu plusieurs fois l&#39;article pour être certain de ce que je lisais. Chaque exemple est porté sur Django / Python. Si l&#39;article aurait été global, c&#39;est-à-dire démontrer que chaque technologie devrait avoir un intérêt à être expérimenté au moins une fois, j&#39;aurai interprété différemment je pense.</p>
  355. <p>Et pour reprendre ta métaphore du « sage qui montre la lune et de l&#39;idiot qui regarde le doigt », ce n&#39;est pas décevant, lorsque l&#39;on parle de curiosité, de ne montrer qu&#39;une Lune ? L&#39;univers est encore plus vaste ;)</p>
  356. </div>
  357. </div>
  358. <div class="comment" typeof="schema:UserComments">
  359. <p class="comment-meta">
  360. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  361. </p>
  362. <div class="comment-content" property="schema:commentText">
  363. <p>&gt; Chaque exemple est porté sur Django / Python.</p>
  364. <p>Oui, je prends ce que je connais en exemple. Mais le commentaire de patfrat #22 juste au-dessus montre qu&#39;il en est de même avec Ruby / RoR. À chacun de l&#39;adapter à son histoire, à son besoin.</p>
  365. <p>L&#39;univers informatique est parfois un peu trop vaste pour la durée de mes nuits ;-)</p>
  366. </div>
  367. </div>
  368. <div class="comment" typeof="schema:UserComments">
  369. <p class="comment-meta">
  370. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  371. </p>
  372. <div class="comment-content" property="schema:commentText">
  373. <p>@damien b ton discours passif agressif est amusant à lire. Mais ton ignorance est confondante:</p>
  374. <p>- français: s&#39;ouvrir à d&#39;autres media signifie forcemment que le web (et non Internet) que le web en est un. Sinon il n&#39;y en aurait pas d&#39;autres.</p>
  375. <p>- Ex. un service/une application web qui transite via les téléphones portables n&#39;a pas les mêmes propriétés qu&#39;une application web transitant dans des ordinateurs. Une application web se trouvant dans des téléviseurs n&#39;a pas les mêmes paramètres non plus. Ni demain/aujourd&#39;hui une application web dans mon frigo ou dans n&#39;importe quel objet &quot;intelligent &quot;.</p>
  376. <p>distribution : <a href="http://www.linux-france.org/prj/jargonf/D/distribueac.html">http://www.linux-france.org/prj/jargonf/D/distribueac.html</a> ou page wikipedia pour ceux qui utilisent encore ce site.</p>
  377. <p>- une appli web ne se résume pas qu&#39;en terme d&#39;implication pour l&#39;utilisateur. D&#39;ailleurs quel utilisateur ? Python et ruby permettent de faire de l&#39;asynchrone : twisted pour python, EventMachine pour ruby en sont des exemples.</p>
  378. <p>- Dire qu&#39;un serveur web fonctionne de manière asynchrone et parralélisée (ce qui n&#39;est pas le cas pour tous) ne signifie pas que l&#39;application web fonctionne ainsi. Avoir un algorithme parallèle ou asynchrone implique que le langage le permette et si possible sans bricolage. Pour une application web, comme twitter c&#39;est important pour certains des services web.</p>
  379. <p>Je vais te laisser lire <a href="http://www.w3.org/People/Berners-Lee/Weaving/">http://www.w3.org/People/Berners-Lee/Weaving/</a> avant que l&#39;on reparle de la définition d&#39;un service web. (il y a toujours la video <a href="http://www.ted.com/index.php/talks/tim_berners_lee_on_the_next_web.html">http://www.ted.com/index.php/talks/tim_berners_lee_on_the_next_web.html</a>)</p>
  380. <p>- et là subitement je viens de réaliser que tu ne sais pas lire.</p>
  381. </div>
  382. </div>
  383. <div class="comment" typeof="schema:UserComments">
  384. <p class="comment-meta">
  385. <span class="comment-author" property="schema:creator">Olivier</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  386. </p>
  387. <div class="comment-content" property="schema:commentText">
  388. <p>Marrant, j&#39;ai une opinion assez opposée à celle de No&#39;!</p>
  389. <p>Je suis d&#39;accord que le choix entre python et, disons, ruby, est une affaire de goût.</p>
  390. <p>Par contre, entre python et PHP, c&#39;est un univers de différence. Python est plein de bonnes idées: méta classes, générateurs, arguments nommés, comprehensive lists, et j&#39;en passe.</p>
  391. <p>PHP à côté n&#39;a rrrien. Ça n&#39;est pas une affaire de goûts. C&#39;est un fait.</p>
  392. <p>Utiliser PHP au lieu de python c&#39;est en effet:<br />- se limiter au web<br />- se priver d&#39;une chouette console (Ipython)<br />- se priver des bonnes choses mentionnées plus haut (tien, et les namespaces, aussi)</p>
  393. <p>Pourquoi se torturer ainsi????</p>
  394. <p>Parce qu&#39;il y a tout un tas de codes écrit en PHP. Parce que certaines entreprises refusent d&#39;utiliser autre chose. J&#39;oublie sûrement d&#39;autres excellents arguments.</p>
  395. <p>J&#39;éprouve un respect total pour le dev PHP qui a conscience de ça: il utilise un langage étriqué, mais il est bien obligé. Il aimerait bien passer à python ou ruby, mais son patron n&#39;est pas d&#39;accord. C&#39;est la vie.</p>
  396. <p>On éprouve moins de respect pour les devs PHP qui réagissent de façon épidermique dès qu&#39;on nomme python ou ruby...</p>
  397. <p>Il faut être ouvert et curieux, et surtout, surtout, ne pas avoir peur de réaliser un jour que le langage avec lequel on a bossé pendant des années n&#39;était en fait... pas terrible.</p>
  398. </div>
  399. </div>
  400. <div class="comment" typeof="schema:UserComments">
  401. <p class="comment-meta">
  402. <span class="comment-author" property="schema:creator">Mickaël</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  403. </p>
  404. <div class="comment-content" property="schema:commentText">
  405. <p>Pour les namespaces ce ne sera plus vrai dans pas très longtemps, même si on peut toujours critiquer l&#39;inplémentation qui effectivement ne semble pas aussi limpide que celle de Python.</p>
  406. <p>Les réactions épidermiques j&#39;en ai pas vu beaucoup chez les développeurs PHP que je connais. En revanche j&#39;ai bien eu une fois une réaction d&#39;un dev java quand il a appris que l&#39;indentation était siginifiante en Python:</p>
  407. <p>&quot;Pouah ! c&#39;est crade !&quot;</p>
  408. <p>Tant pis pour lui en même temps ^_^</p>
  409. </div>
  410. </div>
  411. <div class="comment" typeof="schema:UserComments">
  412. <p class="comment-meta">
  413. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  414. </p>
  415. <div class="comment-content" property="schema:commentText">
  416. <p>&quot;Mais ton ignorance est confondante&quot;</p>
  417. <p>Moins que votre capacité à vider les mots de leur sens.</p>
  418. <p>&quot;- français: s&#39;ouvrir à d&#39;autres media signifie forcemment que le web (et non Internet) que le web en est un. Sinon il n&#39;y en aurait pas d&#39;autres.&quot;</p>
  419. <p>Un peu d&#39;emballement, mais internet est un média aussi.</p>
  420. <p>&quot;On leur demande de communiquer entre eux par ex (distribution)&quot;<br />&quot;distribution : <a href="http://www.linux-france.org/prj/jargonf/D/distribueac.html%22">http://www.linux-france.org/prj/jargonf/D/distribueac.html&quot;</a></p>
  421. <p>Communiquer entre acteurs != architecture distribuée.</p>
  422. <p>&quot;une appli web ne se résume pas qu&#39;en terme d&#39;implication pour l&#39;utilisateur. D&#39;ailleurs quel utilisateur ?&quot;</p>
  423. <p>L&#39;utilisateur de l&#39;application ?</p>
  424. <p>&quot;Python et ruby permettent de faire de l&#39;asynchrone [...]&quot;</p>
  425. <p>français : &quot;quel est l&#39;intérêt pour le web d&#39;avoir de l&#39;asynchrone au niveau du langage&quot;<br />PHP aussi permet de faire de l&#39;asynchrone si on part dans cette direction.</p>
  426. <p>&quot;Dire qu&#39;un serveur web fonctionne de manière asynchrone et parralélisée (ce qui n&#39;est pas le cas pour tous) ne signifie pas que l&#39;application web fonctionne ainsi.&quot;</p>
  427. <p>français : &quot;Les applis web on toujours travaillé de manière parallèle, ou alors il faut que vous me montriez un serveur HTTP qui ne soit capable de ne servir qu&#39;une requête à la fois.&quot; Je n&#39;ai pas dit que les serveurs travaillaient en asynchrone. Et à partir du moment où l&#39;application est capable de traiter deux requêtes de manière simultanée, c&#39;est un fonctionnement en parallèle (et pas en série). Après bien sûr on peut paralléliser le traitement à l&#39;intérieur du traitement de la requête, mais à ne niveau, la partie &quot;web&quot; de &quot;application web&quot; n&#39;est plus le sujet.</p>
  428. <p>&quot;Pour une application web, comme twitter c&#39;est important pour certains des services web.&quot;<br />&quot;Je vais te laisser lire <a href="http://www.w3.org/People/Berners-Lee/Weaving/">http://www.w3.org/People/Berners-Lee/Weaving/</a> avant que l&#39;on reparle de la définition d&#39;un service web.&quot;</p>
  429. <p>Tiens, vous n&#39;avez pas trouvé de référence textuelle en ligne ?<br />Comme : <a href="http://www.w3.org/TR/ws-arch/#whatis">http://www.w3.org/TR/ws-arch/#whatis</a> , ou de Tim directement : <a href="http://www.w3.org/DesignIssues/WebServices.html">http://www.w3.org/DesignIssues/WebServices.html</a> . Sinon pour application Web vous avez de la lecture ici <a href="http://www.w3.org/TR/2008/WD-mwabp-20080729/#webapp-defined">http://www.w3.org/TR/2008/WD-mwabp-20080729/#webapp-defined</a> , <a href="http://www.w3.org/2008/webapps/charter/">http://www.w3.org/2008/webapps/charter/</a> ... une constante : quand on parle d&#39;Application Web dans les références W3, on s&#39;en fiche un peu (beaucoup) de la partie non Web, ie. ce qui se passe dans le serveur. Et d&#39;ailleurs c&#39;est valable pour les Services Web aussi, la différence majeure entre l&#39;Application Web et le Service Web étant l&#39;utilisateur. Et hop on rebondit sur : &quot;Avoir un algorithme parallèle ou asynchrone implique que le langage le permette et si possible sans bricolage. Pour une application web, comme twitter c&#39;est important pour certains des services web.&quot; En quoi c&#39;est important pour une Application Web ou un Service Web ? C&#39;est important pour une application (tout court) d&#39;avoir ces outils à dispositions, et on n&#39;a pas attendu le Web (problématique complètement orthogonale) et encore moins Twitter pour ça.</p>
  430. <p>&quot;et là subitement je viens de réaliser que tu ne sais pas lire.&quot;</p>
  431. <p>Incroyable, et vous prenez le temps de répondre ?</p>
  432. </div>
  433. </div>
  434. <div class="comment" typeof="schema:UserComments">
  435. <p class="comment-meta">
  436. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">16/03/2009</span> :
  437. </p>
  438. <div class="comment-content" property="schema:commentText">
  439. <p>&quot;PHP à côté n&#39;a rrrien. Ça n&#39;est pas une affaire de goûts. C&#39;est un fait.&quot;</p>
  440. <p>Oui tout à fait. C&#39;est la question de la portée originelle du langage. PHP a été conçu comme un langage de script de génération de texte embarqué dans du texte, alors que Python, Ruby, Java... sont des langages par nature applicatifs qui ont eu ensuite des API spécifiques pour servir le web.<br />De toute façon, ça n&#39;est pas une question qu&#39;on risque d&#39;avoir côté client : VBScript est en pratique mort sur le web :-)</p>
  441. </div>
  442. </div>
  443. <div class="comment" typeof="schema:UserComments">
  444. <p class="comment-meta">
  445. <span class="comment-author" property="schema:creator">Benjamin</span> le <span class="comment-date" property="schema:commentTime">24/03/2009</span> :
  446. </p>
  447. <div class="comment-content" property="schema:commentText">
  448. <p>Troll</p>
  449. </div>
  450. </div>
  451. <div class="comment" typeof="schema:UserComments">
  452. <p class="comment-meta">
  453. <span class="comment-author" property="schema:creator">Florian S.</span> le <span class="comment-date" property="schema:commentTime">02/04/2009</span> :
  454. </p>
  455. <div class="comment-content" property="schema:commentText">
  456. <p>&gt; Même si j&#39;ai fait du PHP pendant de nombreuses années, je dois dire que je n&#39;ai pas trouvé de framework qui me corresponde vraiment, il y avait toujours quelque chose qui me déplaisait dans ceux que j&#39;ai testé (symfony, zend, ...).</p>
  457. <p>Et c&#39;est exactement l&#39;expérience que j&#39;ai aussi !</p>
  458. <p>Je viens de PHP, et je ne suis pas encore plus que &quot;débutant&quot; en Python. PHP m&#39;a permit de me mettre à la programmation rapidement : à 14 ans, sur le PC des parents, avec Windows, on utilise une solution WAMP.</p>
  459. <p>Genre, EasyPHP (ouais, ça date), qui s&#39;installe en trois clics et demi. Paf, je lance le navigateur, et hop, mon localhost m&#39;affiche, triomphant, un &quot;Hello world, vive php !&quot;.</p>
  460. <p>C&#39;est simple, rapide, accessible, et à l&#39;époque, largement au-dessus de python en terme de visibilité. J&#39;ai pu prendre gout à la programmation, tester tout un tas de choses sur les concepts objets, faire des comparatifs entre plusieurs langages, etc...<br />C&#39;est une expérience positive, et je ne me considère pas comme un sous-développeur parce que je fais principalement du PHP. J&#39;aime ce langage, il me permet de m&#39;amuser et de travailler en me faisant plaisir. Il a des défauts, et je suis heureux de voir que Python m&#39;ouvre d&#39;autres voies, d&#39;autres expériences, et surtout, correspond encore mieux à ce que j&#39;ai envie de faire : aller au-delà du Web, surtout que celui-ci s&#39;ouvre à d&#39;autre fonctionnement que le &quot;un internaute et son navigateur&quot;, mais une multitude de support (mobile, netbook &amp; co)</p>
  461. <p>Maintenant l&#39;élitisme, je ne le vois pas dans l&#39;accès à la techno en elle-même. D&#39;ailleurs, ça a été dit : faire un hello world en python, se résume à lancer l&#39;interpréteur, à faire &quot;print &quot;Hello world&quot; et hop, c&#39;est fini.<br />C&#39;est simple et rapide, et il existe aujourd&#39;hui des tutoriels - en français aussi - très bien fait, et sur l&#39;apprentissage rien à redire.</p>
  462. <p>Par contre, lorsqu&#39;il s&#39;agit de rencontrer d&#39;autres développeurs... c&#39;est une autre histoire. J&#39;en ai fais l&#39;expérience récente au Salon Linux Open Source : je me suis senti con. Du genre... un simplet, qui vient d&#39;un sous-langage, qui veut &quot;ha ha ha&quot; se mettre à python. Je ne le leur en veux pas, ce n&#39;est pas si loin que ça d&#39;être vrai, et c&#39;est un comportement humain. J&#39;aurais sans doute pas fait mieux.</p>
  463. <p>J&#39;avais déjà été confronté à ce comportement, notamment sur des forums à propos de Ruby, et avec deux ou trois développeurs Java. Ce n&#39;est donc pas, heureusement, le propre de la communauté Python.</p>
  464. <p>Alors oui, il faut avoir une sacré dose de confiance en soi, et être capable de se remettre en question. C&#39;est ce que je fais, je m&#39;attends à être critiqué pour mes erreurs, pour les idioties que je vais écrire. Mais j&#39;attends aussi qu&#39;on m&#39;explique pourquoi, sans me prendre de haut.</p>
  465. <p>Bref, les développeurs chevronnés doivent se rappeler qu&#39;ils ont été &quot;des noobs&quot;, et les débutants - comme moi - doivent accepter pleinement d&#39;être des débutants : poser des questions, ne pas être faignant, et s&#39;investir.</p>
  466. <p>Et c&#39;est valable pour tout, non ?<br />Ah, et, au fait, j&#39;y pense, j&#39;ai découvert Python en découvrant Django. J&#39;ai été séduit dès le premier exemple de fichier &quot;models.py&quot;.</p>
  467. </div>
  468. </div>
  469. <div class="comment" typeof="schema:UserComments">
  470. <p class="comment-meta">
  471. <span class="comment-author" property="schema:creator">jpic</span> le <span class="comment-date" property="schema:commentTime">17/04/2009</span> :
  472. </p>
  473. <div class="comment-content" property="schema:commentText">
  474. <p>Es-tu allé plus loin? Qu&#39;est-ce-qui t&#39;as arretté? As-tu besoin d&#39;aide?<br />Etes-vous sur qu&#39;il soit possible de maitriser un framework aussi complet en une semaine? nottament pour:<br />- comprendre l&#39;intégralité de l&#39;architecture des librairies et applications ré-utilisables,<br />- et etre capable de suivre son évolution régulierement, dans un contexte de production de sites internet.</p>
  475. </div>
  476. </div>
  477. <div class="comment" typeof="schema:UserComments">
  478. <p class="comment-meta">
  479. <span class="comment-author" property="schema:creator">Joris</span> le <span class="comment-date" property="schema:commentTime">28/08/2009</span> :
  480. </p>
  481. <div class="comment-content" property="schema:commentText">
  482. <p>@Benjamin : ouais !</p>
  483. </div>
  484. </div>
  485. <div class="comment" typeof="schema:UserComments">
  486. <p class="comment-meta">
  487. <span class="comment-author" property="schema:creator">Merwok</span> le <span class="comment-date" property="schema:commentTime">05/10/2009</span> :
  488. </p>
  489. <div class="comment-content" property="schema:commentText">
  490. <p>Nautilebleu : « Dans l&#39;ensemble l&#39;expérience a été plutôt concluante et agréable, malgré des problèmes avec l&#39;unicode (tous mes fichiers sont en unicode, et pourtant il faut que je les convertisse en entrée et en sortie, bizarre…) »</p>
  491. <p>Un fichier ne peut pas être « en Unicode ». Unicode est une norme faisant correspondre à chaque caractère un point de code, mais ce nombre n’est pas utilisé directement pour stocker les caractères dans un fichier : un encodage est nécessaire. Vos fichiers « en Unicode » sont en fait dans un encodage de caractères permettant d’exprimer la norme Unicode, probablement UTF-8.</p>
  492. <p>Python utilise un objet appelé str (unicode avant la version 3.0) qui correspond à des caractères idéalisés ; on ne peut les écrire dans un fichier directement. De même, on ne peut pas transformer les octets d’un fichier en caractères Unicode sans indiquer comment décoder. Un exemple pour clarifier la distinction octets/caractères :</p>
  493. <p>&gt;&gt;&gt; &#39;éric&#39; # quatre caractères<br />&#39;éric&#39;<br />&gt;&gt;&gt; &#39;éric&#39;.encode(&#39;utf-8&#39;) # cinq octets<br />b&#39;\xc3\xa9ric&#39;</p>
  494. <p>(La notation commençant par un b est un objet bytes, un type de données permettant de stocker une suite d’octets en Python (que ce soit des caractères encodés ou une quelconque suite d’octets). On l’appelle str dans la ligne 2.x. Là j’ai choisi de montrer le comportement de Python 3.x qui est infiniment plus propre sur les histoires d’encodage de caractères.)</p>
  495. <p>Au cas où ce n’est pas clair, une analogie. J’ai un bout de code qui demande à l’utilisateur de rentrer une date, puis je la manipule, mettons en récupérant l’attribut day. J’ai eu des erreurs, et mon code actuel convertit en datetime.date avant de récupérer day, mais je ne comprends pas pourquoi cette étape est nécessaire, vu que je pense que ce que tape l’utilisateur est déjà une date : il tape 2008-01-13. Le truc c’est que c’est une date encodée, c’est une chaîne qu’il faut transformer en objet abstrait date pour le manipuler, puis retransformer en chaîne pour le présenter à l’utilisateur.</p>
  496. <p>C’est exactement pareil avec Unicode : une chaîne de caractères est une succession d’objets abstraits, qui doivent être décodés pour passer du disque à Python, et encodés dans l’autre sens.</p>
  497. <p>J’espère avoir pu clarifier :)</p>
  498. </div>
  499. </div>
  500. <div class="comment" typeof="schema:UserComments">
  501. <p class="comment-meta">
  502. <span class="comment-author" property="schema:creator">40KE</span> le <span class="comment-date" property="schema:commentTime">04/11/2009</span> :
  503. </p>
  504. <div class="comment-content" property="schema:commentText">
  505. <p>&quot;Quel interet aussi d&#39;apprendre un langage avec lequel que je vais pas pouvoir trouver de boulot ? 90% des offres d&#39;emploi reste dans les langages PHP/Java/C/C++/C#...&quot;</p>
  506. <p>L&#39;intêret ? Etre mieux rémunéré, il est possible de gagner pret de 40 K€ en télé travail avec RoR, tout en restant tranquillement à Lyon :)</p>
  507. </div>
  508. </div>
  509. <div class="comment" typeof="schema:UserComments">
  510. <p class="comment-meta">
  511. <span class="comment-author" property="schema:creator">Damien B</span> le <span class="comment-date" property="schema:commentTime">04/11/2009</span> :
  512. </p>
  513. <div class="comment-content" property="schema:commentText">
  514. <p>Pas terrible comme argument, on peut faire pareil (et même plus) en télétravail et en Java tout en restant tranquillement dans le Loir et Cher :-)</p>
  515. </div>
  516. </div>
  517. <div class="comment" typeof="schema:UserComments">
  518. <p class="comment-meta">
  519. <span class="comment-author" property="schema:creator">jr.duboc</span> le <span class="comment-date" property="schema:commentTime">17/12/2009</span> :
  520. </p>
  521. <div class="comment-content" property="schema:commentText">
  522. <p>&gt;&quot;Quel interet aussi d&#39;apprendre un langage avec &gt;lequel que je vais pas pouvoir trouver de &gt;boulot ? 90% des offres d&#39;emploi reste dans les &gt;langages PHP/Java/C/C++/C#...&quot;</p>
  523. <p>En plus du télétravail sus-mentionnée, je pense que l&#39;intêret est aussi intellectuel: apprendre le fonctionnement de Ruby (et surtout de Rails), c&#39;est aussi comprendre une autre philosophie de la programmation. Et après, tu peux même proposer à ton patron fan de Java de bosser avec Grails (<a href="http://www.grails.org/">http://www.grails.org/</a>), un framework proche de la philosophie de Rails écrit en Java :P</p>
  524. <p>J&#39;ajouterais mon petit grain de sel au débat PHP vs. Ruby ou Python.<br />Je pense qu&#39;à la base, PHP était un des premier languages exclusivement web, destiné à déveloper rapidement des sites web sans prise de tête. D&#39;où le snobisme de certains ingénieurs, parce que &quot;c&#39;est pas assez puissant&quot;, gnagnagna. <br />Mais de ce language a emergé une nouvelle génération de programmeurs, peu soigneux AU DEPART mais très motivés, qui sont devenus plutôt bons en peu de temps grâce à la simplicité du language, et ont fini par améliorer PHP jusqu&#39;au language puissant et professionnel qu&#39;il est aujourd&#39;hui (si,si). <br />PHP est en parfait adéquation avec la philosophie &quot;do it yourself&quot; du web, un peu cassé, mais qui fonctionne très bien quand même car des gens passionnés s&#39;en servent pour produire des choses géniales. Bien sûr, ça ne marche pas pour tout, mais ça la communauté PHP l&#39;a très bien compris. On peux intégrer Java et PHP ensemble, et profiter des bénéfices de chaque language.<br />Du coup, que PHP soit simple et basique, on s&#39;en branle un peu, Camille. En fait, c&#39;est même plutôt ça qui fait sont charme. Et pour parler de la qualité du code produit par la communauté, la proportions d&#39;abrutis étant en général une constante, tu trouvera aussi du mauvais code en Java ou Ruby ou Python. Insulter les dévelopeur PHP comme ça assez gratuit je trouve.<br />C&#39;est comme avec une voiture: ma 205 m&#39;amène d&#39;un point A à un point B et, après tout, c&#39;est tout ce qu&#39;on lui demande. Ta Ferrari fait sans doute la même chose, mais pour BEAUCOUP plus cher. On n&#39; pas toujours besoin d&#39;une Ferrari.</p>
  525. </div>
  526. </div>
  527. <div class="comment" typeof="schema:UserComments">
  528. <p class="comment-meta">
  529. <span class="comment-author" property="schema:creator">dumber</span> le <span class="comment-date" property="schema:commentTime">30/01/2010</span> :
  530. </p>
  531. <div class="comment-content" property="schema:commentText">
  532. <p>je trouve que la comparaison avec les voitures résume bien ce qu&#39;il y a a retenir.</p>
  533. <p>Le principale ne serai pas de réussir simplement a avoir le résultat chercher peu importe le langage utilisé ?</p>
  534. </div>
  535. </div>
  536. <div class="comment" typeof="schema:UserComments">
  537. <p class="comment-meta">
  538. <span class="comment-author" property="schema:creator">merwok</span> le <span class="comment-date" property="schema:commentTime">22/03/2010</span> :
  539. </p>
  540. <div class="comment-content" property="schema:commentText">
  541. <p>Ce n’est pas si simple, car le langage de programmation qu’on utilise façonne notre façon de concevoir la programmation. Pour celui qui ne sait utiliser qu’un marteau, tout problème ressemble à un clou. Un langage bien conçu (c’est-à-dire avec une vision d’ensemble cohérente, et non juste un assemblage de trucs comme l’auteur de PHP a fait (je le cite)) facilite la résolution des problèmes. Les langages de programmation ne sont pas des outils interchangeables : ils permettent d’écrire en gros les mêmes programmes, mais ils ne forment pas les mêmes programmeurs.</p>
  542. </div>
  543. </div>
  544. </div>
  545. </section>
  546. <footer>
  547. <nav>
  548. <p>
  549. <small>
  550. Je réponds quasiment toujours aux <a href="m&#x61;ilto:d&#x61;vid%40l&#x61;rlet&#46;fr" title="Envoyer un email">emails</a> (<a href="/david/signature/" title="Ma signature actuelle avec possibilité de chiffrement">signés</a>) et vous pouvez me rencontrer à Montréal. <span class="more-infos">N’hésitez pas à <a href="/david/log/" title="Être tenu informé des mises à jour">vous abonner</a> pour être tenu informé des publications récentes.</span>
  551. </small>
  552. </p>
  553. </nav>
  554. </footer>
  555. </div>
  556. <script src="/static/david/js/larlet-david-3ee43f.js" data-no-instant></script>
  557. <script data-no-instant>InstantClick.init()</script>
  558. </body>
  559. </html>