Autoblog de sebsauvage.net

Ce site n'est pas le site officiel de sebsauvage.net
C'est un blog automatisé qui réplique les articles de sebsauvage.net

1,7 est différent de 1,7 ?

vendredi 27 janvier 2012 à 13:25

Je reprend ici un petit article technique que j'avais écrit en anglais pour ma page de snippets Python.

Il sert juste à illustrer le fait que certaines notions en informatique ne sont pas du tout intuitives, et qu'il est utile d'apprendre tout cela. Le domaine du développement logiciel est plein de petits chausses-trappes de ce genre, et voir des développeurs se prendre les pieds dans le tapis me fait sourire (pas méchamment, je vous l'assure).


Je vais ici parler d'opérations élémentaires: Additionner et comparer des nombres. Élémentaires, mais pas évidentes pour autant. Cela a l'air très simple, mais rien qu'à ce niveau, il y a de quoi rendre perplexe le développeur débutant. J'ai choisi ici d'illustrer avec des exemples en langage Python, mais ce problème se reproduit dans la plupart les langages.


Commençons par créer deux variables (en Python):

a = 1.7
b = 0.9 + 0.8

En principe, a et b contiennent la même valeur, on est bien d'accord ? Affichons cela pour vérifier:

print a
print b
Ce qui affiche:
1.7
1.7

Bien. Maintenant comparons a et b:

if a == b:
    print "a et b sont égaux."
else:
    print "a et b sont différents !"

En principe, il doit afficher "a et b sont égaux", n'est-ce pas ? Faux !

a et b sont différents !

Comment est-ce possible ? Comment 1,7 peut-il être différent de 1,7 ?


Il y a deux choses qui sont à l'origine de cette incompréhension et qu'il fondamentale de connaître:

A l'instant même où vous faites a=1.7, la variable a ne contient pas 1,7, mais une approximation binaire de la valeur décimale 1,7, c'est à dire quelque chose du genre: 1.10110011001100110011001100110011... (Avec les bits précédents, il s'agit de la valeur 1.699999999953434)

En binaire, on peut facilement stocker les fractions dont le diviseur est une puissance de deux. Quelques exemples:
Mais dans tous les autres cas, l'ordinateur est bien en mal de stocker la valeur. Vous pouvez tester en ligne avec ce petit convertisseur. L'ordinateur fait donc deux approximations:

De la même manière, quand vous affichez une date:

print datetime.datetime.now()
2012-01-27 21:25:20.904000

Il faut bien garder à l'esprit que "2012-01-27 21:25:20.904000" n'est pas la date: C'est une représentation textuelle d'une donnée codée en binaire dans la mémoire de l'ordinateur. Ce que vous voyez à l'écran n'est pas forcément exactement ce qu'il y a dans la mémoire de l'ordinateur.

Bien sûr, il existe des bibliothèques mathématiques et des codages binaires qui permettent de stocker correctement des nombres décimaux, mais cela fait du travail en plus pour le processeur.

Alors comment comparer nos variables a et b précédentes sans recourir à ces codages spéciaux ? Soit en considérant que les valeurs sont égales si elles sont très proches:

if abs(a-b) < 0.00001:
    print "a et b sont égaux."
else:
    print "a et b sont différents !"

ou même en les convertissant en chaînes de caractères:

if str(a) == str(b):
    print "a et b sont égaux."
else:
    print "a et b sont différents !"


Et oui, l'ordinateur a ses limites, et même quand on développe dans un langage "haut niveau", il est bon de les connaître. ;-)


EDIT: Quelques précisions (signalées par Benjamin et Kévin):

EDIT: Jean-Francois me fait remarquer que je me suis un peu raté sur l'IEEE-754: C'est également un standard à virgule flottante, donc soumis aux mêmes problèmes d'imprécision. La différence est que l'IEEE-754 définit clairement des règles (comme les méthodes d'arrondi à respecter), ce qui permet d'avoir un standard stable et d'avoir les mêmes comportements partout. Pour éviter ces problèmes d'imprécision, il faut recourir à d'autres encodages de nombres, généralement sous forme de bibliothèque (comme GMP ou CLN).

Source : http://sebsauvage.net/rhaa/index.php?2012/01/27/12/25/35-1-7-est-different-de-1-7-


À défaut d'un "En vrac"

mercredi 25 janvier 2012 à 13:35

Je continue à faire évoluer mon petit logiciel Shaarli, qui sert à partager les liens qu'on découvre. J'ai reçu tellement de suggestions d'amélioration que je ne sais plus où donner de la tête :-)

Je viens de sortir une nouvelle version, contenant entre autres des améliorations (QR-Code du permalien, miniatures pour xkcd et pix.toile-libre.org, etc.) et corrections de bugs divers.

Je sais que vous êtes nombreux à regretter mes "En vrac" et que Shaarli ne satisfait pas vraiment certains d'entre vous (qui n'aiment pas le flux continu de liens ou ne veulent pas utiliser un lecteur RSS). Alors à défaut d'un vrai "En vrac", je vous ai ajouté une fonction qui donne en une seule page tous les liens de la veille. Une sorte d'"édition du jour". Vous pouvez également naviguer pour voir les jours précédents.

Bon il y a encore du boulot à faire sur cette page (ajustements CSS, meilleure navigation, flux RSS...), mais j'avoue: Je me suis amusé à créer cette page et son look de vieux journal.

Ceux qui ont installé Shaarli sur leur site peuvent mettre à jour: Supprimez tout le contenu du répertoire de Shaarli (sauf /data) et dézippez la nouvelle version. Comme toujours, Shaarli reste un logiciel libre, opensource et gratuit.


PS: Grâce aux bons soins de quelques internautes, vous retrouverez peut-être Shaarli un de ces jours dans les dépôts Debian et Fedora ;-)

EDIT 22h47: ... et pour ArchLinux aussi :-)

