Catégorie : Technique

  • Which program­ming language should I learn first?

    Histoire de rire un peu (jaune) :

    • To get a guaran­teed, mediocre, but well paying job writing finan­cial appli­ca­tions in a cubicle under fluo­res­cent lights: Java.
    • To do the same thing with certi­fi­ca­tions and letters after your name: C#

    Which program­ming language should I learn first? Et vous, quel langage appre­nez-vous ?

  • Worried about online porn? Don’t regu­late the net – regu­late your kids

    Je n’ai jamais envi­sagé ça ainsi, mais ça prend vite du sens : Le problème avec le Porno c’est qu’on essaye de régu­ler le réseau au lieu de régu­ler les enfants voire les parents.

    Fran­che­ment, est-il sain de brider, surveiller, et modi­fier la nature même du réseau et de ce qu’il peut appor­ter unique­ment pour permettre à des parents d’aban­don­ner leur surveillance et de lais­ser l’ou­til dans les mains de leurs enfants sans avoir à opérer leur rôle ?

    Worried about online porn? Don’t regu­late the net – regu­late your kids

    Jusqu’à présent j’ai toujours consi­déré que le risque était celui d’une domi­na­tion de l’ordre moral mais cela pour­rait être encore plus idiot : Sommes-nous en train de casser ces superbes outils que sont Inter­net et le web juste pour donner un peu plus de confort à quelques uns ?

  • More Than 55,000 Twit­ter Account User­names & Pass­words Are Hacked And Leaked

    Quand on trouve un article annonçant 55 000 mots de passe de comptes révé­lés au grand jour, je ne me plains pas de la sécu­rité des mots de passe ou de celle du service. Dans la liste on trouve des mots de passe complexes, et rien ne permet d’af­fir­mer qu’il y a eu une négli­gence coupable de la part de twit­ter.

    More Than 55,000 Twit­ter Account User­names & Pass­words Are Hacked And Leaked

    C’est bien joli d’in­ci­ter les gens à utili­ser un mot de passe diffé­rent par service, à ne pas les sauve­gar­der, d’en utili­ser des complexes et en plus de les chan­ger souvent, mais c’est propre­ment irréa­liste

    La solu­tion on la trouve dans WebID, dans Brow­serID, ou même pourquoi pas dans OpenID, malgré tout les défauts liés à ce dernier. Et si on s’y mettait ?

    Ce n’est pas si complexe que ça. Il suffi­rait d’un mouve­ment de la part de la commu­nauté pour avoir des outils simples, ergo­no­miques et utili­sables. La base tech­nique est là.

  • Pour une éduca­tion numé­rique

    L’ar­ticle de Slate ne va pas loin (oui, je sais, cette phrase est un lieu commun) mais le fond me semble des plus impor­tants. Apprendre à program­mer, sera aussi essen­tiel pour l’au­to­no­mie et pour progres­ser demain que ça ne l’écri­ture, la lecture et les mathé­ma­tiques de base pour nos parents ou grands parents.

    Ceux qui savent program­mer seront indé­pen­dants pour réali­ser toutes leurs tâches quoti­diennes. Tout ce qu’ils feront, person­nel­le­ment et profes­sion­nel­le­ment sera numé­rique. Les feuilles de calcul, les tableaux de données et les fichiers texte seront leur lot quoti­dien. Pouvoir faire quelques lignes de code pour extraire leurs infor­ma­tions, auto­ma­ti­ser des trai­te­ments, ou simple­ment manier comme ils souhaitent la profu­sion de données auxquelles ils doivent faire fasse, c’est essen­tiel.

    Nous n’en sommes qu’aux prémisses et pour­tant, comme beau­coup d’in­for­ma­ti­ciens, je me demande régu­liè­re­ment comment font les gens « normaux » pour être auto­nomes sur leurs petites tâches quoti­diennes. Certaines choses sont simple­ment faites en plus de temps, d’autres sont lais­sées pour compte. Aujourd’­hui ces échecs quoti­diens ne provoque pas encore de frus­tra­tion car l’usage de la program­ma­tion n’est même pas envi­sagé ; l’aide d’un infor­ma­ti­cien est vue comme une baguette magique. Demain, avec le tout numé­rique, personne ne sera dupe.

    Mieux, la program­ma­tion leur permet­tra aussi de créer, de ne pas se satis­faire de ce qui existe déjà, de parti­ci­per à l’in­no­va­tion, et de simple­ment n’être limi­tés que par eux-même. N’est-ce pas ce qu’on souhaite pour nos géné­ra­tions futures ?

    Apprendre les rudi­ments de la program­ma­tion aux enfants peut paraitre exagéré mais l’objec­tif n’est pas d’en faire des déve­lop­peurs de métier, pas plus que mes parents n’ont souhai­tés me faire écri­vain ou mathé­ma­ti­cien.

    POURTANT ÇA EXISTait DÉJÀ

    À quel âge faut-il commen­cer ? dans quel cadre ? ce qui est certain c’est que l’ap­proche d’aujourd’­hui, apprendre à se servir de l’ou­til via des logi­ciels tout faits, ne peut que mener à une impasse.

    Je me rappelle que j’étais un privi­lé­gié à avoir gouté aux MO5 ou TO7, avec l’uti­li­sa­tion de Logo pour faire bouger une petite tortue à l’écran, en primaire, à l’école publique. J’ai l’im­pres­sion que ces initia­tives n’existent plus. On préfère faire des mises en gardes concer­nant Face­book, la propriété intel­lec­tuelle ou montrer comment se servir de MS Word à des élèves qui en maitrisent bien plus l’usage d’une façon que réprou­ve­rait n’im­porte quel infor­ma­ti­cien.

    À côté de ça le projet OLPC pour l’Afrique promeut l’usage de Python. Ça n’a l’air de rien, mais si cette tendance se confirme, nous vivrons au crochet de l’Afrique dans quelques géné­ra­tions, à moins qu’on ne conti­nue à les assujet­tir à l’aide des dettes et autres produits finan­ciers (et qu’on reste donc dans du perdant-perdant)

    Un plan numé­rique

    Le pire c’est que les lycéens voire collé­giens qui apprennent d’eux même à faire du PHP ce n’est pas rare. L’école les freine au lieu de les y inci­ter.

    C’est d’un vrai plan numé­rique dont nous avons besoin, un plan qui ne soit pas basé sur de l’équi­pe­ment en tablettes, sur l’usage de logi­ciels en tant qu’ou­tils bloqués, et à partir de profes­seurs qui ne gèrent aucu­ne­ment ces outils.

    Voilà quelques pistes :

    • Éveil à la program­ma­tion en primaire, appren­tis­sage sérieux au collège
    • Inté­gra­tion de la program­ma­tion comme outil au lycée pour toutes les disci­plines (trai­ter des données en histoire-géogra­phie, faire des analyses statis­tiques en français, mathé­ma­tiques, physique, etc.)
    • Utili­sa­tion de logi­ciels, langages et outils sous licence libre (c’est indis­pen­sable pour l’au­to­no­mie)
    • Encou­ra­ger la copie et le travail sur docu­ments, parce que dans un monde d’abon­dance d’in­for­ma­tion et de connais­sance, le tri, la réflexion et le trai­te­ment de l’in­for­ma­tion sont les réels enjeux
    • Dans le même esprit, favo­ri­ser et répandre les travaux et examens où l’ac­cès aux docu­ments est auto­risé voire encou­ragé, parce que ce qui est jugé ne doit pas être la capa­cité à apprendre par coeur et à rete­nir
  • Feds Seized Hip-Hop Site for a Year, Waiting for Proof of Infrin­ge­ment

    S’il fallait encore des exemples des dangers des filtrages et autres inter­rup­tions admi­nis­tra­tives de sites Inter­net, malgré la débacle austra­lienne, en voici un nouveau : Feds Seized Hip-Hop Site for a Year, Waiting for Proof of Infrin­ge­ment

    Un site mis hors ligne par déci­sion admi­nis­tra­tive sans mise en accu­sa­tion ni procès, pendant plus d’un an, sur demande non moti­vée d’en­tre­prises privées, puis retourné à son proprié­taire sans expli­ca­tion autre que l’ab­sence de charges.

    Sur un tout autre plan, le désor­mais célèbre megau­pload ne sera fina­le­ment pas mis en accu­sa­tion. Le site a été mis hors ligne, la boite a été tuée, les données légales et payées proba­ble­ment perdues, tout ça sur ordre des auto­ri­tés US et au final des juges améri­cains avouent qu’il n’y aura certai­ne­ment pas de procès car rien dans toute cette histoire n’est soumis à la loi US. Quoi qu’on pense du site en ques­tion, la possi­bi­lité de tels actes unila­té­raux et sans moti­va­tion judi­ciaire fait froid dans le dos.

  • Extraire la couver­ture d’un fichier ePub

    Les ePubs ont déjà pas mal d’his­to­rique et d’im­plé­men­ta­tions diver­gentes. Je fouillais ces jours ci les diffé­rentes méthodes pour trou­ver l’image de couver­ture. J’ai proba­ble­ment du louper des choses, mais ça servira proba­ble­ment à d’autres.

    Avant toute chose, il faut ouvrir l’ePub à l’aide de unzip

    unzip exemple.epub

    Puis repé­rer l’adresse de l’OPF dans le fichier META-INF/container.xml. Atten­tion à ne pas recher­cher manuel­le­ment un fichier content.opf à la racine de l’ePub. Si c’est souvent là qu’il se trouve, ce n’est pas toujours le cas.

    L’adresse de l’OPF est dans l’at­tri­but @full-path de la balise <rootfile> avec le media-type « appli­ca­tion/oebps-packa­ge+xml ». S’il existe plusieurs corres­pon­dances, c’est la première qui doit être utili­sée.

    <?xml version="1.0"?>
    <container version="1.0"
    xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
    <rootfiles>
    <rootfile full-path="Ops/content.opf"
    media-type="application/oebps-package+xml"/>
    </rootfiles>
    </container>

    C’est dans ce fichier OPF que tout va se passer. Voici mes quatre méthodes pour trou­ver les couver­tures, à essayer par ordre de prio­rité :

    1– Recher­cher une balise <meta> avec pour nom « cover ». Si elle existe, son contenu réfé­rence la balise <item> qui contient la couver­ture.

    En XPath, le chemin de la couver­ture donne­rait quelque chose comme //item[id=//meta[name='cover']/@content]/@href

    <?xml version="1.0" encoding="UTF-8"?>
    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId">
    <metadata xmlns:opf="http://www.idpf.org/2007/opf">
      <meta name="cover" content="img1"/>
    </metadata>
    <manifest>
    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="style" href="style.css" media-type="text/css"/>
    <item id="id1" href="1.html" media-type="application/xhtml+xml"/>
    <item id="id2" href="2.html" media-type="application/xhtml+xml"/>
    <!-- ... -->
    <item id="id13" href="13.html" media-type="application/xhtml+xml"/>
    <item id="img1" href="images/img1.jpg" media-type="image/jpeg"/>
    <item id="img2" href="images/img2.jpg" media-type="image/jpeg"/>
    </manifest>
    </package>

    2– Recher­cher, dans la liste des <item> celui qui a « cover-image » dans son attri­but @properties. Il faut regar­der l’en­semble de l’at­tri­but. Ce dernier peut conte­nir plusieurs valeurs sépa­rées par des espaces.

    En XPath ce serait quelque chose de proche de //item[@properties and contains(@properties,'cover-image')]/@href

    <?xml version="1.0" encoding="UTF-8"?>
    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId">
    <metadata xmlns:opf="http://www.idpf.org/2007/opf"></metadata>
    <manifest>
    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="style" href="style.css" media-type="text/css"/>
    <item id="id1" href="1.html" media-type="application/xhtml+xml"/>
    <item id="id2" href="2.html" media-type="application/xhtml+xml"/>
    <!-- ... -->
    <item id="id13" href="13.html" media-type="application/xhtml+xml"/>
    <item properties="cover-image" id="img1" href="images/img1.jpg" media-type="image/jpeg"/>
    </manifest>
    </package>

    3– Recher­cher, dans la liste des <reference> du <guide>, la première avec « cover » comme attri­but @type. Le fichier réfé­rencé pourra être un fichier XHTML. Dans ce cas je consi­dère comme couver­ture la première <img> de taille égale ou supé­rieure à 200×200 pixels (oui, c’est moche, mais je n’ai pas trouvé mieux).

    En XPath ce serait quelque chose de proche de //reference[@type='cover']/@href en n’ou­bliant pas ensuite qu’on obtient un fichier XHTML et non une image.

    <?xml version="1.0" encoding="UTF-8"?>
    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId">
    <metadata xmlns:opf="http://www.idpf.org/2007/opf"></metadata>
    <manifest>
    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="style" href="style.css" media-type="text/css"/>
    <item id="id1" href="1.html" media-type="application/xhtml+xml"/>
    <!-- ... -->
    <item id="id13" href="13.html" media-type="application/xhtml+xml"/>
    </manifest>
    <guide>
    <reference type="cover" title="Cover image" href="1.html"/>
    </guide>
    </package>

    4– Enfin, à défaut de mieux, je descend les trois premiers <item> du <manifest> jusqu’à trou­ver une <img> de taille égale ou supé­rieure à 200×200 pixels (oui, c’est encore plus moche que précé­dem­ment, je sais)

    <?xml version="1.0" encoding="UTF-8"?>
    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId">
    <metadata xmlns:opf="http://www.idpf.org/2007/opf"></metadata>
    <manifest>
    <item media-type="application/x-dtbncx+xml"id="ncx" href="toc.ncx" />
    <item media-type="text/css" id="style" href="style.css" />
    <item media-type="application/xhtml+xml" id="id1" href="1.html" />
    <item media-type="application/xhtml+xml" id="id2" href="2.html" />
    <item media-type="application/xhtml+xml" id="id3" href="3.html" />
    <item media-type="application/xhtml+xml" id="id4" href="4.html" />
    <!-- ... -->
    <item id="id13" href="13.html" media-type="application/xhtml+xml"/>
    </manifest>
    </package>

    Malgré cela, certains livres n’ont pas de couver­ture, et d’autres auront une couver­ture SVG qui ne sera pas récu­pé­rable, même si c’est rare. Si vous voulez complé­ter ou préci­ser, n’hé­si­tez pas.

  • Speed Index

    Mesu­rer la perfor­mance a toujours été une gageure. On parle de temps de char­ge­ment total de la page, de char­ge­ment de la page au dessus du pli, de temps de premier rendu, de char­ge­ment asyn­chrone, etc. Bref, nous avons déjà une demi douzaine de mesures, mais toutes qui reflètent un état diffé­rent et peu signi­fi­ca­tif.

    Webpa­ge­test semble être enfin arrivé à défi­nir une mesure qui a du sens et qui prend en compte le char­ge­ment progres­sif des pages. Une page qui se charge à 90% immé­dia­te­ment mais qui a un petit bout qui n’ar­rive que bien après reste plus inté­res­sante que celle qui se charge globa­le­ment plus vite mais où tout arrive d’un coup.

    Je reste un peu dubi­ta­tif sur comment ça gère les carrou­sels et autres anima­tions, mais ça m’a l’air assez repré­sen­ta­tif du ressenti utili­sa­teur : à tester.

  • Properly Salting Pass­words, The Case Against Pepper

    Bon, tout le monde devrait le savoir, même si mon expé­rience récente me montre qu’un rappel n’est pas inutile :

    • On ne stocke pas les mots de passe en clair, on les crypte
    • On n’uti­lise pas un chif­fre­ment réver­sible mais une fonc­tion de hachage
    • Un simple hachage ne suffit pas, il faut y ajou­ter un salage
    • Le salage doit être diffé­rent pour chaque mot de passe
    • L’al­go­rithme utilisé doit être lent, comme blow­fish par exemple

    Croyez moi, j’ai encore décou­vert il y a peu que non seule­ment ce n’était pas évident pour tout le monde mais que certains refusent de consi­dé­rer un simple stockage sous forme md5 sans salage comme une erreur et un problème poten­tiel de sécu­rité.

    Mais plus que tout ça, pour moi la règle de base c’est « ne jouez pas avec la sécu­rité ». Si vous n’êtes pas un expert dans la ques­tion : ne créez rien et n’im­plé­men­tez rien vous-même, utili­sez des biblio­thèques de codes toutes faites.

    Et par pitié, ne tentez pas d’amé­lio­rer les choses

    En jouant sur l’in­tui­tion, vous avez toutes les chances d’ar­ri­ver à un résul­tat opposé à celui que vous espé­rez.

    Dans le texte du jour à lire, Properly Salting Pass­words, The Case Against Pepper, nous avons un superbe exemple que je tente d’ex­pliquer en vain à chaque fois qu’on lève le sujet :

    Pour « amélio­rer » la sécu­rité, en plus du salage géré par l’al­go­rithme, propre à chaque mot de passe, certains cherchent à ajou­ter un second salage, global à l’ap­pli­ca­tion. L’idée est que le salage présent à côté du mot de passe dans la base de données ne suffit pas, il faudrait en plus connaitre le salage global utilisé par l’ap­pli­ca­tif, et donc profi­ter d’une faille de sécu­rité plus impor­tante afin d’ex­ploi­ter quoi que ce soit.

    L’idée semble bonne, intui­ti­ve­ment. Malheu­reu­se­ment vous n’êtes proba­ble­ment pas un expert sur l’al­go­rithme blow­fish. Vous ne *savez* pas si ajou­ter le même salage en début ou en fin du mot de passe avant de l’en­voyer à blow­fish ne risque pas de réduire la sécu­rité du résul­tat. Oh, vous avez proba­ble­ment l’in­tui­tion que ce n’est pas le cas, voire vous en êtes certains, mais aucune docu­men­ta­tion de sécu­rité recon­nue comme étant d’au­to­rité ne le précise expli­ci­te­ment.

    Vous en êtes à l’in­tui­tion et vous avez une chance sur deux de vous plan­ter. Au final, est-ce vrai­ment un bon pari ? Ça pour­rait l’être si l’état de l’art du stockage des mots de passe était fran­che­ment insuf­fi­sant et s’il n’y avait aucune méthode stan­dard pour l’amé­lio­rer. Ici il est probable que vous ne soyez pas encore à l’état de l’art (n’uti­li­se­riez-vous pas sha1 ou md5 ?) et cet état de l’art est proba­ble­ment suffi­sant si vous utili­sez suffi­sam­ment d’ité­ra­tions.

    Mais plus que cette ques­tion du double salage, qui est une mauvaise idée pour ce que vous et moi en savons, c’est toute l’im­plé­men­ta­tion que vous ne devriez pas toucher. Utili­sez une biblio­thèque de code éprou­vée, ou mieux : une fonc­tion prévue pour. En PHP nous avons « crypt », qui avec avec l’al­go­rithme blow­fish et suffi­sam­ment d’ité­ra­tions, rendra votre stockage des mots de passe bien plus solide que tout le reste de votre appli­ca­tion.

  • Le logi­ciel de télé­pho­nie mobile qui défie le contrôle des États

    On avance lente­ment, lente­ment. Côté infor­ma­tique cela fait des années que tout devrait être chif­fré et décen­tra­lisé. On sait faire, il ne reste qu’à passer quelques limi­ta­tions admi­nis­tra­tives désuètes et mettre un peu de promo­tion.

    Serval est inté­res­sant mais fina­le­ment il y aurait plus effi­cace à mettre en œuvre à court terme : un chif­frage de bout en bout de la commu­ni­ca­tion.

    Mail, messa­ge­rie, télé­pho­ne… plus rien ne devrait être sans chif­frage. Les risques de dérive on les connait et on les a subit maintes et maintes fois. Les « terro­ristes » eux, savent déjà faire, ce n’est pas le problème.

    Le logi­ciel de télé­pho­nie mobile qui défie le contrôle des États

  • Pas de vote élec­tro­nique à ma prési­den­tielle (ni ailleurs)

    N’ou­bliez pas le danger pour la démo­cra­tie que son les ordi­na­teurs de vote. Si les villes françaises semblent s’être calmées, ce n’est que partie remise. Tôt ou tard des poli­tiques voudront montrer combien ils sont modernes et à la page, et les machines à voter diverses refleu­ri­ront.

    La première action c’est de rendre ces machines inutiles et de renfor­cer l’as­pect citoyen des élec­tions : parti­ci­pez au dépouille­ment ! Ça prend une à deux heures mais c’est un exer­cice que tout le monde devrait vivre pour mieux comprendre le prin­cipe de trans­pa­rence de l’élec­tion. Si le dépouille­ment rede­vient un moment fort ou qu’au moins on arrête de manquer cruel­le­ment de personnes, c’est une des justi­fi­ca­tions du vote élec­tro­nique qui dispa­raît.

    La deuxième action, si votre bureau de vote est enta­ché par cette igno­mi­nie, c’est de faire noter au procès verbal sur place tout ce qui est anor­mal : scellé manquant, machine qui fait des bip sans raison, asses­seur qui accom­pagne un élec­teur dans l’iso­loir au moment du vote pour l’ai­der à voter (y compris pour des « bonnes » raison comme la présence d’un non voyant ou d’une personne âgée), inter­ven­tions tech­niques sur la machine ou rempla­ce­ment de l’équi­pe­ment en cours de vote (quelle qu’en soit la raison), heure ou date non inco­hé­rence, machine ouverte, qui ferme mal ou qui n’est pas verrouillée, impos­si­bi­lité de voter blanc/nul, refus de vous lais­ser assis­ter au dépouille­ment (véri­fi­ca­tion des tickets de sortie), affi­chage inco­hé­rent sur la machine, nombre votes et d’émar­ge­ments diffé­rents lors du dépouille­ment, etc.

    Pour les asses­seurs on peut ajou­ter d’autres anoma­lies poten­tielles : vote déjà ouvert à l’ou­ver­ture du bureau de vote, numéro de série ou de version inco­hé­rent avec les numé­ros atten­dus ou certi­fiés (ou impos­si­bi­lité de le véri­fier), urne non vide au démar­rage (ou impos­si­bi­lité de le véri­fier), codes confi­den­tiels non secrets, décompte ou procé­dures non fonc­tion­nels, ou globa­le­ment inca­pa­cité à réali­ser les opéra­tions prévues au code élec­to­ral pour garan­tir le bon dérou­le­ment de l’élec­tion.

    Il manque cepen­dant cruel­le­ment un docu­ment fait par quelqu’un qui connaît bien les textes et qui liste les points perti­nents à surveiller et à faire noter au procès verbal, avec quelles réfé­rences et quel forma­lisme. Les docu­ments qui trainent sur Inter­net sont soit trop vieux soit rédi­gés par des non-juristes (et ça se voit).

    Qui s’en charge ? ordi­na­teurs de vote semble mort et diffi­cile à utili­ser.