Catégorie : Développement web

  • Tester, docu­men­ter et débo­guer une API REST

    Je découvre apiary.io. Il y a de quoi docu­men­ter, tester et débo­guer une API REST, avec des mocks et des proxy de débo­guage.

    Je ne sais pas si la valeur ajou­tée est suffi­sante pour imagi­ner utili­ser un service de ce type mais c’est bien foutu, simple, et assez clair. Je n’ai simple­ment pas compris quel est le modèle busi­ness (et ça c’est un gros point noir).

    Bref, à surveiller, le compte de test peut être créé en quelques secondes à partir d’un compte github.

  • Writing Web Apps Quickly With Mortar

    Les webapps sont pour moi défi­ni­ti­ve­ment la direc­tion vers laquelle aller. Mozilla pousse beau­coup via Fire­fox OS. Pour jouer avec eux, jetez un oeil à Mortar, qui permet d’ini­tia­li­ser tout le néces­saire. Il y a un joli billet de hacks.mozilla.org qui peut vous permettre de démar­rer.

  • Liga­tures privées et rempla­ce­ment de textes

    Pendant quelques années nous avons cher­ché le saint Graal pour rempla­cer du texte par des images dans les pages HTML. Il y a eu sIFR qui néces­si­tait le plugin Flash, des bidouilles à base d’in­den­ta­tion et marges CSS néga­tives qui risquaient de casser pour ceux qui n’af­fi­chaient pas les images, des trucs horribles à base de display:none qui empê­chaient le copier/coller, etc.

    J’avais pas mal laissé tombé quand j’ai vu que certains jouaient avec des polices de carac­tères à la wing­dings. Ça ne faisait pas de rempla­ce­ment et ça néces­si­tait d’ajou­ter des carac­tères arbi­traires qui risquaient de mal passer en cas d’ab­sence de la police choi­sie.

    Sauf que visi­ble­ment ils ont trouvé le saint Graal il y a un bon moment et personne ne m’a prévenu. Alors si vous aussi on ne vous a pas prévenu, regar­dez Symbol­set et Liga­ture Symbols.

    L’idée c’est d’uti­li­ser les liga­tures. Les liga­tures ce sont ces arte­facts qui permettent de rempla­cer certaines suites de carac­tères par un visuel spéci­fique afin d’en simpli­fier la lecture. On cite souvent « fl » et fi » comme exemple de liga­ture mais Wiki­pe­dia a une superbe illus­tra­tion.

    L’as­tuce est de décla­rer une police person­na­li­sée où « se connec­ter » est remplacé par une liga­ture qui contient l’icône corres­pon­dante. C’est vecto­riel, ça s’adapte en taille comme en couleur, ça se dégrade parfai­te­ment pour ceux qui ne savent pas relire la liga­ture ou la police de carac­tères, et pour le système ça reste encore le mot « se connec­ter » donc c’est tota­le­ment trans­pa­rent. Bref, comme en plus c’est léger en poids, on a presque trouvé le saint Graal. Pourquoi personne ne m’avais rien dit ? Comment ai-je pu passer à côté ?

    Vous avez même un outil en ligne qui fait tout ça : Icomoon

  • Quelques liens javas­cript

    Partagé sans commen­taires, mais vous pouvez faire les vôtres :

  • Quelques stages pour 2013

    J’avais relayé quelques offres de recru­te­ment ici par le passé. Je vous propose de regar­der quelques possi­bi­li­tés de stages. L’idée c’est de travailler sur des sujets sympa, dans une équipe qui l’est tout autant.

    Il y a un peu de tout, mais l’es­sen­tiel est bien sûr de l’in­no­va­tion et des sujets que vous n’au­rez pas forcé­ment ailleurs. Par contre s’il y a pas mal de sujets, nous n’ou­vri­rons que deux postes, afin de gérer correc­te­ment le volet enca­dre­ment et forma­tion.

    L’en­vi­ron­ne­ment c’est une star­tup sympa, avec un vrai projet, de l’in­no­va­tion, et une vision « ouverte » au coeur de son ADN. Pour ne rien gâcher c’est à Lyon et pas dans la grisaille pari­sienne.

  • Blanc sur orange, c’est noir sur noir

    Parce que ça m’a servi récem­ment, ça peut servir à d’autres.

    Du vert clair sur du blanc c’est illi­sible. Du marron sur du noir, c’est illi­sible. Quelle est la limite, le blanc sur orange est-il lisible ? Se fier à sa propre vision c’est oublier que tous n’ont pas les mêmes diffi­cul­tés, et oublier le contexte diffé­rent entre le visi­teur et le créa­teur de l’illus­tra­tion.

    Donc pour avoir une mesure objec­tive, je vous recom­mande la lecture du billet Open­web (une ressource excel­lente qui n’est jamais assez recom­man­dée), et l’ou­til Contrast-A. Par la même occa­sion faites atten­tion aux diffé­rents dalto­niens : Ça repré­sente tout de même presque 10% de la popu­la­tion mascu­line.

    J’en profite : même si c’est proba­ble­ment ce que je fais ici, vous avez en géné­ral inté­rêt à ne pas faire du noir sur blanc et encore moins du blanc sur noir. Atté­nuer le noir, voire le blanc, est souvent une bonne idée même si c’est moins épatant lors des présen­ta­tions à la direc­tion.

  • Parcou­rir des dossiers et filtrer les fichiers n’a jamais été aussi simple avec la SPL de PHP5

    Parcou­rir les fichiers c’est simple avec PHP 5 et la SPL. Ou pas.

    <?php
     class bigFileFilterIterator extends FilterIterator {
         public function accept() {
             $oFileInfo = $this->getInnerIterator()->current();
             return ($oFileInfo->getSize() > 10000);
         }
     }
     $themedir = __DIR__.'/theme';
     $iterator = new RecursiveDirectoryIterator($themedir, FilesystemIterator::SKIP_DOTS);
     $iterator->setFlags(FilesystemIterator::CURRENT_AS_FILEINFO);
     $recursiveIterator = new RecursiveIteratorIterator($iterator);
     foreach(new bigFileFilterIterator($recursiveIterator) as $file) {
         echo $file->getfilename()."n";
     }

    Sérieu­se­ment ? Mais pourquoi ne puis-je pas utili­ser direc­te­ment le Recur­si­veDi­rec­to­ryI­te­ra­tor et dois-je instan­cier un Recur­si­veI­te­ra­torI­te­ra­tor ? Celui qui a conçu cette dernière classe souffre-t-il de bégaye­ment ? Rien que l’ins­tan­cia­tion du premier itéra­teur ne tient pas sur une seule ligne. Un ->getIn­nerI­te­ra­tor()->current() et pas un para­mètre direc­te­ment dans la méthode ->accept() ? Sérieu­se­ment ?

    Montrer les nouvelles possi­bi­li­tés c’est appré­ciable, les quali­fier de simple est une insulte à l’in­tel­li­gence.

    De mon temps on faisait quelque chose comme ce qui suit :

    <?php
     function recursive_filter($path) {
         $dir = dir($path) ;
         while (false !== ($name = $dir->read())) {
             if ($name[0] === '.') return ;
             $new_path = $path.DIRECTORY_SEPARATOR.$name ;
             if (is_dir($new_path)) {
                 recursive_filter($new_path) ;
             } elsif (file_size($new_path) > 10000) {
                 echo $new_path ;
             }
         }
     }
     $themedir = __DIR__.'/theme';
     recursive_filter( $themedir ) ;

    Ce n’était pas plus court, mais pas plus long. On peut entrer dans de longs discours pour savoir si c’était plus simple ou plus complexe, mieux struc­turé ou non, mais la valeur ajou­tée du nouveau code ne saute pas aux yeux côté simpli­cité je trouve.

    À titre d’exemple, en ruby (« find » est dans la lib stan­dard) :

    require 'find'
     theme_dir = File.dirname(__FILE__)."/theme"
     Find.find(theme_dir) do |path|
         next if FileTest.directory?(path)
         puts path if FileTest.size(path) > 10000
     end

    Ou sur Python :

    import os
     themedir = os.path.join(os.path.dirname(__file__), "theme")
     def find_files(directory):
       for root, dirs, files in os.walk(directory):
         for basename in files:
           if not file.startswith("."):
             filename = os.path.join(root, basename)
             yield filenames
     for filename in find_file(themedir)
       if os.path.getsize(filename) > 10000 :
         print filename

    Il peut y avoir des fautes et il peut y avoir mieux dans les diffé­rents langages, et peu importe le nombre de lignes, mais dans les quatre codes précé­dents c’est bien le premier qui me semble complexe.

    Il y a bien d’autres occa­sions de trou­ver PHP « simple », mais pas les itéra­teurs de la SPL.

  • X-UA-Compa­tible : IE=Edge

    Je rage devant tous ces affi­cio­na­dos qui veulent être à la pointe et qui tout en crachant sur les mode de compa­ti­bi­lité et doctype swit­ching, forcent les futurs navi­ga­teurs à repro­duire les mêmes problèmes.

    N’uti­li­sez pas « X-UA-Compa­tible : IE=Edge ». C’est inutile et contre-produc­tif.

    Un pari risqué sur l’ave­nir

    Avec cette entête, on déclare expli­ci­te­ment une compa­ti­bi­lité avec tout moteur Inter­net Explo­rer futur. Celui de dans deux ans ou celui de dans cinq ans.

    Avec le passé des navi­ga­teurs, l’his­toire du doctype swit­ching, les modes de compa­ti­bi­lité et les ruptures de compa­ti­bi­lité diverses, c’est quand même un pari qui semble perdu d’avance.

    La ques­tion n’est pas telle­ment de savoir si vous codez « stan­dard », mais que le stan­dard peut évoluer ou se préci­ser, que certaines fonc­tion­na­li­tés peuvent être aban­don­nées, ou que certains bugs peuvent être corri­gés en intro­dui­sant des effets de bords sur vos pages. Même ceux qui codent « stan­dard » jusqu’au bout des ongles choi­sissent en géné­ral tel ou tel montage pour contour­ner les manques ou diffé­rences des navi­ga­teurs et que ces manques et diffé­rences évoluent avec le temps.

    Le problème n’est pas vos pages ou votre code, c’est l’en­vi­ron­ne­ment autour.

    Et encore, je laisse de côté ceux qui s’at­tachent telle­ment fort aux stan­dards qu’ils finissent pas n’uti­li­ser que des fonc­tion­na­li­tés avant leur stabi­li­sa­tion voire avec préfixées dans des versions de test. Eux *vont* des problèmes, mais ils le méritent.

    … (le plus souvent) inutile

    Le système est fait pour trois cas :

    • Permettre à un site codé pour une ancienne version d’In­ter­net Explo­rer et non compa­tible avec les suivantes, de bloquer le moteur de rendu à cette version précise.
    • Permettre à un intra­net ou à un site autre­fois liste noire pour incom­pa­ti­bi­lité histo­rique, après une refonte et en atten­dant d’être retiré des listes noires, de décla­rer pouvoir/vouloir désor­mais utili­ser les versions récentes du moteur d’In­ter­net Explo­rer.
    • Permettre à un site incom­pa­tible avec les anciennes versions d’In­ter­net Explo­rer d’être embarqué via une iframe dans un site non compa­tible (soit sur liste noire, soit qui demande expli­ci­te­ment une ancienne version du moteur)

    Si vous n’êtes pas dans un de ces trois cas, il est très probable que vous n’ayez pas besoin d’une entête X-UA-Compa­tible. Pour utili­ser la dernière version respec­tueuse des normes du moteur d’In­ter­net Explo­rer, il vous suffit de coder des pages valides avec un doctype correct et sans prologue XML.

    Sauf à être dans un des cas précé­dents, le X-UA-Compa­tible n’ap­por­tera rien de plus à part les effets néga­tifs qui seront décrits plus haut.

    Mais si vous souhai­tez quand même un opt-in

    Même si vous vous retrou­vez dans un des trois cas décrits plus haut, ou si vous souhai­tez quand même être expli­cite, se décla­rer expli­ci­te­ment compa­tible avec de futures versions qui n’ont même pas commencé à voir le jour est toujours aussi risqué.

    Vous avez testé avec IE10 ? alors décla­rez IE=10. Vous n’au­rez rien de moins que prévu, même si un IE11 ou un IE12 sortent. Si ces prochains n’in­tro­duisent pas de problème de compa­ti­bi­lité, il est probable que vous béné­fi­cie­rez de toutes façons du nouveau moteur. À l’in­verse, s’il y a rupture de compa­ti­bi­lité majeure, vous aurez proba­ble­ment moins de problèmes avec un mode de compa­ti­bi­lité « IE=10 » qu’a­vec un nouveau moteur incom­pa­tible « IE=Edge ».

    Vous avez tout à gagner à être honnête et à décla­rer la compa­ti­bi­lité réelle de vos pages. Au pire le site déve­loppé pour IE10 conti­nuera d’être vu avec un moteur compa­tible avec ce que propo­sait IE10. Est-ce vrai­ment si peu souhai­table ?

    Si ces pages sont toujours en main­te­nance active lors d’une nouvelle version du moteur IE *et* que ce moteur est compa­tible avec la version précé­dente *et* pour­tant qu’il décide de passer en compa­ti­bi­lité quand vous préci­sez IE=[la_version_préce­dente] (vous remarque­rez que les deux dernières condi­tions sont assez inco­hé­rentes entre elles), alors il vous sera facile de mettre à jour la décla­ra­tion. L’avan­tage c’est que si une de ces hypo­thèses devient inva­lide à l’insu de votre plein gré, au moins ça conti­nuera à fonc­tion­ner comme avant et comme prévu.

    À quoi ça sert alors ?

    Le mode IE=Edge est utile à condi­tion que vous testiez toutes les pages diffé­rentes à chaque nouvelle beta d’In­ter­net Explo­rer, et ce tant qu’au moins une de vos pages est en ligne (chez vous ou chez un tiers).

    Ça peut être votre cas si vous avez un petit site et que vous avez du temps à y passer. C’est toute­fois un pari sur le fait que vous restiez en main­te­nance active et que vous aurez du temps à perdre à l’ave­nir. Je ne compte pas le nombre d’ap­pli­ca­tions ou de sites aban­don­nés qui sont en théo­rie en main­te­nance ou dont on pensait qu’ils seraient encore en main­te­nance.

    Le plus souvent IE=Edge c’est surtout pour les sites en déve­lop­pe­ment, et ça devrait y rester cantonné.

    Mon problème n’est pas tant que vous choi­sis­siez d’uti­li­ser une décla­ra­tion IE=Edge, à vrai dire vous faites ce que bon vous semble et comme je n’uti­lise pas IE je n’au­rai pas à en souf­frir. Mon problème c’est quand ça arrive en recom­man­da­tion ou en bonne pratique à desti­na­tion des déve­lop­peurs. Là désolé de vous le dire, mais vous avez fauté. Vous enga­gez forte­ment un tiers à quelque chose dont je doute qu’il ait saisi toutes les impli­ca­tions, et ce pour un béné­fice qui reste fran­che­ment à démon­trer.

    Petite pensée pour l’ave­nir

    Si trop de gens utilisent IE=Edge, et qu’In­ter­net Explo­rer se sent obligé d’in­tro­duire une rupture de compa­ti­bi­lité signi­fi­ca­tive, quelle(s) solu­tion(s) leur restera-t-il ?

    • Casser la compa­ti­bi­lité, mais ils ont prouvé que dans leur cas spéci­fique, sachant que leur moteur était forte­ment utilisé aussi pour les appli­ca­tions natives et pas que le Web, c’était fran­che­ment nocif
    • Intro­duire un nouveau méca­nisme d’auto-détec­tion bancal comme le doctype swit­ching et complexi­fier encore plus le déve­lop­pe­ment web qui est déjà bien tordu à ce niveau si on prend en compte tous les modes de compa­ti­bi­lité
    • Consi­dé­rer que IE=Edge corres­pond en fait à IE=13 (par exemple) et créer un nouveau mot clef pour le rempla­cer, ou ajou­ter un suffixe expli­cite ; ceux qui ont joué avec les User-Agent savent combien ce mode de fonc­tion­ne­ment a ses limites

    Même du point de vue du web, en trichant à ce niveau vous n’ai­dez pas le web à rester à jour, vous risquez surtout de le casser ou de le complexi­fier. À bon enten­deur…

  • Un peu de courage sur les formu­laires

    La fainéan­tise est une superbe qualité pour un infor­ma­ti­cien. C’est ce qui fait que l’in­for­ma­ti­cien est capable de coder 20 minutes un script pour lui auto­ma­ti­ser une tâche qui prend 5 minutes de boulot tous les mois.

    Main­te­nant parfois c’est abusé, et c’est trop souvent le cas sur les formu­laires.

    [saisir le ] nom utilisé lors de votre commande en majuscule et sans accent [et] le téléphone fixe actuel

    Sans rire, préci­ser « en majus­cules et sans accents » en gras c’est que le problème a été repéré lors de la concep­tion du formu­laire, ou que les retours clients en assis­tance télé­pho­nique ont été assez impor­tants pour justi­fier la modi­fi­ca­tion du texte.

    Dans ce cas, vous ne croyez pas que la saisie devrait être libre ? À votre appli­ca­tion de mettre en majus­cules et de reti­rer les accents si ça lui chante, mais ne faites pas faire votre boulot à l’uti­li­sa­teur.

    Le pire c’est pour le numéro de télé­phone parce que je l’ai vu dans *tous* les formu­laires d’opé­ra­teurs télé­pho­nie et inter­net. Le champ est bloqué à dix carac­tères, donc un numéro de télé­phone sans espaces.

    Bon, c’est juste agaçant à la saisie, mais c’est surtout inuti­li­sable au copier-coller car quasi­ment tout le reste de la France utilise des espaces comme sépa­ra­teur. C’est donc à l’uti­li­sa­teur d’al­ler copier-coller le numéro dans un éditeur de texte pour reti­rer les espace et le copier-coller à nouveau dans le formu­laire.

    Fran­che­ment, le déve­lop­peur n’avait pas la capa­cité de reti­rer lui même espaces et ponc­tua­tion côté serveur ? Ça coutait vrai­ment trop cher ?

    Déve­lop­peurs : Soyez fainéants, mais ne faites pas faire votre boulot par vos utili­sa­teurs !

  • Sites à page unique

    J’ai beau­coup aimé le site de Bayrou, et j’ai décou­vert il y a quelques temps celui de Troll d’idées. Je vous encou­rage à explo­rer au moins le second.

    Il y a un petit mouve­ment vers les sites à page unique avec des ancres et des sépa­ra­teurs visuels pour navi­guer. Je dois avouer que c’est génia­lis­sime quand c’est bien pensé et bien travaillé, mais ça demande à priori un inves­tis­se­ment en concep­tion large­ment supé­rieur au site habi­tuel. Sans cet inves­tis­se­ment, le résul­tat est rare­ment au niveau.

    Mon problème c’est que sur ces deux sites, il manque une version mobile. Est-ce une bonne pratique sur mobile ? Ce genre de design résis­tera-t-il au temps ou restera-t-il un effet de mode comme furent en leur temps les effets de para­laxe (dont Troll d’idées abuse d’ailleurs un peu) ?

    Connais­sez-vous un site qui fait de même avec en plus du respon­sive design ?