Source : http://sebsauvage.net/rhaa/index.php?2012/01/25/12/35/27-a-defaut-d-un-quot-en-vrac-quot-


CloudFlare: Le syndrôme Akismet ?

lundi 23 janvier 2012 à 14:42

C'est un billet de Gof qui m'a remémoré ce problème.

Certains développeurs sont très forts. Ils savent développer une application techniquement performante et la rendre simple à utiliser. Ajoutez à cela la gratuité, et quel webmaster oserait résister ? C'est ainsi que Google Analytics est présent sur 86% des sites web. C'est ainsi qu'Akismet filtre le spam sur une incroyable quantité de blogs et forums de la planète. Et c'est ainsi que CloudFlare protège des millions de sites.

Une protection globale... ou un risque global ?

CloudFlare est mis en place à l'initiative des webmasters. Il se place entre les internautes et votre site web. Il agit comme un reverse-proxy: Toute requête HTTP destinée à votre site passe d'abord par les serveurs CloudFlare qui l'analysent et éventuellement la bloquent. Le service offert par CloudFlare est trop tentant: Protection contre le spam, les DDOS, statistiques, CDN, cache... le tout dans un service gratuit. Tellement tentant qu'un quart des internautes passent sans le savoir par CloudFlare (Korben, PC-Inpact, Zataz...). Si CloudFlare s'écroule ce sont des centaines de milliers de sites qui vont devenir tout à coup inaccessibles. Ouais, vive la centralisation. On remplace le risque (local) qu'un site s'écroule par un risque global, CloudFlare devenant une cible de plus en plus intéressante à mesure qu'elle grossit. Je ne suis pas certain que ça soit mieux pour internet.

Mais ce n'est pas le seul problème.

