Catégorie : Technique

  • Sur-Javas­cript

    J’avais regardé CoffeeS­cript il y a long­temps, mais sans être convaincu. Si j’ai besoin de faire du Javas­cript, je fais du Javas­cript. Coffee apporte bien des amélio­ra­tions sur la syntaxe, mais le langage n’est lui-même pas parfait et je doute que le rapport béné­fice/coût soit très élevé.

    J’en ai à peu près autant au service de Dart même si, sans réel­le­ment percer pourquoi, j’ai l’im­pres­sion qu’ils ont réussi à mieux se déta­cher de Javas­cript, et donc avoir un vrai langage distinct qui « compile » du Javas­cript (c’est bien l’es­prit de Coffee aussi, mais je n’ai pas eu ce ressenti).

    Je suis proba­ble­ment plus ouvert à TypeS­cript ou Traceur, qui sont plus proches du langage d’ori­gine et dont les objec­tifs et syntaxes sont presque « le prochain Javas­cript ». On a plutôt une couche de compa­ti­bi­lité arrière, et c’est un bon système.

    L’im­pres­sion que ça donne est tout de même qu’ils ont fait leurs propres exten­sions qui n’ap­par­tiennent qu’à eux.

    Est-ce qu’on a quelque part un projet simi­laire, qui implé­mente un maxi­mum de nouveau­tés des futurs EcmaS­cript mais qui évite d’ajou­ter trop de syntaxes diver­gentes au cœur du langage ?

    Quelles sont vos expé­riences avec l’un ou l’autre de ces systèmes ?

  • The star­tup free­lan­cer

    Partage de lecture:

    I deci­ded to stop doing the office job thing and star­ted doing exactly what I want with my time, seven days a week.

    […]

    I’m also a free­lance program­mer. I help early stage star­tups get their MVPs out the door. That means I get invol­ved when the first server needs to be set up, the first data­base instal­led, the first repo crea­ted and the first line of code hastily banged out. There’s some­thing about those first moments of a star­tup’s exis­tence that is hard to repro­duce – the thrill of a newborn idea coupled with the urgency of the penni­less.

    The star­tup free­lan­cer — Vassili van der Mersch

  • Flysys­tem – accès aux systèmes de fichier au PHP

    Petite décou­verte récente et sympa : Flysys­tem. Une biblio­thèque de code PHP qui présente une abstrac­tion assez simple et sympa autour des systèmes de fichier locaux, S3, drop­box, FTP, …

  • Docu­men­ta­tion PHP

    Quelques (nombreux) écrans de présen­ta­tion de Willian Durand à propos de PHP

    Je ne sais pas à qui est destiné cette docu­men­ta­tion, mais c’est un boulot énorme et très bien fait de collecte, analyse et présen­ta­tion des bonnes pratiques. Vous devriez passer dessus et prendre du temps à lire même si vous travaillez déjà avec PHP au jour le jour.

    Pour m’être frotté à ce genre d’exer­cice, j’ai rare­ment vu un résul­tat aussi bon.

    Il y a une version pour la suite qui parle plus parti­cu­liè­re­ment de Symfony, mais moins essen­tielle à mon avis.

  • Gérer les services home­brew sur Mac OS X

    Laun­chRo­cket : Petit soft qui rajoute une page dans l’ap­pli de préfé­rences Mac OS X. De là vous pouvez gérer les services instal­lés via Home­brew : les arrê­ter, les démar­rer.

    Je ne suis pas convaincu par leur expli­ca­tion sur le côté sécu­rité donc je ne coche­rai pas le « run as root » mais sur le reste c’est assez pratique.

  • Offshore & star­tup

    Je recherche des star­tups Europe/US dont une partie de l’équipe tech­nique a été basée hors Europe/US pour des raisons de coûts.

    • Est-ce que ça existe ? Vous avez des noms ?
    • Si vous l’avez vécu (quel que soit le côté), quelles en ont été les enjeux, les diffi­cul­tés et les résul­tats ?
    • Si vous avez choisi de ne pas le faire, pourquoi ?

    Note : Je ne parle pas de régie offshore mais bien de gens internes à la star­tup.


    I am looking for Euro­pean/US star­tups in which part of the team has been loca­ted outside Europe/US to lower the costs.

    • Did you heard about such expe­riences ? Do you have names ?
    • If you lived it  (whate­ver the side), what where the stakes, the diffi­cul­ties and the results ?
    • If you choose not to go this way: why ?

    Note: I am not talking about offshore contrac­ting but about people who are direct employees of the star­tup

  • Lien vers du Javas­cript

    Problé­ma­tique du jour : Inter­cep­ter l’ap­pel à des liens via Javas­cript.

    Mon cas d’usage : J’ai des conte­nus (images, vidéos, audio, polices de carac­tères) stockés côté client (indexedDB, webSQL ou DOMS­to­rage) que je souhaite insé­rer dans mes pages.

    (billet mis à jour au fur et à mesure des réponses)

    Quelques solu­tions :

    Data:URI

    Je récu­père ma donnée, je la trans­forme en base64, et je remplace le lien stan­dard par un lien en data:uri.

    Deux défauts : Je stocke N fois la donnée dans le DOM où N est le nombre d’ap­pa­ri­tion de l’image ou de la ressource dans mes pages HTML/CSS. Pour ne rien gâcher, on stocke en base64 donc avec 30% de poids en plus. De plus, même si je n’ai pas de test à montrer, on s’est déjà pris les pieds dans le tapis à cause de très mauvaises perfor­mances de pages avec beau­coup de data:uri, spécia­le­ment sur Fire­fox (proba­ble­ment sur les polices de carac­tères)

    Blob + crea­teObjectURL

    Je récu­père ma donnée, je créé un Blob à partir de cette donnée, je passe par URL.crea­teObjectURL pour créer une URL dédiée et j’uti­lise cette dernière quand je réfé­rence ma ressource.

    On résout les problèmes du data:uri mais on se coupe de IE 9, IE mobile et iOS 5. Pas gravis­sime mais j’au­rai préféré éviter.

    Par contre la solu­tion ne fonc­tion­nera de toutes façons pas pour les images ou polices de carac­tères réfé­ren­cées depuis les CSS (sauf à construire les CSS via Javas­cript mais là on entre dans des usines à gaz).

    Cas spéci­fique des vidéo et audio

    Les deux solu­tions me posent de toutes façons un sérieux problème pour les vidéo et les audio, qui peuvent être de gros volume. Je me vois mal sortir d’in­dexedDB des dizaines de méga­oc­tets (au mieux) pour construire un blob juste et avoir une URL dans ma balise HTML sans même savoir si l’uti­li­sa­teur tentera effec­ti­ve­ment de lire la vidéo ou le fichier audio.

    Pour les vidéos et les audio (mais unique­ment ces deux types de contenu) je peux réflé­chir à mettre un lien vers une vidéo de taille quasi nulle et le chan­ger dès que la vidéo est acti­vée. J’ai toute­fois un peu peur des effets de bords. Il va falloir aussi bosser en amont pour que la première image s’af­fiche bien dans le lecteur vidéo malgré l’ab­sence de la vidéo complète.

    Bidouille

    Pour l’ins­tant ma solu­tion serait :

    • Pour les images et polices de carac­tères dans les CSS : data:uri. En espé­rant que la CSS ne contient pas trop de ressources inutiles ou trop de liens vers la même ressource.
      • Au pire : Géné­rer la CSS en Javas­cript avec des liens obte­nus par crea­teObjectUrl, l’in­sé­rer dans le DOM manuel­le­ment
    • Pour les images dans le code HTML : crea­teObjectURL si possible.
      • Véri­fier tout de même si le data:uri n’est pas plus simple. La diffé­rence entre les deux sera assez faible si les images ne sont pas répé­tées plusieurs fois.
    • Pour les audio et vidéo : Désac­ti­ver le preload, rensei­gner le lien via crea­teObjectURL qu’au lance­ment de la vidéo. Pour les vidéo, penser à créer une image d’at­tente avec l’at­tri­but poster.

    Ça reste fran­che­ment du brico­lage je trouve, et ça va néces­si­ter plein de javas­cript pour géné­rer tout ça.

    Dans mon monde idéal

    Dans l’idéal j’au­rai bien aimé avoir une sorte de faux serveur web en javas­cript depuis le navi­ga­teur. Genre toute url en « local-js://xxxxx » fait appel à un objet Javas­cript qui répond ensuite ce qu’il veut.

    À défaut, un URL.createObjectURL( 'text/html', function() { return bindata; } ) serait bien pratique : Le navi­ga­teur n’ap­pe­lant la fonc­tion pour récu­pé­rer le contenu que quand il cherche à accé­der au dit contenu, au lieu de lui donner tout le contenu par avance au cas où il en aurait besoin.

    Quelqu’un a des pistes pour moi ?

  • [blog] Suivi des discus­sions

    Vieux sujet traîné en commun avec Karl et David (mais pas que) : Faire en sorte de décen­tra­li­ser les blogs et les discus­sions qui s’en suivent.

    L’his­toire

    Par le passé nous avions Track­back. On envoyait une noti­fi­ca­tion aux conte­nus liés, avec le lien vers notre contenu, le nom du blog, un extrait et un titre. Le codage carac­tère était globa­le­ment mal géré, les titres et extraits se sont révé­lés globa­le­ment inutiles voire contre-produc­tifs, mais c’était implé­menté un peu partout et ça, tech­nique­ment, ça fonc­tion­nait assez bien.

    Pour faire court, les gens conti­nuaient à commen­ter dans le billet d’ori­gine plutôt que de commen­ter dans un nouveau billet chez eux. Par contre les track­backs étaient très utili­sés pour le spam, avec au final un ratio signal/bruit vrai­ment mauvais et donc l’aban­don du système.

    Il y a aussi eu Ping­back. Système simi­laire mais avec une auto­dé­cou­verte plus sympa et l’ar­rêt de trans­mis­sion des titres et extraits. Vu que ces derniers n’étaient jamais person­na­li­sés spéci­fique­ment pour la noti­fi­ca­tion, autant les récu­pé­rer direc­te­ment à partir du lien si jamais on en a besoin.

    Diffé­rence, Ping­back propo­sait de véri­fier la présence d’un lien sortant dans le contenu tiers avant de vali­der une liai­son entrante. Cette diffé­rence fut peu impac­tante au finale. L’idée a aussi été implé­men­tée dans les track­back mais les spameurs ont vite appris à faire des liens sortants pour poster leur spam, quitte à faire des liens invi­sibles pour le lecteur ou des liens tempo­raires suppri­més après l’opé­ra­tion.

    Je trouve aussi l’idée discu­table dans le sens où la valeur ajou­tée du lien n’est pas la même dans les deux sens. Si je réalise analyse sur une dépêche AFP, il peut être utile d’avoir une noti­fi­ca­tion chez plusieurs personnes qui reprennent verba­tim cette dépêche, mais cela n’au­rait aucun sens d’en lier plus d’un à partir de mon analyse (ce que la véri­fi­ca­tion de ping­back impose).

    Wiki­pe­dia cite aussi Refback. Je ne l’avais jamais vu forma­lisé sous ce nom mais la pratique est connue : Explo­rer les entêtes HTTP Refer­rer pour repé­rer de nouveaux liens entrants auto­ma­tique­ment. Les spam­meurs jouaient à faus­ser ces entêtes depuis long­temps donc là aussi ça n’a pas changé grand chose.

    Tous ces systèmes ne spéci­fient que la noti­fi­ca­tion. Il s’agit de parler un langage commun au niveau de cette noti­fi­ca­tion pour que ce soit plus simple pour tout le monde. Il reste à l’édi­teur du site lié de choi­sir ce qu’il fait de la noti­fi­ca­tion : L’af­fi­cher auto­ma­tique­ment avec une modé­ra­tion a poste­riori, gérer une liste blanche, mettre un système anti-spam auto­ma­tisé, ou même faire une vali­da­tion manuelle a priori.

    Il y a aussi Salmon, très orienté commen­taire, mais extrê­me­ment complexe et quasi­ment pas implé­menté (les deux sont certai­ne­ment liés). J’ai du mal à voir ce proto­cole réel­le­ment implé­menté partout.

    Webmen­tion

    Aujourd’­hui on parle de Webmen­tion. Même séman­tique que Ping­back, même méca­nismes d’au­to­dé­cou­vertes (seule la valeur de « rel » change), même requête initiale et mêmes para­mètres (seuls les noms des para­mètres changent légè­re­ment pour reti­rer les trois derniers carac­tères).

    Les diffé­rences tiennent exclu­si­ve­ment dans la préci­sion de la méthode HTTP à utili­ser (POST) et dans les codes de retours (Webmen­tion utilise les codes HTTP stan­dards et un lien vers la mention créée, là où Ping­back renvoie une code de retour dans le corps de la réponse).

    C’est tech­nique­ment plus satis­fai­sant pour les affi­cio­na­dos de HTTP mais la valeur ajou­tée fonc­tion­nelle est nulle. On ne fait rien de plus, rien de moins, et pas vrai­ment diffé­rem­ment. J’échoue d’ailleurs à

    Sachant que ping­back a une implé­men­ta­tion dispo­nible sur à peu près tous les gros moteurs de blogs, je ne trouve pas que cela justi­fie de lancer un nouveau proto­cole. En l’état c’est d’une utilité encore plus faible que ce que j’ima­gi­nais initia­le­ment. Pas de quoi m’em­bê­ter à l’im­plé­men­ter.

    En fait à choi­sir entre ping­back et webmen­tion, une fonc­tion­na­lité forte de ping­back est l’at­tri­but ping­back, qui permet­trait de faire une noti­fi­ca­tion auto­ma­tique suivant ce dernier proto­cole, et donc de rempla­cer (en opt-in) l’en­tête HTTP Refer­rer là où elle est bloquée par HTTPS. Cette possi­bi­lité me semble bien plus utile que le respect théo­rique de HTTP (je sens que je vais atti­rer pas mal de commen­taires avec cette phrase mais j’as­sume).

    Suivi des discus­sion

    Et puis j’ai l’im­pres­sion qu’on regresse un peu par rapport au track­back initial. Ping­back et Webmen­tion noti­fient d’un lien entrant, pas d’un suivi de discus­sion.

    Je peux avoir un lien entrant sans aucun ajout à la discus­sion, juste un relai. Inver­se­ment je peux avoir un nouveau contenu qui apporte à la discus­sion et qui méri­te­rait de noti­fier plusieurs conte­nus déjà exis­tant sans forcé­ment s’im­po­ser de faire des liens.

    Autre commen­taire de Karl : Certains aime­ront avoir plus qu’un lien, avec un petit texte sur le pourquoi de la noti­fi­ca­tion, de ce qu’ajoute ce nouveau contenu au sujet déjà en cours – par exemple pour orien­ter la modé­ra­tion et le choix de (non-)publi­ca­tion. Pas forcé­ment perti­nent de le rendre obli­ga­toire (ça empê­che­rait pas mal d’au­to­ma­tismes) mais le rendre possible serait utile.

    Et si je n’im­pose pas de lien dans le contenu noti­fié, il faudra que je puisse en authen­ti­fier l’ori­gine. Un système de signa­ture simpliste devrait suffire mais sera néces­saire.

    Faire une spéci­fi­ca­tion qui implé­mente ça demande deux heures tout au plus. Rien n’em­pêche même qu’elle soit compa­tible avec Webmen­tion et qu’on puisse avoir un point d’en­trée unique. Simple­ment ça n’a de sens que si je ne suis pas le seul à jouer.

    David, Karl, les autres ? vous en pensez quoi ?

  • The lie of the API

    Quelques réponses sur un billet qui a beau­coup circulé : The lie of the API.

    Ça flatte beau­coup la mouvance HATEOAS mais je n’ac­croche pas. Même avec des clients très smart, impos­sible de faire un même site pour les visites « navi­ga­teur » et les accès « API ».

    Le logi­ciel client de l’API ne sera jamais assez intel­li­gent pour comprendre autant le contexte que l’hu­main derrière son navi­ga­teur, et jamais assez souple pour gérer des chan­ge­ments non prévus.

    Donc partons de notre biblio­thèque qui expose des collec­tions avec des conte­nus, chacun reliés à des auteurs.

    Et si demain je change mes repré­sen­ta­tions pour ne plus mettre les bio des auteurs dans la fiche du livre direc­te­ment ? Certes tech­nique­ment il est possible de faire un robot qui sache récu­pé­rer cette bio sur la fiche de l’au­teur, mais quelle est la proba­bi­lité que les robots actuels gèrent le chan­ge­ment ?

    Et si demain le site web est changé pour que le point d’en­trée premier soit l’au­teur ? Le logi­ciel saura-t-il recher­cher un livre dont il ne connait pas l’adresse ?

    Et si demain je change le système de clas­si­fi­ca­tion des livres pour passer de BISAC à la CLIL française ? Quelle proba­bi­lité que le robot et l’ap­pli­ca­tif derrière gère ça de façon trans­pa­rente ?

    La partie desti­née au robot (qu’on nomme géné­ra­le­ment « API ») n’a simple­ment pas les mêmes besoins que la partie desti­née aux humains (qu’on nomme souvent « web »). On peut faire conci­lier les deux au début, mais ça va casser au fur et à mesure des évolu­tions de la partie desti­née aux humains.

    Tout ça pour quoi ? La satis­fac­tion intel­lec­tuelle du déve­lop­peur qui se dit qu’il corres­pond au schéma idéal du web. La valeur ajou­tée ne me semble pas justi­fier le risque.

    C’est d’au­tant plus vrai qu’en réalité les clients qui codent des robots hyper­me­dia corrects il n’y en a pas tant que ça. Rapi­de­ment des tiers vont coder des robots en faisant de l’in­gé­nie­rie inverse sur les adresses, les iden­ti­fiants, la struc­ture, les données. Ça sera peut être de leur faute, mais ça va casser si vous faites des chan­ge­ments en vous repo­sant unique­ment sur le côté hyper­me­dia.

    D’où la ques­tion : Souhai­tez-vous que ça fonc­tionne ou avoir raison ?

  • La fin d’AdB­lock ? Google prend le contrôle exclu­sif des exten­sions Chrome

    La fin d’AdB­lock ? Google prend le contrôle exclu­sif des exten­sions Chrome. Le titre est là pour faire du buzz mais le problème est réel : Celui du contrôle de l’éco­sys­tème et de l’as­sujet­tis­se­ment à une ou plusieurs multi­na­tio­nale qui décident ce qu’on a le droit ou non de faire sur le web, avec nos conte­nus.

    Rappe­lez-vous qu’en mars de l’an­née dernière Google qui menaçait de mettre des appli­ca­tions Android dehors si elles ne passaient pas par la solu­tion de paie­ment inté­grée de Google (avec les commis­sions adéquates). Rappe­lez-vous encore aujourd’­hui Google qui bloque les reve­nus publi­ci­taires dès qu’on voit un bout de peau dénu­dée sur le site web.

    Le fait de pouvoir faire ou pas ce qu’on veut sur la porte d’en­trée sur le web est juste un enjeu de société. À la limite ne pas pouvoir placer d’ex­ten­sions est moins dange­reux : on ne risque pas de se voir orienté incons­ciem­ment par ce qui est présent.