<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
  <title type='text'>Zadkiel Me</title>
  <generator uri='http://effectif.com/nesta'>Nesta</generator>
  <id>tag:www.zadkiel.me,2009:/</id>
  <link href='http://www.zadkiel.me/articles.xml' rel='self' />
  <link href='http://www.zadkiel.me' rel='alternate' />
  <subtitle type='text'>Web development, design, software ...</subtitle>
  <updated>2012-02-15T00:00:00+00:00</updated>
  <author>
    <name>Mathias Peltier</name>
    <uri>http://zadkiel.me</uri>
    <email>mathias@zadkiel.me</email>
  </author>
  <entry>
    <title>L'hoisting en JavaScript</title>
    <link href='http://www.zadkiel.me/javascript/hoisting-javascript' rel='alternate' type='text/html' />
    <id>tag:www.zadkiel.me,2012-02-15:/javascript/hoisting-javascript</id>
    <content type='html'>
      &lt;p&gt;Même si vous ne connaissez pas le terme &lt;em&gt;Hoisting&lt;/em&gt;, inconsciement vous
      faites peut-être avec tous les jours quand vous codez en JS.&lt;/p&gt;
      
      &lt;p&gt;Faisons un petit quizz:&lt;br/&gt;
      &lt;strong&gt;Quizz 1:&lt;/strong&gt;&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::js&amp;#x000A;plop();&amp;#x000A;function plop(){&amp;#x000A;    alert('coin');&amp;#x000A;}&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Si vous exécutez ce code, quel est le résultat ?&lt;br/&gt;
      &lt;code&gt;'coin'&lt;/code&gt; / &lt;code&gt;plop is not a function&lt;/code&gt; / &lt;code&gt;ReferenceError: plop is not defined&lt;/code&gt;&lt;/p&gt;
      
      &lt;p&gt;Et maintenant pour ce code ?&lt;br/&gt;
      &lt;strong&gt;Quizz 2&lt;/strong&gt;:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::js&amp;#x000A;plop();&amp;#x000A;var plop = function(){&amp;#x000A;    alert('coin');&amp;#x000A;};&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Trouvé? Réponses:&lt;br/&gt;
      &lt;strong&gt;Quizz 1&lt;/strong&gt;: &lt;code&gt;'coin'&lt;/code&gt; &lt;a href=&quot;http://jsfiddle.net/fRWnx/&quot; title=&quot;Quizz 1&quot;&gt;Tester&lt;/a&gt;&lt;br/&gt;
      &lt;strong&gt;Quizz 2&lt;/strong&gt;: &lt;code&gt;plop is not a function&lt;/code&gt; &lt;a href=&quot;http://jsfiddle.net/AskQH/&quot; title=&quot;Quizz 2&quot;&gt;Tester&lt;/a&gt; (Voir l'erreur dans firebug)&lt;/p&gt;
      
      &lt;p&gt;Et si vous avez trouvé, avez vous une explication?&lt;/p&gt;
      
      &lt;p&gt;En voici une. En JavaScript les fonctions déclarées et les variables
      sont toujours déplacées(&lt;em&gt;Hoisted&lt;/em&gt;) au début de leurs scope JavaScript par
      l'interpréteur.&lt;/p&gt;
      
      &lt;p&gt;Si on reprend le code du &lt;strong&gt;Quizz 1&lt;/strong&gt; après que l'interpréteur soit passé
      dessus:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::js&amp;#x000A;function plop(){&amp;#x000A;    alert('coin');&amp;#x000A;}&amp;#x000A;plop();&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;La fonction déclarée et son contenu sont &lt;em&gt;hoisted&lt;/em&gt;, rendant l'appel de
      la fonction accessible avant sa déclaration.&lt;/p&gt;
      
      &lt;p&gt;Pour le &lt;strong&gt;Quizz 2&lt;/strong&gt;&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;:::js&amp;#x000A;var plop;&amp;#x000A;plop();&amp;#x000A;plop = function(){&amp;#x000A;    alert('coin');&amp;#x000A;};&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;La variable est &lt;em&gt;hoisted&lt;/em&gt;, mais attention seulement la déclaration, la fonction n'est donc pas encore assignée au
      moment de l'appel, d'où l'erreur &lt;code&gt;plop is not a function&lt;/code&gt;.&lt;/p&gt;
      
      &lt;p&gt;J'espère que la connaissance de l'&lt;em&gt;hoisting&lt;/em&gt; vous permettra d'éviter
      certaines surprises en JavaScript.&lt;/p&gt;
    </content>
    <published>2012-02-15T00:00:00+00:00</published>
    <updated>2012-02-15T00:00:00+00:00</updated>
    <category term='javascript'></category>
  </entry>
  <entry>
    <title>Jouer un son à la fin d'un build Maven</title>
    <link href='http://www.zadkiel.me/productivity/executer-son-maven' rel='alternate' type='text/html' />
    <id>tag:www.zadkiel.me,2011-08-07:/productivity/executer-son-maven</id>
    <content type='html'>
      &lt;p&gt;Quand on se retrouve avec des temps d'exécution de build Maven qui dépassent les 10 minutes, on oublie rapidement de regarder l'output de la console, pour se consacrer à la place à une quelconque tâche de procrastination. Pour éviter ce problème, pourquoi ne pas jouer un son lorsque le build est terminé ?&lt;/p&gt;
      
      &lt;p&gt;Il s'avère que la tâche est très simple sous Mac OS X. Nous avons besoin tout d'abord d'un utilitaire en ligne de commande pour jouer un son: &lt;strong&gt;afplay&lt;/strong&gt; se chargera très bien du travail. Il est installé par défaut, et son usage est simplissime: &lt;code&gt;afplay [path_file_to_play]&lt;/code&gt;.&lt;/p&gt;
      
      &lt;p&gt;Il faut ensuite savoir si l'exécution de la commande Maven est fini, ou encore mieux récupérer le code de retour unix qui nous indique si la commande a échoué(!=0) ou réussie(0). Nous pouvons donc écrire notre script bash comme ceci:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;#!/bin/bash&amp;#x000A;/usr/bin/mvn $*&amp;#x000A;OUT=$?&amp;#x000A;if [ $OUT -eq 0 ];then&amp;#x000A;  afplay ff_win_short.wav&amp;#x000A;else&amp;#x000A;  afplay fail_motus.wav&amp;#x000A;fi&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;h2&gt;Explication:&lt;/h2&gt;
      
      &lt;pre&gt;&lt;code&gt;/usr/bin/mvn $*&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;On appelle l'exécutable Maven en lui passant comme argument ceux passés aux scripts.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;OUT=$?&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;On récupère le code de retour de l'exécution.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;if [ $OUT -eq 0 ];then&amp;#x000A;  afplay ff_win_short.wav&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Si il n'y a pas eu d'erreurs on joue le son choisit pour ce cas.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;else&amp;#x000A;  afplay fail_motus.wav&amp;#x000A;fi&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Sinon on joue le son d'échec.&lt;/p&gt;
      
      &lt;p&gt;Sauvegarder ce script au format .sh. Trouver également deux fichiers sons de votre choix, ou utiliser comme moi le son de victoire de final fantasy, et le son de la boule noir de MO-MO-MOTUS.&lt;/p&gt;
      
      &lt;p&gt;Après avoir placé ce script dans votre PATH, vous pouvez l'utiliser de n'importe où:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;mvnS.sh clean install&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Et voilà, nous avons un script fonctionnel. Amusez vous bien!&lt;/p&gt;
    </content>
    <published>2011-08-07T00:00:00+00:00</published>
    <updated>2011-08-07T00:00:00+00:00</updated>
    <category term='productivity'></category>
  </entry>
  <entry>
    <title>JavaScript, ce mal aimé</title>
    <link href='http://www.zadkiel.me/javascript/javascript-mal-aime' rel='alternate' type='text/html' />
    <id>tag:www.zadkiel.me,2011-05-07:/javascript/javascript-mal-aime</id>
    <content type='html'>
      &lt;p&gt;&lt;img src=&quot;http://www.skorks.com/wp-content/uploads/2010/04/javascript.jpg&quot; alt=&quot;Javascript Vs Javascript the good part&quot; title=&quot;Javascript Vs Javascript the good part&quot; height=&quot;250px&quot; style=&quot;margin-top: 10px;&quot;/&gt;&lt;/p&gt;
      
      &lt;blockquote&gt;&lt;p&gt;Purée, mais JavaScript c'est de la merde !&lt;/p&gt;&lt;/blockquote&gt;
      
      &lt;p&gt;J'avoue que de telles pensées de haine pure m'ont déjà envahit, dans d'intenses phases d'incompréhension devant mes scripts JS. Et je suis sûr que je ne suis pas le seul.&lt;/p&gt;
      
      &lt;p&gt;Et bien, vous savez quoi...Cela ne m'arrive presque plus. Et mes explications sur comment j'y suis parvenu, pourront peut-être vous épargner quelques cheveux blancs.&lt;/p&gt;
      
      &lt;p&gt;Si je voulais faire court, il suffit d'une chose pour arrêter de se prendre la tête avec JavaScript: &lt;strong&gt;apprendre le langage JavaScript&lt;/strong&gt;. Dixit &lt;a href=&quot;http://fr.wikipedia.org/wiki/Douglas_Crockford&quot; title=&quot;Douglas Crockford&quot;&gt;Douglas Crockford&lt;/a&gt;, &lt;a href=&quot;http://www.crockford.com/javascript/javascript.html&quot; title=&quot;The World's Most Misunderstood Programming Language&quot;&gt;JavaScript est le langage le moins compris au monde&lt;/a&gt;. Cela date de 2001, mais les choses n'ont pas tellement évoluées.&lt;/p&gt;
      
      &lt;p&gt;Et pourquoi est-il mal compris ?&lt;/p&gt;
      
      &lt;p&gt;Principalement à cause de l'utilisation quasi-exclusive qu'on en fait: &lt;strong&gt;pour manipuler le DOM&lt;/strong&gt;. Et ce, le plus souvent avec un framework tel que &lt;a href=&quot;http://jquery.com/&quot; title=&quot;jQuery&quot;&gt;jQuery&lt;/a&gt;. On se dit alors que l'on a pas vraiment besoin de connaitre le langage, que des &lt;strong&gt;copier-coller&lt;/strong&gt; suffiront sans plus chercher à comprendre. Et c'est là que les problèmes commencent.&lt;/p&gt;
      
      &lt;p&gt;En effet, faute de connaitre le langage, &lt;strong&gt;on essaye de reproduire des principes que l'on connait bien en Java/Php/&lt;/strong&gt;..., mais la plupart du temps cela ne fonctionne pas (Ou en tout cas, pas comme attendu). Sans compter sur la documentation des premiers résultats de google, qui restent d'une grande médiocrité, &lt;a href=&quot;http://hacks.mozilla.org/2010/10/promotejs-a-worldwide-call-for-improving-js-documentation-visibility/&quot; title=&quot;Promote js&quot;&gt;malgré l'effort fournit par Mozilla&lt;/a&gt;.&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array&quot;&gt; &lt;img src=&quot;http://static.jsconf.us/promotejsv.gif&quot; title=&quot;JavaScript Array .pop&quot; alt=&quot;JavaScript Array .pop&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
      
      &lt;p&gt;Ces confusions entrainent souvent une utilisation de JavaScript qui donne des résultats, mais avec &lt;strong&gt;un code de mauvaise qualité&lt;/strong&gt;. Et cela s'aggrave quand la quantité de code devient importante: &lt;strong&gt;le fameux code spaghetti&lt;/strong&gt;.&lt;/p&gt;
      
      &lt;p&gt;Mais tout n'est pas perdu. Je vais tenter dans de prochains articles de traiter des sujets qui me paraissent importants à bien connaitre pour utiliser JavaScript correctement. Ces spécificités du langage qui sont la plupart du temps méconnues. Vous allez sûrement en apprendre plus que ce que vous croyez, et je vous jure que ça vaut le coup d'oeil.&lt;/p&gt;
    </content>
    <published>2011-05-07T00:00:00+00:00</published>
    <updated>2011-05-07T00:00:00+00:00</updated>
    <category term='javascript'></category>
  </entry>
</feed>