Quand CloudFlare se fera pirater (j'ai bien dit "quand", et non "si"), ça sera un problème de grande envergure, à l'image de ce qui s'est passé quand DoubleClick (et quelques autres régies de pub) se sont fait pirater: Tout à coup, des milliers de sites web se sont mis à diffuser des logiciels malveillants à travers leur bandeaux de pub, jusqu'au site du New-York Times.

I'm afraid of Americans... I'm afraid I can't help it

(paroles de David Bowie)

Techniquement, ils ont la possibilité d'injecter tout ce qu'ils veulent dans vos pages. Bien sûr, ils n'ont franchement pas intérêt à le faire, sous peine de perdre la confiance de leurs clients, en masse. Mais est-ce que cela se verrait, disons s'ils injectaient quelque chose pour un visiteur particulier, ayant une IP précise ? Quoi, je suis parano ? Pourquoi pas ? Microsoft l'a bien permis à l'échelle d'un pays entier. Quand on voit la mainmise des USA sur les registry DNS, ou même ce qui s'est passé avec Visa, MasterCard, PayPal, Google ou l'affaire MegaUpload, en quoi CloudFlare est-il plus à l'abri de ce genre de pression... ou de tentation ? Et CloudFlare est pourtant bien plus petit qu'eux.

Gardez bien à l'esprit que CloudFlare voit la totalité des requêtes envoyées à votre site par les internautes. Cela inclue donc également les formulaires, les logins/mots de passe... bref, tout. Et bien sûr, votre propre connexion au panel d'admin web.

Je suis peut-être parano (où est mon chapeau en papier d'alu ?), mais pourquoi devrais-je permettra à une société un accès total et détaillé à tout le trafic de mon site, mots de passe y compris ? Il y a assez de mon hébergeur. Encore pire, pourquoi devrais-je leur donner le pouvoir de bloquer absolument n'importe quel visiteur de mon site ? Pour me protéger ? C'est une question de confiance. Mais dans les faits, Gof lui-même a bien été bloqué par CloudFlare pour avoir ouvert trop d'onglets à la fois. CloudFlare se retrouve avec le même pouvoir qu’Askismet… et la même problématique: Moi (et bien d’autres) s'étaient retrouvé à ne plus pouvoir poster de commentaires sur pratiquement tous les blogs de la planète, sans explication et sans recours. Le problème est similaire avec CloudFlare.

Vous n'y échapperez pas

Côté visiteurs, dites aussi adieu à votre vie privée. CloudFlare est au courant de tout ce que vous faites sur tous les sites utilisant ce service. Je grogne contre Google Analytics et les javascript de Facebook, mais on moins on peut se prémunir de ces derniers avec un plugin comme Ghostery. Avec CloudFlare, vous ne pourrez pas y échapper. Ai-je vraiment envie d'imposer ce traçage supplémentaire à mes visiteurs ? Non.

Remarquez, je suis absolument scotché quand j'apprends qu'un groupe comme Lulzsec a utilisé CloudFlare pour ses serveurs. Tu parles d'une mauvaise blague. Alors suis-je trop parano ? Je vous laisse vous faire votre propre jugement.

En ce qui me concerne, je n'ai pas envie:

Il n'y a pas eu assez de problèmes ? La centralisation excessive (Facebook, Google, Megaupload...) ne nous a rien appris ?

Malgré l'excellence technique de CloudFlare, je ne suis pas prêt à troquer ma liberté d'expression et la vie privée de mes visiteurs contre une commodité. Oui mon site tombera peut-être plus souvent que ceux utilisant CloudFlare, mais j'assume. Question de choix. Question de confiance. Je suis peut-être un peu jusqu’au-boutiste, mais comme Timo (Le Hollandais Volant), Mitsukarenai (Fansub-streaming) ou Hoper, j’ai plutôt envie de réduire les dépendances.

L'avenir me dira si j'ai raison.



PS: Histoire d'être transparent: A l'heure actuelle, les seules dépendances de sebsauvage.net envers des services extérieurs à mon hébergeur sont:

Ce sont les seuls services externes à obtenir votre adresse IP quand vous naviguez sur mon site, et encore, que sur certaines pages. Notez qu'ils ne peuvent en aucun cas vous interdire la navigation sur mon site (je garde le contrôle), et Project Honetpot ne connait que votre adresse IP, pas l'URL que vous visitez sur mon site (pas de HTTP_REFERER). Ce ne sont que des dépendances faibles: Même si ces sites tombent, mon site continuera à fonctionner.


EDIT 25 janvier 2012: J'vous jure, j'y suis pour rien si CloudFlare est tombé !

Source : http://sebsauvage.net/rhaa/index.php?2012/01/23/13/42/15-cloudflare-le-syndrome-akismet-


L'écrasante domination de php

samedi 21 janvier 2012 à 22:56

(Cet article est technique.)

D'après Journal du net (qui reprend un rapport de W3Techs), le langage de programmation php domine le web: Il est présent sur 77,3% des sites web. Et en progression. C'est énorme. ASP.Net (Microsoft) est à 21,7%, et Java à 4%.

Je trouve cela plutôt étonnant étant donné que c'est quand même un langage assez amobifreux (de la contraction de "abominable" et "affreux"): typage faible, syntaxe peu élégante, lib standard bordélique, support unicode inexistant... php est vraiment un amas hétéroclite, comme s'il avait évolué de manière anarchique, avec des excroissances et appendices qui ne collent pas avec le reste du corps. Non je ne suis pas en train de lancer un troll: J'ai moi aussi commis du code php, en milieu professionnel mais aussi pour mes projets perso.

Non seulement le langage est moche, mais une énorme partie des exemples de code qu'on trouve sur internet prônent de mauvaises pratiques, quand elles ne sont pas carrément dangereuses.


Alors pourquoi malgré tout cela autant de sites choisissent php ? Wikipedia ? Programmé en php. Facebook ? En php. Wordpress ? En php. Les exemples sont nombreux.

php est moche, mais ça n'a aucune importance. php suck, but it doesn't matter (très bon article, au passage). On y arrive. Avec de la discipline, on peut faire assez propre. Et puis il y a une quantité absolument formidable de logiciels, bibliothèques et frameworks qui rendent le travail plus simple et plus efficace.

Même si je préfère 100 fois Python, c'est bien php que je choisis majoritairement pour mes projets web perso. Pourquoi ? Simplement parce que le choix d'hébergeurs proposant php est très large. En fait, il est même difficile de trouver des hébergeurs ne supportant pas php (Alors que trouver des hébergeurs qui supportent ASP.Net ou Python est plus difficile). Cela joue en faveur du langage.

Et comme php est finalement assez bas niveau, faire des choses simples reste simple. Vive le KISS. (Quand vous commencez à devoir trouver des solutions de contournement pour faire des choses qui ne sont pas prévues d'origine par certains frameworks évolués, ça peut commencer à devenir folklorique.)


Assez curieusement, si php progresse sur les serveurs, il régresse dans l'index TIOBE (qui tente de mesurer la popularité des langages): php perd 2,13% pendant que C# gagne 2,55%. Allez comprendre.

Tout ça pour en venir à quoi ? Je suis juste surpris de l'énorme popularité de php malgré sa conception.

Si vous apprenez php comme premier langage (Cthulhu vous en préserve !), ne prenez pas pour argent comptant le premier exemple que vous trouverez sur le net. Lisez un peu sur les best-practice et les erreurs de sécurité les plus courantes.


EDIT: Voilà, je vais manger grave.

Source : http://sebsauvage.net/rhaa/index.php?2012/01/21/21/56/48-l-ecrasante-domination-de-php


Don't panic

samedi 21 janvier 2012 à 11:08

Mon site a été inaccessible la nuit passée pendant quelques heures. Rassurez-vous, ce n'est pas un coup du gouvernement américain: Il s'agit juste de mon hébergeur qui a migré les serveurs (ils ont également changé d'adresse IP).

Source : http://sebsauvage.net/rhaa/index.php?2012/01/21/10/08/55-don-t-panic


Megaupload fermé

vendredi 20 janvier 2012 à 09:18

Je ne vais pas répéter tout ce qui a déjà été dit. Voici un bon résumé de l'affaire chez Rue89.

Les noms de domaine ayant été saisis, le site est encore accessible à l'adresse http://109.236.83.66 (EDIT: C'est un faux site), mais j'ignore pour combien de temps. Les responsable de Megaupload ont été arretés et risquent jusqu'à 20 ans 60 ans de prison.

En réponse à cette fermeture, les Anonymous attaquent en masse: Les sites tombent comme des mouches. fbi.gov, wmg.com, bmi.com, universalmusic.com... et même hadopi.fr.

Quel bordel.

Certes les digireants de MegaUpload ne sont pas des enfants de cœur, mais je partage l'avis d'Alda

En soit, la fermeture de Megaupload n’est pas si grave, c’est juste un site qui ferme, il y en aura d’autres pour le remplacer. Au jeu du chat et de la souris c’est toujours les internautes qui gagnent. (Un peu comme moi quand on essaye de jouer au plus con)

Mais la manière dont ça a été fait me dérange profondément. Sans aucun avertissement, un site légal qui dérange une industrie est fermé et ses dirigeants sont arrêtés, traités comme la pire engeance criminelle, accusés de faire tourner une entreprise mafieuse et de comploter contre la toute puissante industrie du disque. Un claquement de doigts dans un bureau d’Universal ou de je ne sais quelle major véreuse et c’est les polices du monde entier qui se mettent en branle.

Vous n’avez pas l’impression que quelque chose cloche ?

Mise à jour 23 janvier 2012: Quelques liens complémentaires:

Source : http://sebsauvage.net/rhaa/index.php?2012/01/20/08/18/16-megaupload-ferme


Orgie de fonds d'écran

jeudi 19 janvier 2012 à 12:51

Ah le plaisir d'avoir un fond d'écran beau et original... voici de quoi vous gaver jusqu'à plus soif.

Si avec ça vous n'en avez pas assez, c'est que vous le faites vraiment exprès !

Source : http://sebsauvage.net/rhaa/index.php?2012/01/19/11/51/46-orgie-de-fonds-d-ecran


Cliquez pour vous faire infecter

mercredi 18 janvier 2012 à 16:21

Il paraît que les auteurs de malwares commencent maintenant à s'attaquer aux enfants, les incitant à installer n'importe quelle connerie.

Hum ?

C'est pas pour relancer un vieux troll (déjà largement battu, le pauvre), mais lâchez un enfant sur un ordinateur:

C'est con, hein, ces petits détails de conception ?

Mais ça ne nous empêchera pas d'entendre encore et encore que c'est trop nul d'avoir à entrer un mot de passe pour installer un logiciel ou faire une modification système. Mais ouais, c'est sûr, c'est trop chiant.

(1) Oui je sais, l'UAC peut être configurée pour demander le mot de passe, mais ce n'est pas la config par défaut.
(2) Oui je sais, il existe des malwares en espace utilisateur, mais ils sont plus rares.


EDIT: ça y est, je commence à être inondé de mails. Oui j'avais un peu oublié ce problème sous Linux, et c'est moche, oui.

Source : http://sebsauvage.net/rhaa/index.php?2012/01/18/15/21/45-cliquez-pour-vous-faire-infecter


Pourquoi je suis un pirate

mercredi 18 janvier 2012 à 10:31

Juste un excellent article de Ploum que je voulais vous faire partager, et qui résume bien la rage que la majorité d'entre nous peuvent avoir envers les industriels de la culture.

http://ploum.net/post/je-suis-un-pirate

Enjoy.

Source : http://sebsauvage.net/rhaa/index.php?2012/01/18/09/31/03-pourquoi-je-suis-un-pirate


Pas de blackout SOPA sur sebsauvage.net ?

mercredi 18 janvier 2012 à 08:52

Pas de blackout SOPA sur mon site. Et voici pourquoi:

Voici donc des liens pour vous informer sur SOPA, si vous ne connaissez pas encore:


EDIT: Bon que Wikipedia passe au noir en protestation, ok, c'est pas critique (même si c'est chiant). Mais que des sites comme PacketStorm (qui fait de la veille sécurité informatique en temps réel) passent au noir, je trouve ça très con, limite dangereux.

Source : http://sebsauvage.net/rhaa/index.php?2012/01/18/07/52/26-pas-de-blackout-sopa-sur-sebsauvage-net-