Catégorie : Technique

  • Acces­seurs

    Je déteste avoir à program­mer ou utili­ser des acces­seurs. Voilà, c’est dit.

    Sérieu­se­ment, qui a eu l’idée de faire des méthodes getX() et setX() ? Dans le meilleur des cas c’est pénible a écrire et diffi­cile à lire.

    Qu’on ne me parle pas d’en­cap­su­la­tion, ces méthodes arti­fi­cielles sont tout sauf un besoin d’en­cap­su­la­tion. C’est même exac­te­ment le contraire de l’en­cap­su­la­tion : C’est parce que je n’ai pas à savoir si un attri­but est en accès direct ou non que je n’ai pas à utili­ser d’ac­ces­seurs.

    Il n’est pas besoin d’im­pac­ter la manière dont on appelle les attri­buts d’un objet pour diffé­ren­cier l’in­ter­face publique et les données internes. De nombreux langages on trouvé une manière élégante de gérer les acces­seurs au niveau du langage au lieu de faire faire des pirouettes à l’uti­li­sa­teur. Un des gros avan­tages c’est qu’on ne commence à défi­nir des méthodes d’ac­ces­seur que quand on en a vrai­ment l’uti­lité, pas « partout, au cas où pour plus tard ».

    Donc, quand il s’agit de migrer un attri­but autre­fois en accès direct, en Javas­cript :

    A = { 
      get b() { return this._b; },
      set b(val) { return this._b = val;} 
    };
    // ou 
    
    A.__defineGetter__("b", function() { return this._b; };
    A.__defineSetter__("b", function(val) { return this._b = val; };

    en Ruby :

    class A
      def b
        @b
      end
      def b=(val)
        @b = val
      end
    end

    en Python :

    class X(object):
      def getb(self):
        return self._b
      def setb(self, val):
        self._b = val
      b = property(getb, setb)
    
    # ou mieux :
    
    class X(object):
      @property
      def b(self):
        return self._b
      @b.setter
      def b(self, val):
        self._b = val

    Sérieu­se­ment, c’est moins de complexité pour démar­rer du code (pas besoin de déve­lop­per des acces­seurs passe-plat au cas où on en aurait besoin plus tard, on peut s’en occu­per unique­ment quand le besoin arrive), et c’est plus de clarté pour tout ce qui utilise notre code (et là le gain est immense même si ça semble juste quelques carac­tères). Je n’ima­gine pas de m’en passer dans les langages où ça existe.

    Si vous utili­sez des getter et setter passes-plat, c’est soit votre code qui est mauvais, soit votre langage qui est bridé (soit que vous utili­sez consciem­ment un langage bas niveau). Dans les deux premiers cas il y a quelque chose à repen­ser.

    Bien entendu PHP reste à la traine, sous prétexte de simpli­cité (allez comprendre).

  • Évolu­tion de PHP – acces­seurs

    Il y a matière à se réjouir : Le déve­lop­pe­ment et l’évo­lu­tion du langage PHP a repris. Nous avons eu les fonc­tions anonymes, les espaces de nom, et quelques nouveau­tés bien­ve­nues, souvent atten­dues de trèèèèès longue date.

    Bref, ça bouge, bien. Nous avons  cepen­dant encore deux courants très oppo­sés au niveau du langage : L’un qui souhaite le garder simple et « comme il est », avec souvent un histo­rique quick’n dirty, et qui au final freine quasi­ment toutes les évolu­tions. L’autre qui souhaite le voir profon­dé­ment changé, et reprendre les bonnes idées des autres langages, au risque de trop vouloir copier ces autres langages.

    Si je devais cari­ca­tu­rer je dirai qu’une majo­rité des déve­lop­peurs de PHP (surtout les histo­riques) sont ceux qui freinent, et qu’une majo­rité des utili­sa­teurs actifs de PHP sont ceux qui poussent. Si ça bouge depuis PHP 5.3, c’est que l’ex­cès du « on ne touche rien » a provoqué un trop grand ras-le-bol, et les déve­lop­peurs de PHP ont été forcés de mettre de l’eau dans leur vin.

    Malheu­reu­se­ment les deux courants existent toujours et rien n’a été tran­ché. On le voit très bien sur la RFC concer­nant les acces­seurs : Une bonne partie des « contre » sont ceux que je quali­fie de « déve­lop­peurs histo­riques du langage », et une partie des « pour » sont ceux que je quali­fie de « utili­sa­teurs actifs dans le langage ».

    Il est plus que temps de déci­der où l’on va, sinon nous allons conti­nuer à avoir un Fran­ken­stein.

  • Post­mark

    Dans le même esprit que Logen­tries, je tombe sur Post­mark avec des prix rela­ti­ve­ment honnêtes (1,5$ les 1000 mails). Si cela permet de soula­ger le serveur d’un service et d’évi­ter les boites à SPAM, peut être que…

    Vous utili­sez quoi pour envoyer vos mails appli­ca­tifs ?

  • Logen­tries

    Quand je regarde Logen­tries, leurs tarifs, je me dis qu’ils ont trouvé un filon.

    Et vous, vous utili­sez quoi pour analy­ser vos logs ?

  • Élabo­ra­toire sur la docu­men­ta­tion des perfor­mances web

    Il y a quelques temps j’ai relâ­ché publique­ment mon travail initial sur un livre en français dédié à la perfor­mance des sites web. Relâ­cher en public ne suffit pas et pour voir appa­raitre une docu­men­ta­tion utile qui devient pas obso­lète il faut créer une vraie dyna­mique de mise à jour et de comple­tion. Le besoin d’une vraie réfé­rence en français (et même en anglais) est là, et il n’y a pas besoin que d’ex­perts pour y arri­ver.

    Sudweb arrive et j’y anime­rai un élabo­ra­toire. Je vous propose d’y travailler ensemble à la docu­men­ta­tion des pratiques et des problé­ma­tiques de perfor­mance. L’objec­tif est de réamor­cer une dyna­mique qui permette d’ar­ri­ver à un contenu utile et mis à jour.

    Pour que la session soit effi­cace il faut prépa­rer un peu :

    En préa­lable il faut réus­sir à poin­ter un maxi­mum le contenu manquant ou à réécrire. Si vous avez peu de temps, choi­sis­sez un sujet qui vous semble perti­nent. Ce peut être une problé­ma­tique croi­sée récem­ment, un sujet abordé dans un billet de blog ou un point tech­nique plus géné­ral. Ce peut être un sujet bateau, une problé­ma­tique très poin­tue ou un point de détail (même très en détail, n’ayez pas peur). Peu importe en fait, si le contenu est manquant ou à mettre à jour : Créez un ticket sur github pour le signa­ler.

    C’est là que vous pouvez aider, et c’est ça qui peut nous permettre d’avoir un contenu de réfé­rence utile et perti­nent au sujet de la perfor­mance web. Je répète : *Vous* pouvez aider. Oui, *vous* aussi, même si vous ne venez pas (mais je vous encou­rage à venir).

    Tout le monde peut parti­ci­per et y inves­tir le temps qu’il peut, même 10 minutes, quel que soit le niveau tech­nique. Si vous ne savez pas par quoi commen­cer regar­der vos dix lectures précé­dentes côté perfor­mance web et véri­fiez que tout ce qui vous semble utile est présent dans le contenu actuel. Mieux : À partir de main­te­nant faites un tour à chaque fois que vous lisez quelque chose sur la perfor­mance pour véri­fier si c’est déjà dans le livre.

    En avril nous ferons un second travail de quali­fi­ca­tion et de regrou­pe­ment pour tenter de consti­tuer des groupes de tâches avec des objec­tifs précis et réali­sables pour Sudweb.

    Merci de votre aide et n’hé­si­tez pas à relayer ce billet.

  • Notmuch – indexa­tion des e-mail

    Pour mes propres archives : Quand on veut indexer un paquet d’e-mail, Notmuch semble plus qu’ef­fi­cace pour les recherches. À rete­nir un jour où je souhaite sortir de Gmail.

  • Comment renta­bi­li­ser la mauvaise qualité

    Que faire quand le réseau sature et qu’on livre un service de mauvaise qualité ? Les geeks irres­pon­sables diront qu’il faut inves­tir dans l’in­fra­struc­ture réseau. Les commer­ciaux de nos four­nis­seurs d’ac­cès sont bien plus astu­cieux : Il suffit de faire payer un accès prio­ri­taire à quelques heureux élus.

    La solu­tion est mira­cu­leuse : Au lieu de dépen­ser on gagne des sous. Pire, on peut affir­mer à ceux qui subissent la mauvaise qualité, que c’est fina­le­ment de leur faute – ils ne payent pas l’op­tion – et pas celle du four­nis­seur.

    C’est encore Free qui fait parler de lui en imagi­nant faire payer un accès prio­ri­taire au catch-up TV. Pour­tant il est clair que sur ce chapitre seul Free est respon­sable des éven­tuels ralen­tis­se­ments. Ce n’est pas une nouveauté, les diri­geants de Free ont très bien compris la stra­té­gie du pour­ris­se­ment et l’idée qu’une mauvaise qualité c’est une source de revenu. La seule diffé­rence avec l’his­toire de Youtube c’est qu’elle concer­nait l’autre côté du réseau (les four­nis­seurs et non les clients).

    Il serait peut être temps que nos régu­la­teurs mettent leur grain de sel pour défi­nir ce qui est le niveau de qualité attendu (ou au moins impo­ser une mesure de qualité publique pour que chacun fasse son choix en connais­sance de cause).

  • Paliers de respon­sive design

    Et si nous dépas­sions les posi­tions de prin­cipe ?

    Pour faire une mise en page web « respon­sive », des gens biens me décon­seillent de me servir des tailles des diffé­rents appa­reils pour imagi­ner les paliers sur lesquels modi­fier l’agen­ce­ment. L’idée est de travailler sur le contenu et d’ima­gi­ner ce qui est le plus perti­nent pour le contenu, indé­pen­dam­ment des appa­reils sur le marché, qui vont de toutes façons évoluer.

    Oui, ok, en théo­rie. Main­te­nant il est temps de travailler la pratique.

    Je peux faire une opti­mi­sa­tion ou un nouvel agen­ce­ment à chaque fois que l’es­pace dispo­nible me permet d’ap­por­ter un peu de valeur ajou­tée. Je fini­rai avec une multi­tude de paliers diffé­rents. Certains me deman­de­ront du temps, peut être beau­coup, alors qu’ils ne repré­sentent quasi­ment aucun visi­teur. Autant dire que j’au­rai perdu du temps.

    À l’in­verse, je peux prévoir unique­ment quelques paliers prin­ci­paux et lais­ser les marges ou tailles s’adap­ter parce que mon contenu le permet. Ce sera correct et lisible partout mais peut être que tel ou tel type d’ap­pa­reil repré­sente beau­coup de visi­teurs et qu’un palier ou qu’une opti­mi­sa­tion supplé­men­taire aurait apporté un retour sur inves­tis­se­ment signi­fi­ca­tif.

    Au final je vais devoir faire des choix de palier non seule­ment en fonc­tion de mon contenu, de l’er­go­no­mie visée et du temps dispo­nible, mais aussi en fonc­tion des visi­teurs et de leur maté­riel. C’est une clas­sique ques­tion de retour sur inves­tis­se­ment, de ratio entre la valeur ajou­tée et l’in­ves­tis­se­ment néces­saire : Je veux que ce soit correct partout, mais je veux concen­ter mes efforts supplé­men­taires là où c’est le plus utile et visible.

    Même sans toucher au nombre de paliers, l’er­go­no­mie et les conte­nus ne dictent pas toujours un palier très précis. Je peux fina­le­ment viser un peu plus tôt ou un peu plus tard sans que ça ne change grand chose, j’ap­por­te­rai juste une solu­tion légè­re­ment diffé­rente. Tel ou tel appa­reil risque de se retrou­ver proche d’un palier et avoir connais­sance de cette proxi­mité me permet un quick-win au niveau de la valeur ajou­tée qu’il serait dommage de rater.

    Bien évidem­ment c’est une réflexion qui dépend en partie des appa­reils, de la répar­ti­tion des utili­sa­teurs et des prévi­sions tels que nous en dispo­sons aujourd’­hui. Cela peut chan­ger, et cela chan­gera. Si je prends correc­te­ment en compte le design et l’er­go­no­mie alors le rendu restera correct. Peut être pas autant opti­misé qu’au départ, mais pas moins bon que si je ne prends pas du tout en compte les appa­reils et utili­sa­teurs au départ.

  • Quelques outils pour simpli­fier github

    Pour mes propres archives, et pour ceux qui ne connaissent pas encore, github met à dispo­si­tion deux outils pour simpli­fier les inter­ac­tions :

    Le premier c’est github pour mac, une inter­face graphique simpliste mais effi­cace pour gérer les dépôts, commit et branches. Ça ne fait pas le café mais ça fait la base utile pour ceux qui ont une utili­sa­tion naive. Le bonus ce sont les noti­fi­ca­tions d’ac­ti­vité qui passent alors dans le système d’alerte inté­gré d’OS X.

    Le second c’est hub, un rempla­ce­ment de la commande git pour les adeptes de la ligne de commande. On ajoute simple­ment quelques simpli­fi­ca­tions de commandes. Rien d’in­dis­pen­sable, mais de quoi éviter de réflé­chir quand on bosse avec github : utili­ser les couples utili­sa­teur/projet dans la ligne de commande, créer une branche à partir d’une pull request, initier un fork, lancer une pull request, etc.

    Côté alertes pour les diffé­rents commits d’un projet, il y a aussi Commit­ted (pour Mac OS X là aussi)

    Naho­lyr a aussi un petit script pour gérer les pull request, en surcouche à hub.

  • Joyeux effets javas­cript – file upload et Twit­ter boots­trap

    Les gens compé­tents se déchaînent et on voit main­te­nant appa­raitre des choses que nous aurions à peine imaginé du temps où j’étais inté­gra­teur web. Nous étions capable de créer tel ou tel compo­sant, mais en créant tout de zéro ou presque. Désor­mais des biblio­thèques pré-exis­tantes donnent un coup d’ac­cé­lé­ra­teur gigan­tesque.

    Aujourd’­hui je suis retombé sur le télé­char­ge­ment de fichiers, et les exemples du boots­trap proposé sont plus que convain­cants. Le menu à gauche pour gérer le posi­tion­ne­ment dans la page est lui aussi une très bonne idée bien implé­men­tée.

    Je ne peux cepen­dant pas m’em­pê­cher de me poser la ques­tion de la charge en terme de perfor­mance quand on utilise plusieurs compo­sants. Rien que baser tout ça sur jquery risque de faire mal côté mobile.