Goufablog - Catégorie Technique https://blog.goufastyle.org/ Tous les billets de la catégorie Technique Tue, 19 Mar 2024 09:38:44 +0100 numrows : 27 <![CDATA[[Technique] Trajet optimum avec l'API Tisseo]]> https://blog.goufastyle.org/article/trajet-optimum-avec-l-api-tisseo
Page web-->

Ah Toulouse ! La ville rose... Une ville où on l'on aime bien se balader et, non en fait on va principalement devoir attendre dans les bouchons le matin et le soir. Bref, rien de tel que les transports en commun pour palier à ces embouteillages, mais comment bien optimiser son trajet ? Toulouse n'est pas comparable à Paris, ville où se trouve une bouche de métro tous les 50 mètres... À Toulouse il faut souvent marcher ou faire de la voiture avant de trouver un arrêt de bus. Donc on a beau avoir les horaires des prochains passages, il faut anticiper le temps d'arriver à l'arrêt qui peut se chiffrer en minutes !

L'existant


Widget officiel Tisseo

L'application Tisseo et son site web sont très bien faits. Cependant ils ne répondent qu'à un besoin standard : quand passe mon bus ? Au vu des fréquences de passages ils ont prévu d'afficher les deux prochains passages d'une ligne mais surtout de les organiser par localisation.

C'est certes très pratique mais il faudra quand même faire le calcul du temps d'arrivée à l'arrêt, surtout si l'on doit traverser tout le métro avant d'y arriver...

L'API Tisseo

Il s'agit d'une API standard qui permet qui permet de faire beaucoup de choses si l'on s'y plonge dedans, comme par exemple lister les lignes existantes, leurs arrêts, les prochains passages à ces arrêts, mais aussi de la plannification d'ititnéraire et de la recherche par zone géographique !

Une documentation est disponible ici. Mais avant de bien l'exploiter il va falloir mettre à plat les données que l'on veut.

La clef

L'API Tisseo est soumise à une licence ObDL qu'il vous faudra mentionner si vous faites un site web par exemple, et pour éviter les appels abusifs, une clef vous sera demandée à chaque requête. Cette clef peut s'obtenir en envoyant un mail à opendata(at)tisseo.fr et en spécifiant votre besoin.

Le long de cet article, je vous mettrai à disposition des sorties JSON tronquées que vous pourrez essayer d'appeler avec vos scripts.

Récupération des lignes

Passage obligé, au moins pour le tout début, ce service va vous récupérer les lignes en fonction d'un critère.

Filtrez votre requête par shortName et voilà

https://api.tisseo.fr/v1/lines.json?key=clef&shortName=47
{"expirationDate": "2018-03-20 03:45", "lines": {"line": [ {"bgXmlColor": "#db001b", "color": "(219,0,27)", "fgXmlColor": "#FFFFFF", "id": "11821949021891642", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "reservationMandatory": "0", "shortName": "47", "transportMode": {"article": "le", "id": "13792273858822585", "name": "bus"} } ] } }

Notez l'identifiant de la ligne (ici : 11821949021891642) dans un coin.

Comble du sublime : l'API vous donne même la couleur de la ligne dans plusieurs formats, pratique pour styliser les numéros !

"bgXmlColor": "#db001b", "color": "(219,0,27)", "fgXmlColor": "#FFFFFF",

Pour information si vous travaillez sur Chrome, faites F12 pour afficher la console développeurs, allez à l'onglet Réseau et vous aurez un meilleur aperçu du retour des services.

Récupération des arrêts

Maintenant que vous avez la ligne, vous pouvez interroger le service de récupération des arrêts physiques de cette ligne. En effet, l'API vous interdit de récupérer tous les arrêts d'un coup.

Dans un premier temps recherchez textuellement les arrêts par nom, mais surtout surveillez le sens !

https://api.tisseo.fr/v1/stop_points.json?key=clef&lineId=11821949021891642&displayDestinations=1
{"expirationDate": "2018-03-20 03:45", "physicalStops": {"physicalStop": [ {"destinations": [{"cityName": "PORTET-SUR-GARONNE", "id": "1970324837184685", "name": "Portet Gare SNCF"}], "handicappedCompliance": "1", "id": "3377699723269553", "lines": [{"short_name": "47"}], "name": "Basso Cambo", "operatorCodes": [{"operatorCode": {"network": "Tisséo", "value": "366"}}, {"operatorCode": {"network": "Tisséo", "value": "526"}}], "stopArea": {"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}}, {"destinations": [{"cityName": "PORTET-SUR-GARONNE", "id": "1970324837184685", "name": "Portet Gare SNCF"}], "handicappedCompliance": "1", "id": "3377699720883563", "lines": [{"short_name": "47"}, {"short_name": "48"}, {"short_name": "57"}, {"short_name": "58"}], "name": "De Croutte", "operatorCodes": [{"operatorCode": {"network": "Tisséo", "value": "2150"}}], "stopArea": {"cityName": "TOULOUSE", "id": "1970324837186339", "name": "De Croutte"}}, {"destinations": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "handicappedCompliance": "1", "id": "3377699720883562", "lines": [{"short_name": "47"}, {"short_name": "48"}, {"short_name": "57"}, {"short_name": "58"}], "name": "De Croutte", "operatorCodes": [{"operatorCode": {"network": "Tisséo", "value": "2151"}}], "stopArea": {"cityName": "TOULOUSE", "id": "1970324837186339", "name": "De Croutte"}}, {"destinations": [{"cityName": "PORTET-SUR-GARONNE", "id": "1970324837184685", "name": "Portet Gare SNCF"}], "handicappedCompliance": "1", "id": "3377699720883560", "lines": [{"short_name": "21"}, {"short_name": "47"}, {"short_name": "48"}, {"short_name": "57"}, {"short_name": "58"}], "name": "Mounède", "operatorCodes": [{"operatorCode": {"network": "Tisséo", "value": "4500"}}], "stopArea": {"cityName": "TOULOUSE", "id": "1970324837186338", "name": "Mounède"}}, {"destinations": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "handicappedCompliance": "1", "id": "3377699720883561", "lines": [{"short_name": "21"}, {"short_name": "47"}, {"short_name": "48"}, {"short_name": "57"}, {"short_name": "58"}], "name": "Mounède", "operatorCodes": [{"operatorCode": {"network": "Tisséo", "value": "4501"}}], "stopArea": {"cityName": "TOULOUSE", "id": "1970324837186338", "name": "Mounède"}} ] } }

Maintenant que vous avez les arrêts physiques faites vous une liste avec les lignes et leur sens qui vous intéressent.

11821949021891642 47 3377699723269553 47 Basso -> Portet 3377699720883562 47,48,57,58 De croutte -> Basso

Vous remarquerez un champ stopArea, c'est un ensemble d'arrêts qui fonctionne comme un seul. Notez-le il sera utile pour tout à l'heure.

Récupération des passages, avec filtre sur la ligne

Avec votre liste, vous pouvez demander les passages des bus à ces arrêts. Mais attention il y a une petite subtilité : plusieurs bus peuvent passer par un seul arrêt !

https://api.tisseo.fr/v1/stops_schedules.json?key=clef&stopsList=3377704015495611
{"departures": {"departure": [ {"dateTime": "2018-03-20 11:56:46", "destination": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "line": {"color": "(87,47,8)", "name": "Basso Cambo / Frouzins JP Sabatier", "network": "Tisséo", "shortName": "57"}, "realTime": "yes"}, {"dateTime": "2018-03-20 11:59:22", "destination": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "shortName": "47"}, "realTime": "yes"} ], "stop": {"id": "3377704015495611", "name": "La Ramée", "operatorCode": "27701"}, "stopArea": {"cityId": "1688849860531493", "cityName": "TOURNEFEUILLE", "id": "1970324837186911", "name": "La Ramée"}}, "expirationDate": "2018-03-20 11:54"}

Il vous faudra donc filtrer par ligne, et éventuellement par terminus

https://api.tisseo.fr/v1/stops_schedules.json?key=clef&stopsList=3377704015495611|11821949021891642
{"departures": {"departure": [ {"dateTime": "2018-03-20 11:59:22", "destination": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "shortName": "47"}, "realTime": "yes"}, {"dateTime": "2018-03-20 12:17:39", "destination": [{"cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "shortName": "47"}, "realTime": "yes"} ], "stop": {"id": "3377704015495611", "name": "La Ramée", "operatorCode": "27701"}, "stopArea": {"cityId": "1688849860531493", "cityName": "TOURNEFEUILLE", "id": "1970324837186911", "name": "La Ramée"} }, "expirationDate": "2018-03-20 11:58"}

Vous pouvez coupler plusieurs arrêts ou zones d'arrêts en une seule requête séparés par des virgules, afin de centraliser les résultats, la clef est la suivante :

<arrêt ou zone 1>|<filtre de ligne>|<filtre de terminus>,<arrêt ou zone 2>|<filtre de ligne>|<filtre de terminus>

Une fois que vous avez la bonne requête, mettez-la de côté pour la lier à un contexte ("Je pars de Basso Cambo",...)

Je vous ai parlé ci-dessus du cas de plusieurs bus passant par un arrêt. Il existe aussi le cas de plusieurs arrêts dans une zone géographique restreinte : les stop areas ! Basso Cambo est un terminus de métro, et possède donc une grande quantité d'arrêts de bus. Grâce à l'API, ils sont centralisés dans un espace qu'est le stop area :

https://api.tisseo.fr/v1/stops_schedules.json?key=clef&number=15&stopsList=1970324837184808
{"departures": {"departure": [ {"dateTime": "2018-10-17 22:01:00", "destination": [{"cityName": "BALMA", "id": "1970324837185612", "name": "Balma-Gramont"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Balma - Gramont", "network": "Tisséo", "shortName": "A"}, "realTime": "no"}, {"dateTime": "2018-10-17 22:06:00", "destination": [{"cityName": "TOULOUSE", "id": "1970324837184995", "name": "Cours Dillon"}], "line": {"color": "(0,124,82)", "name": "Basso Cambo / Cours Dillon", "network": "Tisséo", "shortName": "12"}, "realTime": "yes"} ], "stop": {"id": "3377699720880977", "name": "Basso Cambo", "operatorCode": "40001"}, "stopArea": {"cityId": "1688849860531491", "cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}}, "expirationDate": "2018-10-17 22:00"}

Ce service équivaut à l'affiche du départ/passage de toutes les lignes sur l'écran de la station, mais on peut par conséquent isoler par ligne avec la même technique !

https://api.tisseo.fr/v1/stops_schedules.json?key=clef&number=15&stopsList=1970324837184808|11821949021891642
{"departures": {"departure": [ {"dateTime": "2018-10-18 06:00:00", "destination": [{"cityName": "PORTET-SUR-GARONNE", "id": "1970324837184685", "name": "Portet Gare SNCF"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "shortName": "47"}, "realTime": "no"}, {"dateTime": "2018-10-18 06:30:00", "destination": [{"cityName": "PORTET-SUR-GARONNE", "id": "1970324837184685", "name": "Portet Gare SNCF"}], "line": {"color": "(219,0,27)", "name": "Basso Cambo / Portet Gare SNCF", "network": "Tisséo", "shortName": "47"}, "realTime": "no"}, ], "stop": {"id": "3377699723269553", "name": "Basso Cambo", "operatorCode": "366,526"}, "stopArea": {"cityId": "1688849860531491", "cityName": "TOULOUSE", "id": "1970324837184808", "name": "Basso Cambo"}}, "expirationDate": "2018-10-17 21:55"}

Bonus : messages d'information

Avec l'appli standard, j'ai des alertes en temps réel sur l'état du trafic, mais si j'ai oublié je peux appeler un service qui me donnera les derniers messages importants.

https://api.tisseo.fr/v1/messages.json?key=clef&displayImportantOnly=1
{"expirationDate": "2019-07-02 15:22", "messages": [ {"message": {"content": "ARRÊT TRAM LIGNE T1 - LIGNE T2Ligne T1 et Ligne T2 : le service tram est interrompu en raison d'un objet abandonné situé aux abords de la station Palais de Justice.\r\nUne intervention des forces de sécurité est en cours.", "id": "prehome", "importanceLevel": "important", "scope": "global", "title": "ARRÊT TRAM LIGNE T1 - LIGNE T2", "type": "trafic", "url": "https://www.tisseo.fr/se-deplacer/info-reseau/id/prehome"}} ] }

Application

Et maintenant place à mon application récapitulative ! Pour coder tout ça, j'ai choisi le pack Raspberry pi/lighttpd/SQLite/PHP/Pushbullet.

Le code est disponible sous Github.

Page web récapitulative


Page web

Avant toute chose, mettez dans une base ou un fichier une liste des requêtes HTTP que vous avez construites ci-dessus et donnez leur un identifiant, un libellé et le temps d'arrivée à l'arrêt en question que vous pourrez donc lister facilement.

Vous vous souvenez de la couleur de ligne ? Eh bien vous allez pouvoir l'appliquer facilement avec du style.

style='background-color:rgb".$d->line->color."'

Notification et rappel automatique


Notification et rappel

Avant de partir quelque part, je n'ai pas envie d'ouvrir une page web et d'attendre un résultat... L'idée est donc d'utiliser Pushbullet afin d'avoir un message immédiat sur mon téléphone.

Téléchargez l'application et créez-vous un compte, ensuite créez un petit script pour publier les données :

#!/bin/bash mydate="`date +%H:%M:%S`" curl -s -S --header 'Access-Token: <token>' --request POST --header 'Content-Type: application/json' --data-binary '{"type":"note","body":"'"[$mydate] $2"'","title":"'"$1"'"}' https://api.pushbullet.com/v2/pushes -o curlout.txt

Pour temporiser une commande, créez une tâche en utilisant le combo sleep et screen

$cmd = "screen -dm -S remindTisseo".$id." bash -c 'sleep ".($mins*60)." && (cd /path/to/app ; php -q notif.php ".$id.")' >/dev/null 2>&1"; exec($cmd);

Voilà, bon courage pour la mise en place de tout ça et bon voyage !

]]>
https://blog.goufastyle.org/article/2019/07/16/trajet-optimum-avec-l-api-tisseo Tue, 16 Jul 2019 22:32:21 +0200
<![CDATA[[Technique] Proposition de nouvelle media-query : regarder un site web le 30 du mois pendant une pleine lune en faisant face au Nord-Est et en faisant des squats]]> https://blog.goufastyle.org/article/proposition-de-nouvelle-media-query-regarder-un-site-web-le-30-du-mois-pendant-une-pleine-lune-en-faisant-face-au-nord-est-et-en-faisant-des-squats .valid { background-color:green; color: black; } .invalid { background-color:indianred; color: black; }

J'ai découvert récemment les nouvelles media-queries version 5 qui proposent des mises en situation qui dépassent la taille ou l'orientation de l'écran. On parle par exemple de la gestion de la luminosité ou si la page contient des scripts. En cette période propice je propose donc une nouvelle media-query qui gère les gens qui font des squats le 30 du mois en faisant face au Nord-Est pendant la pleine lune, un public très souvent oublié !

Un media-query, c'est quoi ?

Quand les téléphones portables capables d'afficher un site web sont arrivés, les webmasters ont dû s'adapter pour aider les développeurs à ne pas s'arracher les cheveux. L'idée était de récupérer via Javascript la taille de l'écran et d'adapter le style en fonction.

Avec les media-queries, en quelques lignes on peut imposer des règles de style CSS en fonction d'une certaine configuration :

/* écran d'ordintateur */ @media screen { div { width:100%; } } /* imprimante */ @media print { div { width:50%; } } /* écran de moins de 480 pixels de long */ @media max-width:480px { div { width:30%; } }

L'idée est donc d'avoir une balise permettant d'afficher le site dans la circonstance que j'ai décrit dans le titre, elle aurait donc pour titre :

on30thfullmoonfacingnewhilesquatting

Poisson d'Avr... quoi ?!?

Bien entendu cette media-query n'existe pas, mais on a tout ce qu'il faut en Javascript pour la réaliser

Mise en application

En ce mois d'Avril 2018, la pleine Lune arrive le 30 du mois, et bon, j'aime faire des squats le soir quand je rentre afin de rester en forme, et il s'avère que mon équipement sportif est disposé de telle sorte à ce que sois dirigé vers le Nord-Est. Il est donc important que je puisse regarder mes sites web préférés dans ces conditions !

Le 30Attente de démarrage
Pleine luneAttente de démarrage
Face au N-EAttente de démarrage
En faisant des squatsAttente de démarrage

Le 30 du mois

Javascript gère très bien les dates, mais pas le formattage...

(new Date()).getDate()==30;

Pendant la pleine lune

Un peu plus difficile En fait c'est le bordel ! La Lune n'est pas en orbite fixe donc les phases ne sont pas cycliques dans le temps. Le mieux est d'utiliser une API permettant de récupérer cette information comme wunderground par exemple. Pour le besoin de cet exercice, on va faire de l'approximation : chaque pleine Lune arrive tous les 29.530588853 jours (à peu près), il suffit de compter le temps passé entre la dernière pleine Lune (le 02 Mars à 1:51) et faire un modulo de cette période.

date = (new Date()).getTime(); lastFullMoon = (new Date("2018-03-02 01:51")).getTime(); cycle = 2551442.8768992; // 29.530588853 jours * 86400 secondes // 0 => pleine lune, 50 => nouvelle lune ageOfMoon = (((date-lastFullMoon)/1000)%cycle)/cycle *100

Faisant face au Nord-Est

Petite contrainte en approche : il faut que l'appareil qui lise le site web ait une boussole. On peut le vérifier et exploiter le résultat qui sera sous forme d'angle.

if (window.DeviceOrientationAbsoluteEvent) { // position plus précise, mais pas générique window.addEventListener('deviceorientationabsolute', processOrientation, false); } else if (window.DeviceOrientationEvent) { window.addEventListener('deviceorientation', processOrientation, false); } else { // pas d'orientation possible ! } function processOrientation(event) { where = ""; //l'angle est inversé sur mon téléphone angle = (360 - event.alpha)%360; valid[2].isValid = false; if (angle < 78.75 || angle > 281.25) { where = " Nord"; } else if (angle > 101.25 && angle < 258.75) { where = " Sud"; } if (angle > 11.25 && angle < 168.75) { where += " Est"; } else if (angle >191.25 && angle < 348.75) { where += " Ouest"; } }

En train de faire des squats

Alors là ça se complique ! Il faut que l'appareil fasse des mouvement continus de haut en bas, et occasionnellement qu'il ait un accéléromètre. Comme pour la boussole on va vérifier ça avant, ensuite il faudra construire un algorithme afin de détecter les mouvements et en déduire une répétition... Malheureusement pour compliquer le tout, l'appareil est en accélération permanente même à l'arrêt à cause de la gravité terrestre !

Pour simplifier le problème, on va prendre l'accélération sur l'axe d'altitude de l'appareil et en étudier la variation.

if(window.DeviceMotionEvent) { window.addEventListener("devicemotion", processMotion, false); } else { // impossible de mesurer le mouvement } function processMotion(event) { date = (new Date().getTime()); newval = event.acceleration.y; if (newval < -1 || newval > 1) { change = newval > lastval ? "i":"d"; lasttime = date; } if (date-lasttime > 3000) { times = [lasttime]; times.push(date); lasttime = date; rendertable(); } if (change != lastchange) { times.push(date); if (times.length > 20) { times.shift(); } rendertable(); } lastval = newval; lastchange = change; } function rendertable() { moy1 = []; totalmoy = 0; if (times.length > 1) { for (i = 1; i< times.length; i++) { diff = times[i]-times[i-1]; moy1.push(diff); totalmoy += diff; } truemoy = totalmoy/moy1.length; date = (new Date()).getTime(); if (truemoy >= 3000) { text = "Bah alors ?"; } else if (truemoy > 1000) { text = "Trop lent !"; } else if (truemoy < 300) { text = "Continue comme ça !"; } else { text = "Allez du nerf !"; } } }

Vous pourrez trouver le code de ce programme sur mon Github, et si vous avez des propositions d'améliorations simples (ne pas tout réécrire ;)) vous pouvez le proposer en pull request.

Conclusion

Quelqu'un a dit un jour : aujourd'hui on teste la robustesse d'un appareil uniquement avec le navigateur web. Et on peut voir que de plus en plus de fonctionnalités sont accessibles aux browsers, il suffit juste d'attendre un peu pour les voir arriver dans nos poches.

Et un jour, vous pourrez dire que votre téléphone fait le café !

]]>
https://blog.goufastyle.org/article/2018/03/29/proposition-de-nouvelle-media-query-regarder-un-site-web-le-30-du-mois-pendant-une-pleine-lune-en-faisant-face-au-nord-est-et-en-faisant-des-squats Thu, 29 Mar 2018 23:11:50 +0200
<![CDATA[[Technique] Etre daltonien dans une équipe]]> https://blog.goufastyle.org/article/etre-daltonien-dans-une-equipe Article posté sur le site 24 jours du web édition 2017.

N'hésitez pas à suivre les autres articles jusqu'à Noël et pourquoi pas faire un don à l'association représentée cette année.

Joyeuses fêtes de fin / début d'année à toutes et à tous !

]]>
https://blog.goufastyle.org/article/2017/12/01/etre-daltonien-dans-une-equipe Fri, 01 Dec 2017 09:12:47 +0100
<![CDATA[[Technique] Mettre à jour mes 25 mots de passe, mais bien sûr !]]> https://blog.goufastyle.org/article/mettre-a-jour-mes-25-mots-de-passe-mais-bien-sur-

Il y a quelques temps, quelques internautes ont lancé l'opération Reset The Net. Le résumé est simple : suite aux révélation de Snowden, pourquoi plein de gens continuent à utiliser Gmail et Google ? Et pourquoi votre serviteur qui est pourtant au fait de la technologie ne fait pas plein d'articles sur comment se sécuriser chez soi ? Peur ? Flemme ? Résignation ? Je vais vous détailler pourquoi.

L'exigence de la sécurité, le bouleversement du confort et l'indisponibilité

Reset The Net avait pour objectif de sensibiliser tous les utilisateurs du Net à basculer vers des plateformes qui garantissent la non surveillance par un quelconque organisme d'espionnage :

  • utiliser du https en permanence.
  • utiliser des logiciels de chiffrage en amont des logiciels de base.
  • utiliser des logiciels libres pour s'assurer que le mécanisme de chiffrage est fiable.
  • ne pas s'abonner à plein de services qui demandent des informations confidentielles.
  • ...

En gros prendre conscience qu'on est espionnés tout le temps et qu'il faut empêcher (ou ralentir) cette pratique pour protéger notre vie privée.

Donc si vous regardez la liste ci-dessus vous vous rendez compte que l'on demande à tous les utilisateurs d'Internet de changer carrément de mode de vie pour ne pas être espionné. On envoyait un mail en un clic, il en faudra maintenant une dizaine pour passer dans le logiciel de chiffrage que la NSA va de toutes façons anéantir en quelques minutes.

Eh oui, se protéger chez soi de l'espionnage est aussi contraignant que de se battre contre le spam ou le terrorisme, il faut s'adapter en permanence aux nouvelles menaces sans forcément savoir si l'on est bien protégé ou non au vu de la transparence des services de renseignements. Et je me vois mal dire à la mamie du Cantal qu'elle doit changer de logiciel de messagerie tous les deux mois et de mettre un mot de passe différent dans tous les services qu'elle utilise...

Mais dès que tout le monde aura sécurisé son petit chez soi en mettant des VPNs, proxies, chiffrage à tous les étages, comment va-t-on reconnaître les vrais pirates du citoyen lambda qui ne veut pas se faire fliquer ? Congestion réseau, trop de manipulations, trop de logiciels peu sûrs, tant de raisons pour ne pas franchir le pas.

Des sécurités de mot de passe trop éparses

Question: quelle est la différence entre le site web d'une banque et d'un forum de jeux vidéo ? Réponse : le forum de jeux vidéo est plus sécurisé ! Banques, assurances et mutuelles sont obligées de mettre des chiffres à position variable afin de faire un semblant de cryptage en Javascript, mais chacune a ses propres règles en fonction du nombre de chiffres (5,6 ou 8) dans le code. Bilan : dates d'anniversaire, de mariage,... et si on ne suit pas cette règle on est forcé d'écrire quelque part ce code, mais surtout le nombre de combinaisons de chiffres est bien faible (10^x) par rapport aux caractères (255^x).

Les mots de passe de caractères ne sont pas non plus à l'abri des règles chaotiques, entre

  • nombre minimum de caractères
  • (sic)nombre maximum de caractères voire tronquage du mot de passe
  • obligation ou interdiction de certains caractères
  • une ou plusieurs majuscules/minuscules,...
  • détection de l'incrémentation ("mdp1", "mdp2", "mdp3",...)

Avec toutes ces règles, il est impossible de se rappeler facilement d'un mot de passe enregistré sur un site en particulier. Bref, on le note sur un papier ou on utilise un mot de passe générique marchant avec la plupart des règles. L'inverse de ce qui est demandé, à savoir un mot de passe différent par service.

Et enfin 3 mois est une bonne durée de vie minimum d'un mot de passe. Ne nous forcez pas à le changer toutes les semaines sinon on sera obligé d'incrémenter ou de le noter quelques part, on n'a pas assez d'imagination en un laps de temps si court...

Je n'ai rien à cach... oh et puis tant pis !


Juste pour lire des messages sur un service...

Elles sont vachement pratiques ces applications sur le Store : météo, accordeur de guitare, prochaines règles,... Mais qu'ont-elles en commun ? Un besoin maladif de connaître notre position, notre répertoire d'appels, d'aller sur le net,... La prostitution publicitaire fera l'objet d'un autre article mais on voit bien que tout le monde veut connaître tout de tout le monde !

Hélas, j'en ai besoin, l'application est populaire, pas si exigeante que ça en termes de permissions, tous mes amis l'ont,... Je vais l'installer. A ce moment-là tout ce qui compte est que l'application fasse ce qu'elle dit, pense-je en balayant du doigt la popup me demandant de mettre 5 étoiles sur le Market, et tout ce flicage, cette surveillance, toutes ces données qui partent sur Internet ne me font plus aucun effet.

La popularité et la mode

J'ai entendu des histoires de filles qui se faisaient tabasser au collège parce qu'elles n'ont pas "liké" le status Facebook d'une amie posté à 3h du matin. Des gens utilisent encore 4square malgré mon article et le site Please Rob Me.

Eh oui, la clef pour que tout le monde adhère à la sécurité et à la non-transmission de données sensibles est d'en faire un phénomène de mode ! Malgré les affiches du parti pirate et les actions de la quadrature du net, je ne vois aucun gros mouvement de foule pour dénoncer toutes ces pratiques. Dès qu'une vidéo parle de tous ces agissements, on copie le lien et on le like sur Facebook.

Tout le monde a conscience de ce problème mais il n'y a pas de solution évidente ou qui ne remettrait pas en cause des organisations existantes. On subit en se contentant ce petit confort et de la reconnaissance des autres.

Protection minimale

Je ne vous demande pas de vous balader à poil sur Internet, quelques normes de sécurité minimale s'imposent...

  • créez un mot de passe FORT : pensez à une phrase et transformez-la ("il fait beau aujourd'hui, demain non" > ilfba2uidn).
  • mettez la première lettre (ou une autre) du service que vous utilisez dans le mot de passe ("facebook" > filfba2uidn)
  • apprenez à bien gérer vos mails, créez une adresse poubelle pour les inscriptions et ne mettez pas vos coordonnées partout.
  • lisez les commentaires des applications avant de les télécharger.

Et bon courage pour appliquer ces règles, entre les sites qui n'acceptent que les chiffres comme mot de passe, qui tronquent, imposent ou refusent certains caractères,...

Il est aussi possible d'utiliser un porte-clef de mots de passe comme KeePass ou LastPass qui permettent une génération de caractères purement aléatoires, hélas ils dépendent d'un mot de passe maître qu'il faudra forcément noter quelque part pour ne pas perdre les accès, et ne permettent pas d'ouvrir une session sur le poste de travail.

Et enfin, je vous en supplie : ne hurlez pas les mots de passe que ce soit chez vous ou au boulot, c'est une clef qui doit rester secrète entre un certain nombres de gens, pas les passants qui l'entendront par la fenêtre ouverte. Pensez aussi à supprimer les mails de confirmation d'inscription contenant les mots de passe en clair...

1984 2016

Voilà pourquoi vous ne verrez pas d'articles de sécurisation massive sur ce blog, d'autres le font très bien. A vous de voir si vous voulez vous engager dans ce combat et sécuriser vous-même à outrance vos moyens de communication en sachant qu'ils seront percés un jour ou l'autre pour soi-disant combattre le terrorisme.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2016/03/28/mettre-a-jour-mes-25-mots-de-passe-mais-bien-sur- Mon, 28 Mar 2016 14:41:15 +0200
<![CDATA[[Technique] Domotique de la maison des McFly]]> https://blog.goufastyle.org/article/domotique-de-la-maison-des-mcfly

Dans quelques instants, Doc et Marty McFly vont atterrir avec leur DeLorean dans un drôle de monde secoué par les révélations de Snowden et la nouvelle dictature installée en France. Mais bien sûr tout le monde se fout de ces points et préfère plutôt rêver de faire un tour en hoverboard ! Hélas, les voitures et les skates volants ne sont pas encore à l'ordre du jour. Mais la scène de la maison des McFly pourrait être vécue sans trucages avec les technologies d'aujourd'hui ! Petit tour sur les différentes fonctionnalités présentes et surtout leur utilité en termes d'application.

Tout au long de cet article, je vais noter ces fonctionnalité selon 4 critères :

  • Faisabilité aujourd'hui : où en est-on de la recherche sur cette technologie ? 1 : on n'a pas commencé, 5 : on la maîtrise.
  • Facilité d'installation aujourd'hui : avec quelle facilité un particulier peut-il installer chez lui ce genre de gadget ? 1 : c'est impossible, 2 : oui mais il va falloir faire beaucoup de travaux, 5 : n'importe qui peut acheter, paramétrer et installer cette technologie très rapidement.
  • Efficacité aujourd'hui : est-ce que cette technologie est "au point" ? 1 : vraiment pas fiable, 5 : aucun défaut, objet du quotidien.
  • Utilité aujourd'hui : est-ce qu'on a franchement besoin de ce genre de truc ? 1 : complètement inutile, 5 : absolument indispensable si ça existait.

Avant-propos : Retour dans le futur et mise en situation

Jennifer est la petite amie de Marty McFly en 1985. Elle et lui partent dans le futur dans une DeLorean avec Emmett "Doc" Brown, mais Jennifer devient turbulente et force Doc à l'endormir grâce à un gadget non décrit dans cet article.

En faisant leurs affaires, Marty et Doc laissent Jennifer inanimée à proximité de la DeLorean, ce qui va intriguer deux policières qui vont la ramener chez elle, ou plutôt dans son "chez elle" du futur...

L'entrée dans la maison

La policière met la main de Jennifer sur une plaque près de la porte d'entrée, cette dernière s'ouvre en disant "Bonjour Jennifer". La policière signale que l'entrée n'est pas éclairée et qu'il faudrait mettre de la lumière. Toujours dans les pommes, Jennifer répète "lumière ?" et aussitôt le salon s'éclaire. Les policières la laissent et Jennifer voit un paysage à travers la fenêtre.

Biométrie de la porte d'entrée


Lecteur d'empreintes
  • Faisabilité :
  • Facilité :
  • Efficacité : , discutable
  • Utilité :

Aujourd'hui, n'importe qui peut s'acheter une poignée de porte connectée sans fil et la relier à une box domotique. Le plus dur sera de mettre en place un système biométrique qui est accessible en module séparé mais qui garde encore une part propriétaire car il s'agit toujours d'une haute technologie.

La biométrie aujourd'hui semble inviolable mis à part dans certains scénarii de films d'espionnage, cependant depuis l'arrivée du lecteur d'empreintes digitales sur l'iPhone d'Apple, certains arrivent à contourner ce problème avec une photo haute qualité d'une empreinte de doigt. De plus on peut changer un mot de passe s'il se perd dans la nature mais impossible de changer une empreinte digitale.

Concernant l'aspect physique, bien sûr que quelqu'un peut me couper la main ou me forcer à poser ma main par la force mais on revient au même problème qu'avec une clef standard. Le problème majeur est qu'il n'y a pas de poignée ! pratique en cas d'incendie ou de coupure de courant !

Autre point : on ne voit pas les policières "bipper" pour sortir de la maison, mais je suppose donc qu'elles ont un passe-droit un peu comme les clefs maîtresses qu'ont les facteurs par exemple. Niveau sécurité c'est pas tip-top car il suffit de falsifier ce passe-droit qui ne pourra pas être changé facilement...

Donc oui, à condition d'avoir une solution de secours en cas de problème et à installer plutôt sur des coffres à l'intérieur que la porte d'entrée...

"Bonjour Jennifer"

  • Faisabilité :
  • Facilité : , notions de programmation requises
  • Efficacité : cf biométrie de la porte d'entrée
  • Utilité :

Rien de plus simple : un haut parleur autonome relié à un Raspberry Pi recevant un signal du module précédent, donc dépendant de la sécurité qui va avec, et un peu de programmation.

<?php exec("omxplayer <chemin>/bonjour-".$_GET["personne"].".mp3"); ?>

Cependant le "Bonjour Machin" est de trop. En effet pourquoi Jennifer est saluée et non pas les deux policières ? Le design de cet objet n'est pas assez puissant car Marlène, la fille de Marty, ne sait pas que sa mère est rentrée. De plus quand la vielle Jennifer entre, le système ne tique pas qu'il a eu un doublon...

Quand je rentre chez moi je préfère que la lumière du hall s'allume (cf point suivant) plutôt que la maison me souhaite la bienvenue. Il est possible avec les box domotique d'élaborer des scénarii en fonction de certaines situation et bien sûr de qui est rentré, à quelle heure,...

Aziz, lumière !

  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Il y a beaucoup à dire sur ce mécanisme d'allumage des lumières :

  • les policières disent "lumière", rien ne se passe.
  • Jennifer dit "lumière", la lumière du hall s'allume.

Je veux bien qu'il y ait une reconnaissance du timbre vocal de Jennifer, mais il ne manque pas quelque chose ? Le contexte par exemple ! Pour faire ce genre de mécanisme il faudrait truffer la maison de micros et identifier ceux qui vont allumer quelle partie de la maison à la prononciation du mot magique. Cependant, comment différencier "J'aimerais que le hall d'entrée ait les lumières allumées" et "Bob, t'es pas une lumière !" ?

Pour avoir le contexte, il faudrait prononcer quelque chose avant comme "Maison, lumière du hall" pour que la maison sache que c'est un ordre (pour peu que cette phrase ne soit pas prononcée pour apprendre aux autres membres de la famille comment ça marche) et quelle lumière il faut basculer. Et bien sûr, on peut le coupler à un scénario du point précédent : Si j'arrive et qu'il n'y a personne alors j'allume la lumière.

Je constate que tous les acteurs parlent poliment aux machines, comme si à cette époque il y avait une osmose entre l'homme et les appareils électroménagers. Quand on voit que Siri peut aider des enfants autistes, je laisse le débat continuer sur le fait qu'une machine doive être respectée ou dominée, même si ce n'est pas forcément interprété.

Paysage fenêtré


Paysage fenêtré
  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Vu aussi dans Total Recall, apparemment les gens des années 80 ont toujours rêvé de voir des paysages somptueux depuis leur fenêtre. Aujourd'hui avec les écrans ultra-plats en fullHD (et bientôt 8K) il est tout à fait possible d'avoir ce type de rendu avec un télé rivée (pliable ?) sur le mur qui fait tourner un film en boucle. Il faut juste avoir les moyens car entre l'achat et la consommation électrique,...

Un peu de télévision

Marty Junior arrive et s'installe dans le canapé du salon, il demande plusieurs chaînes dont la météo.

Commandes vocales de la télé

  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Toutes les "SmartTV" aujourd'hui ont une reconnaissance vocale et gestuelle, mais comme pour le point précédent il manque le contexte qui n'est pas encore au point aujourd'hui. Cependant ici il n'y a qu'un seul micro, celui de la box TV donc on n'a pas la problématique des lampes dans l'espace et les ordres sont un peu plus précis (volume, chaîne,...). Par contre, j'espère qu'il y a une télécommande parce que hurler "chaîne Pr0nTV" à deux heures du matin...

Projection de multiples chaînes


Grilles de chaînes
  • Faisabilité :
  • Facilité : ?
  • Efficacité : pour la partie aperçu
  • Utilité :

Dans les années 80 il n'y avait que deux tuners : dans la télé et le magnétoscope, donc on pouvait s'imaginer dans le futur pouvoir regarder 6 chaînes en même temps ! Aujourd'hui avec les offres multi-écran des opérateurs Internet il serait possible de jouer sur plusieurs chaînes en même temps et les regrouper vers une seule sortie, en l’occurrence un vidéo-projecteur.

Ce concept n'existe pas encore car il n'est pas utile : qui pourrait regarder les images et le son de 6 chaînes en même temps ? Par contre sans le son il serait possible par exemple de surveiller quand un film commence sur une chaîne tout en finissant de regarder les éléments graphiques des autres (sous-titres, météo,...). C'est ce que font les grilles de programmes sur certaines box.

Un bon repas

Le reste de la famille se met à table, Georges est la tête en bas accroché à un module anti-gravité. Lorraine fait chauffer une pizza de la taille d'un CD dans une machine qui la fait grossir à une taille acceptable. Pendant le repas, Marty Junior se sert d'un fruit sur un plateau motorisé qui descend du plafond, il a sur lui un casque de réalité virtuelle. A un moment du repas, le téléphone sonne et Marty Junior a un numéro qui s'affiche par transparence sur le casque.

Module anti-gravité

  • Faisabilité :
  • Facilité : ?
  • Efficacité : ?
  • Utilité :

Quand les modules anti-gravité arriveront dans nos foyers, je pense que l'on trouvera énormément d'applications. Hélas aujourd'hui à moins de mettre un aimant géant en dessous de la maison on ne peut que simuler avec des fils et sur une petite distance des phénomènes de ce genre...

Il y a surtout la sécurité : si le module tombe en panne, au revoir la tête de Georges !

Pupitres de commande

  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Quand Marty Senior arrive à la maison, il est accueilli par "seigneur de ce domaine" de par la voix de la maison qui disait "bonjour" tout à l'heure. Marty tripatouille un pupitre mural pour désactiver cette option.

La plupart des constructeurs d'objets connectés pensent qu'on se balade tout le temps avec un téléphone dans la poche relié en WIFI au reste de la maison. Ce mode de vie fait quand même un peu peur et les fabricants en profitent bien ! A l'époque du film on ne savait pas qu'il allait y avoir un tel phénomène de mode donc les réalisateurs on pensé à mettre des pupitres de commande (affichant des données aberrantes) un peu partout dans la maison.


Détails d'un pupitre

Aujourd'hui certaines solutions domotiques proposent un serveur local pour prendre le contrôle de vos appareils avec un soft sur votre portable, pour ma part j'ai choisi cette solution serveur + pupitre unique. A vous de choisir quelle solution est la plus jolie ou la plus fonctionnelle,...

Hydratation 4 s'il vous plaît


Quand Black&Decker feront des fours...
  • Faisabilité :
  • Facilité : ?
  • Efficacité : ?
  • Utilité :

Pourquoi les objets du futur sont-ils tellement biens ? Là encore je ne vais pas m'étendre car à moins d'inventer l'eau lyophilisée, on n'est pas prêts de résoudre ce genre de problème...

Plateau de fruits motorisé


Enfin un peu de place dans la cuisine !
  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

La place est un facteur important dans une maison mais là pas besoin d'outils futuristes, un simple moteur et un rail pour faire descendre un plateau, couplé à la commande vocale suffit. On dépendra encore et toujours du contexte.

Casque virtuel


Donneurs d'ordres et de télé
  • Faisabilité :
  • Facilité :
  • Efficacité : ?
  • Utilité :

On ne sait pas trop à quoi sert le casque de réalité virtuelle que Marty Junior porte pendant qu'il mange. Je soupçonne qu'il continue de regarder la télé ou autre chose mais il arrive à interagir avec l'environnement : lorsque le téléphone sonne, un numéro s'affiche sur le casque que tout le monde peut voir. On peut donc penser que ce casque peut contrôler la domotique de la maison.

Pour l'immersion, l'Oculus Rift peut suffire. Il est encore lourd et filaire mais dans quelques années je pense qu'on aura atteint ce but. Pour ce qui est de la transparence bien entendu on pense aux Google Glass, le Hololens ou autres lunettes connectées qui sont plus parodiées qu'utilisées aujourd'hui, en tout cas je trouve l'idée intéressante mais plutôt en intérieur dans des projets fermés.

Master Cook


Pupitre de recettes
  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Ce drôle d'appareil qui diffuse des recettes de cuisine est fort pratique et peut se résumer aujourd'hui à une tablette collée sur un meuble de la cuisine. Par contre attention aux projections !

Appel téléphonique

Marty dit "Allô, ici s'il vous plait" et une vidéo de Needles s'affiche sur le projecteur du salon. Ils parlent distinctement sans casque-micro. Needles fait une proposition que Marty accepte et celui-ci glisse une carte dans un appareil. Quand la communication est terminée, un message s'affiche montrant AT&T, puis Fujitsu apparaît à l'écran pour signaler à Marty qu'il est viré avec un logo clignotant sur l'écran. Tous les fax de la maison se mettent à imprimer "vous êtes viré".

Visio-conférence dans le salon

  • Faisabilité :
  • Facilité :
  • Efficacité :
  • Utilité :

Avec Skype et Internet aujourd'hui, les visio-conférences sont devenues banales et peuvent même être faites avec une smartTV ou la télé du salon branchée à un ordinateur. Skype est quand même bien pour discuter avec des amis lointains, mais pour ce qui est du travail il vaut se pencher vers une solution plus sécurisée, et pas à haute voix dans le salon.

L'affichage des informations du contact (loisirs, anniversaire,...) sont tout à fait réalisables aujourd'hui avec Facebook et autres. Par contre les afficher pendant la conversation n'est pas utile et peut au contraire entraîner des quiproquos sur la localisation par exemple.

Pour ce qui est de "l'intrusion" de Fujitsu et le texte clignotant, deux secondes de "nouvel appel" auraient pu rendre la scène plus réaliste mais bien sûr tout ceci est pour renforcer l'instant dramatique de la situation.

Terminal de communication privé


Télé connectée et scanneur de documents
  • Faisabilité :
  • Facilité : , sûrement (pré-)installé par un indépendant
  • Efficacité :
  • Utilité :

On ne sait pas grand chose sur cette boîte dans laquelle Marty met sa carte. Apparemment cela sert à faire transiter des données de façon sécurisée d'un contact à l'autre.

Si vous regardez bien chez vous ou chez un commerçant, très peu de choses vous appartiennent : box opérateur, terminal de paiement, token de connexion à distance au réseau de l'entreprise, terminal de colis, batterie de la voiture électrique,... Je ne serai donc pas surpris de voir ce type d'appareil arriver chez moi aujourd'hui pour des besoins précis et comme il serait complètement propriétaire sa fiabilité dépendra de qui l'a fabriqué.

Vous êtes viré


YOU'RE FIRED !
  • Faisabilité : obsolète

Les scénaristes ont dû se dire "on va mettre plein de technologies d'impression partout pour montrer l'aspect sans fil et connecté, whaaa !" Hélas, cette technologie est obsolète. Aujourd'hui les imprimantes réseau sont chez les particuliers et il en suffit d'une seule, mais surtout nous sommes à l'ère du mail et de la notification sur le téléphone ou sur la montre, le papier commence à disparaître progressivement et ce genre de situation ne peut donc pas arriver, enfin peut-être sous une autre forme...

Conclusion

Commandes vocales à gogo, électronique de partout et saturation d'informations. Voilà à quoi pensaient les réalisateurs de Retour vers le futur il y a une trentaine d'années. Aujourd'hui, force est de constater que la partie domotique est assez bien représentée mais pas encore accessible au commun des mortels, peut-être dans quelques années encore.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2015/10/20/domotique-de-la-maison-des-mcfly Tue, 20 Oct 2015 22:25:29 +0200
<![CDATA[[Technique] Pourquoi je ne rends pas mon site compatible mobile]]> https://blog.goufastyle.org/article/pourquoi-je-ne-rends-pas-mon-site-compatible-mobile Vous avez dû repérer si vous naviguez sur smartphone une nouvelle mention "site mobile" dans les résultats de recherche de Google. Cette mention s'affiche si votre site est compatible mobile selon la philosophie Google. En faisant passer ce test à mon blog, je me suis rendu compte qu'il y avait un sacré boulot et que du coup je me suis demandé si ça valait vraiment le coup de faire cette migration. Et visiblement non...

Parce que les smartphones s'en sortent très bien

J'ai commencé à utiliser des navigateurs mobiles avec mon tout premier téléphone : le HTC Dream. Il avait le navigateur "stock" de base, puis Opera mini, puis Dolphin Browser, et force est de constater que...


Affichage d'un article

Tous les navigateurs arrivent à ajuster le texte dans l'écran. C'est une option par défaut qui permet de mettre tout le texte d'un paragraphe dans l'écran, il ne reste plus qu'à zoomer ou défiler.

Un autre critère de Google est que les liens doivent être espacés pour ne pas que nos gros doigts cliquent par inadvertance sur un lien non voulu. Moi quand je clique sur plusieurs liens sur mon téléphone, j'ai ça :


Zoom de liens

Aucun problème donc...

Parce que la simplicité, ça a du bon !

La page que vous êtes en train de lire ne contient (pour le moment) aucun code Javascript, aucun menu de survol, aucune PUTAIN DE POPUP INTRUSIVE. En gros mon site respecte la norme "Keep It Simple Stupid" qui impose la simplicité.

Vous voulez zoomer ? Zoomez ! Vous voulez défiler ? Défilez !

Il est clair qu'il s'agit uniquement d'un blog avec des articles. Si j'avais fait un site marchand j'aurai un peu repensé à l'ergonomie et fait des boutons plus gros par exemple.

Pour ne pas froisser mon lectorat

Vous êtes en train de lire tranquillement cet article quand tout à coup :


ONOES ! UN VIRUS !

Je n'ai pas assez de mots pour exprimer l'horreur de cette prostitution publicitaire quitte à mentir aux lecteurs sur la présence d'éventuels virus sur leur téléphone. Hélas les popup intrusives et les liens cachés vers Google Play sont légion sur les sites mobiles aujourd'hui.

Quand vous arrivez sur ce site, vous voyez cette page, point ! Si je devais mettre des encadrés ou autres, ce sera comme mon bandeau sur les cookies : bien à l'écart dans un div.

Parce que Google n'est pas le seul moteur de recherche

Qwant, DuckDuckGo,... tous ces moteurs de recherche fonctionnent et ne vous surveillent pas en permanence. Chacun ont leur propre algorithme de SEO qui sanctionnera plus ou moins fort les sites web. C'est pour ça que je rigole bien à chaque fois que je vois un article sur un "changement d'algorithme" de Google qui fait paniquer toute la websphère. Il suffit pourtant de mettre les bons mots dans les articles et l'internaute saura où trouver l'information.

Parce que je suis complètement dépassé par le code "responsive"


Regardez ! Mon site est responsive !

Il est vrai que certain sites sont beaux et jouent sur le redimensionnement de l'écran, et ce de façon native en HTML5 avec des attributs CSS simples. Malheureusement...

J'ai bien essayé de faire une page dédiée mobile au moins pour la lecture d'un article, mais en testant je me suis rendu compte que mon téléphone affichait mon article très bien de façon native.

Conclusion

Pour le moment je n'ai donc aucun besoin de passer mon site en version mobile. Quant à vous, réfléchissez bien à tous les travaux que vous auriez à faire s'il fallait se plier aux exigences du grand Google pour apparaître dans la première page et demandez-vous si ça vaut vraiment le coup...

+ Sources des images

]]>
https://blog.goufastyle.org/article/2015/08/20/pourquoi-je-ne-rends-pas-mon-site-compatible-mobile Thu, 20 Aug 2015 11:31:11 +0200
<![CDATA[[Technique] Domotique minimale - Partie 8 : Domotique et Z-Wave]]> https://blog.goufastyle.org/article/domotique-minimale-partie-8-domotique-et-z-wave Maintenant que tout est configuré dans notre maison on ne va pas s'arrêter en milieu de chemin ! Il est temps de prendre quelques petits modules Z-Wave pour les faire s'interfacer avec notre installation. Pour ma part j'ai récupéré un contrôleur Aeontec Z-Stick 2 et deux détecteurs de porte dont un qui fait aussi température et luminance.

Z-Wave ?


Rassurez-vous, la température est en °F

C'est une norme de communication entre différents appareils connectés. L'avantage de cette technologie est que les appareils peuvent construire des noeuds de transfert, réduisant la consommation de courant et les ondes propagées.

La communication utilise un système de "command classes" ayant chacune un identifiant que l'appareil présente au contrôleur :

  • batterie (généralement 128)
  • température
  • intervalle de réveil
  • alarme et niveau (113)
  • tamper (bidouillage) de l'appareil

La communication Z-Wave est très étrange : elle part du principe que les périphériques sont inactifs par défaut et attendent leur réveil. C'est pour cela qu'on n'a pas d'informations directement et qu'il faut attendre un peu. Pour un appareil normal vous aurez :

- Bonjour Appareil1 ! - Bonjour ! - Qui êtes-vous ? - Je suis une clef USB ! - OK je vais chercher un pilote générique de lecteur de disque !

Alors que pour le ZWave, j'exagère à peine mais c'est vraiment ce qu'il y a dans les logs :

- Bonjour Appareil1 ! - 127 - Euh... Bonjour ? - 127 - Qui êtes-vous ? - 127 - Non mais c'est quoi votre capacité ? - 127 - Mais... - Je ne me réveille pas souvent. - Ah ! Enfin ! Alors je... - 127 - Mais je ne sais pas ce que c'est 127 ! - 127 - RHAAAA ! - Bonjour ! Je suis un détecteur de porte, voilà mes caractéristiques et ce que veut dire 127 !

Logiciels existants

Après avoir branché mon contrôleur et associé mes éléments, je veux voir si mon système est opérationnel. Pour cela j'ai jeté un petit coup d'oeil aux solutions déjà codées pour ensuite pouvoir passer à OpenZwave et coder moi-même mon système.

HomeGenie

Téléchargement

C'est pour moi la solution la plus complète et qui marche le mieux. Cependant l'IHM, le paramétrage et surtout la programmation sont un charabia incompréhensible. Il m'a fallu beaucoup de temps rien que pour trouver comment afficher la température sur mon capteur (jusqu'à ce que je comprenne qu'il fallait attendre que le soft "apprenne" à communiquer avec les composants.

Une fois que ça fonctionne, je peux faire de la programmation python mais la documentation est très floue ! En gros c'est "allez-y, codez!".

Attention toutefois car un service se lance au démarrage de l'ordinateur et monopolise votre port 80 et garde la main sur le contrôleur empêchant les autres application d'y accéder.

HomiDom

Téléchargement

Solution opensource que je n'ai pas réussi à faire fonctionner.

HomeSeer

Téléchargement

Version d'évaluation mais je n'ai pas pu tester car le module Z-Wave était expérimental et buggué.

Incontrol

Téléchargement

La version d'évaluation ne permet pas d'ajouter de capteurs ce qui est pourtant la base de la domotique !

OpenZWave

C'est ce qui m'a motivé à essayer de toucher au Z-Wave, il s'agit d'une librairie C++/C# pour s'interfacer avec les accessoires Z-Wave grâce à un contrôleur. J'ai eu beaucoup de mal à le mettre en place car il n'y a pas beaucoup de documentation d'exemple, mais je vais pouvoir vous aider à faire au moins les premiers pas.

Installation

Téléchargement

Pour ma part la version 1.2 ne compilait pas du tout, j'ai pris la version 1.0 mais il a quand fallu bidouiller un petit peu.

Dans un premier temps dézippez la solution dans une arborescence sans espace. Ensuite repérez le port COM sur lequel votre adaptateur est branché, dans le gestionnaire des périphériques :

Repérez le répertoire "config" à la racine du zip. Isolez-le et à l'avenir appelez le chemin à travers une variable de réglage (.ini, ressource,...), faites de même pour le port COM.

Voici ensuite pêle-mêle les problèmes que j'ai rencontré :

  • enlevez les "extern" avant les uint* quand vous aurez l'erreur de compilation.
  • dans OpenZWaveDotNet ouvrez les propriétés du projet et ajoutez le répertoire d'inclusion des sources en C++ dans le linker.
  • quand vous déploierez votre projet sur un autre poste, genre le serveur, pensez à TOUT recompiler en Release.

Compilation et première application

N'hésitez pas à vous inspirer du projet OZWForm et surtout du code présent dans le fichier MainForm.cs. Lancez-le et regardez la fenêtre de sortie du programme pour voir les interactions avec les composants. Je vous recommande de décommenter les lignes présentes dans le gestionnaire de notifications qui gèrent le ValueChanged dans la fonction "onNotification":

case ZWNotification.Type.ValueChanged: { Console.WriteLine("Value Changed"); ZWValueID v = m_notification.GetValueID(); Console.WriteLine(" Node : " + v.GetNodeId().ToString()); Console.WriteLine(" CC : " + v.GetCommandClassId().ToString()); Console.WriteLine(" Type : " + v.GetType().ToString()); Console.WriteLine(" Index: " + v.GetIndex().ToString()); Console.WriteLine(" Inst : " + v.GetInstance().ToString()); Console.WriteLine(" Value: " + GetValue(v).ToString()); Console.WriteLine(" Label: " + m_manager.GetValueLabel(v)); Console.WriteLine(" Help : " + m_manager.GetValueHelp(v)); Console.WriteLine(" Units: " + m_manager.GetValueUnits(v)); break; }

Ensuite l'algorithme à appliquer est le suivant :

  • Instancier un objet "options" avec le répertoire de config décrit plus haut
  • Instancier un manager
  • Connecter la clef avec un AddDriver suivi du port COM
  • Attendre la notification DriverReady pour enfin interagir avec les composants
public Form1() { InitializeComponent(); System.Resources.ResourceManager RM = new System.Resources.ResourceManager("GoufazwaveWin.Resource", this.GetType().Assembly); // Create the Options m_options = new ZWOptions(); m_options.Create(settings.getData("paths","configPath"), @"", @""); // Add any app specific options here... m_options.AddOptionInt("SaveLogLevel", (int)ZWLogLevel.Detail); // ordinarily, just write "Detail" level messages to the log m_options.AddOptionInt("QueueLogLevel", (int)ZWLogLevel.Debug); // save recent messages with "Debug" level messages to be dumped if an error occurs m_options.AddOptionInt("DumpTriggerLevel", (int)ZWLogLevel.Error); // only "dump" Debug to the log emessages when an error-level message is logged // Lock the options m_options.Lock(); // Create the OpenZWave Manager m_manager = new ZWManager(); m_manager.Create(); m_manager.OnNotification += new ManagedNotificationsHandler(NotificationHandler); // Add a driver m_driverPort = RM.GetString("driverPath"); //m_driverPort = @"\COM3"; m_manager.AddDriver(m_driverPort); this.log("Loaded"); }

Manipulez un peu vos appareils ou laisser votre application tourner 5 minutes. Dès que voyez que les informations sont plus précises (température,...) appelez WriteConfig sur le manager en utilisant un bouton par exemple. Ainsi le système n'aura pas à "découvrir" les composants. Cette action crée un fichier de configuration à la racine de l'exécutable, qui peut être réutilisé à travers les programmes.

Gestion des codes

En manipulant les appareils vous allez voir ce genre d'information :

<Node id="2" name="" location="" basic="4" generic="7" specific="1" type="Routing Slave" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete"> <Manufacturer id="0109" name="Vision"> <Product type="2001" id="0105" name="Unknown: type=2001, id=0105" /> </Manufacturer> <CommandClasses> <CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="4"> <Instance index="1" /> </CommandClass> <CommandClass id="113" name="COMMAND_CLASS_ALARM" version="4"> <Instance index="1" /> <Value type="byte" genre="user" instance="1" index="0" label="Alarm Type" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="6" /> <Value type="byte" genre="user" instance="1" index="1" label="Alarm Level" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" /> </CommandClass> <CommandClass id="114" name="COMMAND_CLASS_MANUFACTURER_SPECIFIC" version="1" request_flags="4"> <Instance index="1" /> </CommandClass>

Si vous regardez le fichier de configuration créé ci-dessus vous allez voir la définition des "command classes" en fonction les éléments. A vous d'interfacer ce programme (ou un autre) avec ces éléments pour agir, par exemple stocker les valeurs en base de données !

Attention cependant : un de mes capteurs de porte envoie deux signaux l'un après l'autre qui sont le type d'alarme et son niveau. A vous de voir comment récupérer cette information.

Vous pouvez jouer avec les scènes (si vous comprenez comment ça marche, moi pas) ou interroger ponctuellement une base de données et faire des requêtes REST sur votre super serveur PHP.

Et ensuite ?

Rien à faire pour le moment, vous avez tout ! Si vous êtes vraiment acharné(e), essayez les badgeuses pour chats et les caméras à reconnaissance faciale, ou pire, un moyen de savoir où votre chien a fait ses besoins !

+ Sources des images

]]>
https://blog.goufastyle.org/article/2015/03/14/domotique-minimale-partie-8-domotique-et-z-wave Sat, 14 Mar 2015 20:26:57 +0100
<![CDATA[[Technique] Cacher du code dans une image en PHP]]> https://blog.goufastyle.org/article/cacher-du-code-dans-une-image-en-php Suite à mon article sur le soi-disant danger des cookies sur le net, j'avais juste signalé qu'une image pouvait être aussi dangereuse. Je vais donc vous montrer ci-dessous qu'une simple image peut révéler pas mal d'informations sur votre ordinateur et surtout que l'on peut cacher du code derrière l'appel d'une image !

Simple image : IP et User-Agent

Nous allons commencer simplement : l'appel d'une image statique.

<img src='monimage.jpg' alt='Mon image !' />

Ce qui donne :

Rien de bien sorcier, mais quand l'image s'est affichée, voilà ce qui est apparu dans les logs de mon serveur :

MonAdresseIp - - [14/Dec/2014:21:48:28 +0100] "GET /monimage.jpg HTTP/1.1" 200 216023

Si vous avez Fiddler d'installé vous pouvez aussi voir ce que cette image transporte :


Je sais TOUT sur vous !

Rien qu'en affichant une image j'ai donc :

  • votre adresse IP, et la géolocalisation qui en découle
  • votre User-Agent, en gros le navigateur que vous utilisez

C'est bien pour commencer, d'ailleurs c'est comme ça que l'on génère des statistiques de visites sur les sites web.

Se faire passer pour une image

On va utiliser la librairie GD de PHP pour faire des manipulations sur les images, donc on va utiliser l'appel :

<img src='monscript1.php' alt='Mon image !' />

et le contenu de monscript1.php :

<php // Je fais croire au navigateur que je suis // une image qui peut changer header("Content-Type: image/jpg"); header("Cache-control: no-store,must-revalidate,no-cache"); // Je charge et fais passer l'image dans le code $img = imagecreatefromjpeg("monimage.jpg"); imagejpeg($img); // libération de la ressource imagedestroy($img); exit; ?>

Ce qui donne :

A vous de mettre dans le code une façon plus subtile de récupérer l'IP ou l'User-agent, le temps de navigation,...

Par contre, l'appel d'un script dans une balise img affiche une image ? Whaou ! Cependant il y a un petit souci : l'appel à un script n'est pas très discret... On va donc utiliser le mécanisme d'URL Rewriting d'Apache :

RewriteEngine On RewriteRule ^monscript\.jpg$ %{SCRIPT_URL}script/monscript.php [L]

Ainsi on peut utiliser la syntaxe suivante sans problème :

<img src='monscript1.jpg' alt='Mon image !' />

Ça ne vous suffit pas ? Regardez plutôt :

Facile, rajouter dans le code précédent :

$text_color = imagecolorallocate($img, 233, 14, 91); imagestring($img, 5, 5, 5, 'Il est '.date("r"), $text_color);

C'est comme ça qu'il est possible de faire passer une information dynamique dans un contenu statique, un flux RSS par exemple !

A vous de faire des appels à une base ou à un fichier...

Passer un paramètre dans une image

Prenons un cas simple : vous avez une base de données de mails et vous souhaiteriez savoir quel mail est valide. Il suffit d'envoyer une image qui fera une interrogation serveur et qui passera le Hash MD5 du mail pour prouver que l'adresse en question a bien affiché l'image.

Nous allons encore utiliser la réécriture d'URL à la volée et quelques expressions régulières :

RewriteRule ^monimage-([1-9]+)\.jpg$ %{SCRIPT_URL}monimage.php?param=$1 [L]

Récuperer le paramètre dans le code PHP :

$var = $_GET["param"];

Et voilà le résultat :

<img src='monimage-1234.jpg' alt='Mon image paramétrée!' />

Vous pouvez modifier le numéro près du nom de l'image ci-dessus en l'ouvrant dans un nouvel onglet pour constater la prise en compte du paramètre.

Vous comprenez maintenant pourquoi les clients de messagerie cachent les images.

Prochainement : attention ce site utilise des images !

Nous avons vu comment cacher un comportement derrière une image que ce soit juste à son appel ou en mettant du code paramétré derrière. Là où les cookies représentent juste une paire clef/valeur, nous avons grâce aux images un comportement plus sournois car caché côté serveur. Et pendant la rédaction de cet article j'ai même appris que l'on pouvait y cacher du code Javascript !

+ Sources des images

]]>
https://blog.goufastyle.org/article/2014/12/14/cacher-du-code-dans-une-image-en-php Sun, 14 Dec 2014 23:26:55 +0100
<![CDATA[[Technique] Devinez quoi ? Mon site utilise des cookies !]]> https://blog.goufastyle.org/article/devinez-quoi-mon-site-utilise-des-cookies-
POPUP !!!!! -->

Internet, du moins sa démocratisation, a plus de 20 ans ! J'espère que tout le monde sait maintenant ce qu'est le protocole HTTP, un hyperlien,... En tout cas je suis sûr que les gens savent installer eux-mêmes des extensions comme AdBlock ou NoScript pour se protéger des scripts malveillants. Mais depuis quelques temps je vois un message sur certains sites : SURPRISE : INTERNET UTILISE DES COOKIES ! Mais le pire est que l'affichage de ce message est une obligation légale...

Oui, on est obligé de signaler qu'aller sur le net est dangereux

C'est une recommandation de la CNIL issue d'une demande européenne. En gros chaque site utilisant des cookies à des fins publicitaires et obligé de le signaler à l'utilisateur et à lui apprendre à se servir de son navigateur.

A ce compte-là il faudrait aussi lui signaler que des scripts en Javascript peuvent exécuter du code malicieux, que l'affichage d'une image peut faire des manipulations en base et rien que le fait d'afficher une page permet de récupérer énormément d'informations sur la machine où est installé le navigateur !

Comment j'utilise les cookies

Définition

Wikipedia ou Commentcamarche.net ont une définition standard des cookies et de comment s'en débarrasser, je ne vais pas m'étendre là-dessus.

Pour faire simple il s'agit juste d'une variable du site web stockée sur votre ordinateur afin de garder en mémoire la session ou des réglages (langue, connexion automatique, style,...). Cette variable a une durée qui peut aller de la fermeture du navigateur (variable de "session") à une dizaine d'années !

Mes cookies

Allez hop, petit F12 :


Cookies !!
  • PHPSESSID : c'est le cookie de session de PHP, il permet de dire au serveur quel utilisateur utilise quelles variables.
  • cookiereminder : le cookie qui sert à me rappeler que vous avez compris que mon site utilise des cookies (OMG COOKIECEPTION !)
  • 60gp et 60gpBAK : cookies utilisés par OVH pour mémoriser le cluster de l'instance mutualisée de ce site, ça permet d'éviter à l'utilisateur d'être déconnecté en surfant d'une page à l'autre.
  • BSCI : étonnement je ne trouve ces cookies que dans mon entreprise car il s'agit du pare-feu Bluecoat.

Ne flinguez pas le design de votre site pour ça !


POPUP !!!!!

Maintenant en surfant je découvre plusieurs écoles quant à la prévention de l'utilisateur sur l'utilisation de cookies

  • popup modale.
  • fenêtre alert() de javascript.
  • bandeau en haut, qui décale ou cache le contenu.
  • bandeau en bas, la meilleure solution sauf quand ça s'affiche sur un site mobile.

Tous les sites sont défigurés par ce message ! Surtout quand on sait que mettre une popup modale prend beaucoup moins de temps que de refaire le design d'un site. Par pitié arrêtez avec les popups modales il y en a assez sur le net !

Faîtes comme moi : un petit div planqué dans un menu assez visible. Et surtout retenez notre choix !

Et après

D'un côté on met sur les paquets de cigarettes des messages à propos de ses dangers mais la vente en reste stable... Assommer l'utilisateur avec un message sur chaque site ne fera pas changer grand chose : si je veux l'information je vais la chercher malgré tout ! Et ce n'est pas une popup m'alertant sur les cookies qui fera rebrousser chemin...

+ Sources des images

]]>
https://blog.goufastyle.org/article/2014/10/01/devinez-quoi-mon-site-utilise-des-cookies- Wed, 01 Oct 2014 21:45:04 +0200
<![CDATA[[Technique] 4 ans de Goufablog : suppression du trackback]]> https://blog.goufastyle.org/article/4-ans-de-goufablog-suppression-du-trackback Ça fait maintenant 4 ans que le Goufablog existe ! J'ai encore plein de choses à faire comme par exemple un portfolio, mettre à jour les commandes SQL obsolètes, faire un vrai logo,... Mais pour le moment je vais vite fait me débarrasser du trackback...

Bye bye trackback

Pour réaliser cet article je suis allé faire un tour sur mes statistiques. Voilà ce que j'ai trouvé dans les liens référents d'Urchin :

  • télécharger Minecraft gratuitement
  • rachat de crédit
  • annuaires inversés
  • piratage de compte Facebook
  • salles de sport
  • plomberie (!!)

Franchement...

Je pensais qu'avec le Trackback je pourrais mieux suivre les sites qui mettent mes articles en lien mais j'ai l'impression que c'est encore pire... Je perds notamment de vue les citations et des fois des articles intéressants de gens qui sont tombé sur mon blog.

Je suis quand même sidéré de voir l'acharnement de certains pour monter en pagerank google juste en mettant un commentaire sur mon blog ! Et je passe sur certains "hackers" qui créent juste une page sur un CMS de deviantart.

Donc soyons clairs : pour ce qui est des échanges de lien, tout spam par commentaire se fera systématiquement refuser ! Par contre demander poliment peut marcher via la page de contact par exemple.

Futur

Avec une naissance imminente je n'ai pas trop le temps de faire de la rédaction d'article, mais j'ai quand même 33 brouillons qui attendent d'être publiés. J'ai repris une mission qui implique un déplacement en métro donc je vais avoir le temps de peaufiner quelques articles. Au programme :

  • mon installation domotique simpliste maintenant que je suis installé.
  • du minecraft, apparemment les recherches sur google font tomber sur mon blog.
  • moins d'article de société, je suis trop blasé de l'actualité en ce moment...

Il faut savoir que ce blog restera une zone où je pourrai exprimer mes opinions avec plus de 140 caractères, des images et de la lisibilité, je ne vais pas tomber dans le "ça prend trop de temps j'abandonne" donc ne vous attendez pas à de la réactivité de malade du genre 1 article tous les mois... je vais à mon rythme ! Si vous voulez des nouvelles fraîches je vous propose à ce compte-là de suivre mon compte Twitter.

Cependant une refonte s'impose : en effet j'ai mis à jour PHP vers la version 5.5 sur mon serveur personnel, ce qui me force à basculer tous mes appels de requêtes MySQL. Je vais aussi en profiter pour faire une petite mise à jour graphique notamment pour faire un "vrai" logo qui puisse rentrer dans ma page google+. Je compte faire quelques esquisses voire demander à un service en ligne comme Fiverr.

Bonne lecture à toutes et à tous, n'oubliez pas de faire un petit tour dans le Goufashop, il y a plein de jeux gratuits issus du site HumbleBundle.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2014/09/11/4-ans-de-goufablog-suppression-du-trackback Thu, 11 Sep 2014 22:49:18 +0200
<![CDATA[[Technique] Je passe aux Dogecoins !]]> https://blog.goufastyle.org/article/je-passe-aux-dogecoins-

Toujours dans ma recherche de non-monétisation de mon blog, je suis passé comme quelques gens sur l'édito de Korben parlant du Dogecoin, une nouvelle crypto-monnaie à l'instar du Bitcoin. Cependant ayant loupé le coche avec ce dernier, j'ai voulu essayer de voir comment fonctionne ce mécanisme et surtout à qui il profite.

OK, donne-nous LA définition d'une crypto-monnaie !

Un livre de comptes partagé sur le réseau

Avant toute chose, enlevez-vous de la tête tout notion "physique" de la monnaie : nous sommes en présence d'échanges de transactions sur un réseau. Mais qui dit transaction dit livre de comptes et ça tombe bien : quel meilleur moyen d'utiliser le P2P pour partager un fichier qui serait ce grand livre de comptes. Par conséquent chaque "participant" possède différentes briques de ce registre et le partage avec la communauté, ce qui permet de faire des vérifications multiples sur les transactions faites sur le réseau. Pour comprendre comment fonctionne le partage P2P, regardez mon article sur le partage collaboratif.

Tout-transaction sans traçabilité

En faisant une transaction on ne peut voir que très peu de données comme l'expéditeur par exemple. C'est suffisant pour le système qui voit la valeur transiter. Plus de chèque, d'ordre de virement, d'intérêts,... tout passe d'un simple clic sur une adresse.

Ce fonctionnement est le même que l'argent liquide : pas de traces mais une confirmation de la transaction, il a cependant les mêmes risques à savoir le financement non tracé dans des affaires pas très nettes.

Ne pas compter en vivre

A moins que vous ne soyez un expert en bourse, les restaurant et autres épiceries n'acceptent pas encore ce genre de monnaie car il faut bien l'admettre, vous l'échangeriez contre quoi ? Dans un monde où les entreprises ou les gouvernements ont peur du numérique, les *coin sont plus là pour faciliter l'échange en terme de services ou de micro-transactions et non pas pour faire des grands achats (sauf quelques cas extrêmes).

Le Dogecoin, une monnaie parmi les autres

Pourquoi le Dogecoin ?

Bitcoin, Litecoin,... Toutes ces cryptos-monnaies se démarquent de par leur valeur, leur algorithme de fabrication, leur utilisation,... Voici ce qui m'a fait venir vers le Dogecoin :

  • nouveauté, le Dogecoin n'existe que depuis Décembre 2013.
  • monnaie axée sur le pourboire et la communauté un peu comme le sol-violette toulousain : sans l'ambition d'être la monnaie suprême au même rang que le Bitcoin.
  • certains blogueurs commencent à l'implémenter, c'est une façon de contrer le service Flattr qui impose le paiement alors qu'avec ce système c'est entièrement libre.

Comment ça fonctionne

En gros il faut d'abord créer un portefeuille en ligne ou local. Ce portefeuille va vous faire bénéficier d'une adresse de transfert et de stocker votre argent. Si vous avez choisi la méthode locale, vous devrez installer un petit logiciel en fonction de votre système. Physiquement, le portefeuille est le fichier C:\Users\[User]\Roaming\dogecoin\wallet.conf ne le perdez pas!! Je vous conseille aussi de le chiffrer en allant dans les options avant de faire toute transaction.

Vous pouvez créer une dizaine d'adresses différentes pour répartir les "caisses" où les gens vont vous transférer des "Doges", vous pourrez ainsi calculer grâce à une API la quantité de Doges obtenus à une adresse.

Comment on en obtient ?

La solution la plus simple consiste à utiliser des Faucets, c'est des sites qui donnent gratuitement des Doges au gens s'ils renseignent leur adresse. Cependant ces sites sont très souvent à sec car ils marchent uniquement avec des dons ou de la publicité, c'est pour cela que je vous conseille de faire du minage groupé dès le début.

Le minage consiste à utiliser la puissance de calcul de votre carte graphique pour créer des nouveaux blocs de transaction valides. Si vous en trouvez alors le système vous fournit automatiquement une quantité de Doges spécifique. Le problème est que miner prend du temps surtout si vous le faites tout(e) seul(e). Maintenant c'est à vous de voir...

Si vous avez 3 cartes graphiques haut de gamme de dernière génération en SLI/CrossFire vous pouvez les faire travailler la nuit ou pendant que vous êtes au boulot et essayer de miner "solo" pour avoir tous les bénéfices de la découverte d'un bloc mais même à haute vitesse cela peut prendre du temps. Pour miner solo fermez votre portefeuille, allez dans le fichier C:\Users\[User]\Roaming\dogecoin\dogecoin.conf et ajoutez (ou remplacez) les lignes suivantes :

rpcuser=[un nom d'utilisateur] rpcpassword=[un mot de passe long] rpcport=[un port d'utilisation] daemon=1 server=1

Rouvrez votre portefeuille et téléchargez le logiciel de minage adapté à votre carte graphique, suivez les statistiques de minage en sachant qu'un bon rapport de calcul commence à partir de 200 kH/s. Pour les cartes AMD j'ai trouvé ce site qui montre comment bien configurer le logiciel.

Si vous avez une carte graphique standard que vous souhaitez la mettre à contribution, vous pouvez miner groupés en réseau avec d'autres utilisateurs ayant une puissance de calcul équivalente. Pour cela inscrivez-vous sur un site de "pool", vous aurez juste à suivre les instructions sur le site. Il se peut même que vous ayez accès à une API pour suivre votre capacité de minage et votre compte, en règle générale en voici la syntaxe sinon explorez le site. Le minage groupé partage les gains des découvreurs de bloc mais à cela s'ajoute une taxe propre à chaque site.

Dans tous les cas attention à la consommation de courant et à la chaleur dégagée par la carte graphique. En effet ce serait dommage d'être perdant sur le rapport gain en dogecoin/facture EDF. Regardez la consommation de votre matériel et vérifiez s'il est rentable de laisser tourner votre matériel longtemps. Assurez-vous aussi que la température de fonctionnement ne dépasse pas 85°C (ou celle préconisée par le constructeur) sinon vous allez endommager votre matériel !

Si vous ne voulez pas miner, alors il ne vous reste plus que le troc.

Comment vais-je le dépenser ?

Le but d'une rémunération de type pourboire sur ce blog ne va pas consister à m'acheter la dernière voiture à la mode. Dans un premier temps je voudrais déjà rembourser l'hébergement de ce blog mais vous vous en doutez, OVH n'accepte pas (encore) les Dogecoin. Il sera donc question de compenser le coût de l'hébergement par l'achat d'autres choses : des jeux à tester, du matériel informatique,... Mais surtout la rémunération me permettra de me motiver à vous fournir du contenu plus fréquent, ce sera pour moi surtout une forme ce reconnaissance.

Pour me faire un don, regardez en haut du menu à droite du site et flashez (ou copiez) l'adresse de destination !

N'hésitez pas à jeter un oeil sur cette nouvelle monnaie pour la faire prospérer et si vous voyez des bonnes affaires, vous pouvez les partager dans les commentaires.

Bon minage !

+ Sources des images

]]>
https://blog.goufastyle.org/article/2014/04/24/je-passe-aux-dogecoins- Thu, 24 Apr 2014 21:53:19 +0200
<![CDATA[[Technique] Non informaticien]]> https://blog.goufastyle.org/article/non-informaticien

Je n'arrive toujours pas à m'y faire : la plupart des gens de ma génération ne sont pas des informaticiens. Ils manipulent des appareils électroniques toute la journée, tapent au clavier, font toujours les mêmes gestes inutiles,... et pourtant je dois traiter avec eux dans le cadre de mon métier. Vous rigolez bien quand vous voyez un gag sur quelqu'un qui ne s'y connaît pas en informatique, et pourtant moi je dois réagir avec tact et force de proposition pour répondre à un besoin, des fois irréalisable!

Un client avant tout

Service après-vente bonjour!

- Comment on fait pour arrêter l'ordinateur?
- Il suffit de cliquer sur Démarrer et...
- Mais non je veux l'arrêter, pas le démarrer!

L'ordinateur c'est comme le grille-pain, la voiture ou la télé : quand on l'achète on veut que ça marche!. Par conséquent on comprend assez vite pourquoi les gens s’énervent quand ils ne voient pas pourquoi l'ordinateur ne se comporte pas comme ils veulent. Celui qui va se faire taper dessus est juste à côté du livreur : ce sera donc le service informatique de la société, le vendeur au service après-vente, la boutique de réparation des PCs et en dernier le fiston qui a grandi avec les ordinateurs : votre serviteur.

J'ai donc droit au téléphone qui sonne pour essayer de dépanner à l'aveuglette l'écran qui ne s'allume pas (pas branché), les fichiers qui disparaissent par enchantement (attaque virale), une offre extraordinaire reçue par mail (phishing),...

L'exigence absolue


Comment je résous vraiment un problème...
- Voilà votre page de facturation, en cliquant ici vous pourrez imprimer votre liste de produits et transférer les données (en XML) au second logiciel...
- Bien, mais on peut mettre un bouton pour exporter les résultats sous Excel?

Le client ne sait pas ce qu'il se passe derrière l'écran, il va donc exiger monts et merveilles qui vont coûter les yeux de la tête. Ajoutez à ça quelqu'un qui feint la connaissance ou qui va demander à son ami informaticien pour sortir son fameux "pff, les doigts dans le nez!" Il faut anticiper car vous n'arriverez pas à le convaincre de lâcher cette évolution qui ne va satisfaire que sa personne. Prévoyez donc l'export des données, la maintenabilité de l'application,... en amont de votre développement mais ne le proposez qu'au dernier moment.

Le rejet de la technologie

- C'est bon, c'est un fichier ASCII.
- bah tant qu'il met ses skis!

Il y a plusieurs types de non-informaticiens réticents :

  • ceux qui ont peur de la technologie et du changement (houlà c'est compliqué!)
  • ceux qui la refusent (ah non je préférais ce qu'il y avait avant)
  • ceux qui font croire qu'ils s'y connaissent (je suis sûr qu'un coup de SELECT sur une table fournira la donnée manquante)
  • ceux qui veulent tout maîtriser (il faudrait une animation comme sur powerpoint!)

Il faut donc adapter la réponse au besoin en fonction de votre interlocuteur : ne pas faire un changement trop marquant, bien expliquer la démarche de résolution d'un besoin, et par dessus tout rester catégorique quant à une demande impossible : tout est possible! Donnez-moi juste les moyens et le temps. Attention cependant à un petit risque : le refus d'utiliser votre application, si vous ne répondez pas à votre besoin ils risquent de réutiliser un ancien logiciel, ce qui rendrait votre travail inutile, et risquent surtout de se plaindre à leur référent qui vous mettra à la porte.

Rajoutez un peu de processus

- Merci d'avoir réparé mon PC ! Mais, il n'y a pas mes documents!
- Ah, tu n'as pas spécifié dans la demande qu'il fallait transférer tes données
- QUOI ?!?

Je suis prêt à déplacer des montagnes pour voir un sourire béat sur le visage de mon client quand je résous quelque chose, mais pour faire ça je dois avoir les bons outils. Bien sûr il me faut un poste de travail dédié à ma mission, un accès au réseau de l'entreprise, une boîte mail interne et un accès vers l'extérieur facile d'accès. Malheureusement j'ai assez d'expérience pour dire que la moindre de mes demandes va exiger la signature en 4 exemplaires d'un formulaire aux questions répétitives et aberrantes, l'approbation de la demande par 3 niveaux de hiérarchie et surtout 2 mois d'attente. Les entreprises qui sont à fond dans la sécurité vont complètement blinder le processus de livraison d'un logiciel en faisant passer le livrable dans une multitude de serveurs de tests. Bref des non informaticiens qui gèrent des processus sur la gestion de parc informatique, aïe aïe aïe!

Education

Vous connaissez l'histoire de l'homme affamé auquel on donne un poisson alors qu'il ferait mieux d'apprendre à pêcher ? Eh bien c'est la même histoire quand je répare un ordinateur à quelqu'un qui ne s'y connait pas (ou fait semblant), et comme le propose un autre article sur le net : laissez-les se débrouiller ! Au final ils feront comme moi je fais pour résoudre une solution complexe : une recherche sur Google. Aujourd'hui tout le monde utilise des appareils interactifs tels que les smartphones ou les tablettes mais en exploitent-ils vraiment toutes les ressources ? Seule l'expérience forme le mieux dans ce monde et c'est en découvrant des erreurs ou des contraintes techniques que les gens auront une meilleure maturité sur l'informatique et pourront comprendre pourquoi je ne veux pas coder ce bouton de lien vers Facebook.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2013/08/13/non-informaticien Tue, 13 Aug 2013 20:34:45 +0200
<![CDATA[[Technique] Intégrer facilement le Konami Code sur votre site]]> https://blog.goufastyle.org/article/integrer-facilement-le-konami-code-sur-votre-site Vous connaissez le Konami Code ? Cette combinaison de touches composée au milieu d'un jeu pour débloquer des bonus ou tout simplement passer le niveau. Eh bien il est facile de le mettre en place dans un site web pour que ces les adeptes de ce code puissent découvrir une facette inattendue de la conception de votre blog, pour leur faire découvrir un mini-jeu ou une page cachée...

C'est quoi ce code ?

Haut, Haut, Bas, Bas, Gauche, Droite, Gauche, Droite, B, A

Dans tous les jeux édités par l'entreprise Konami, si vous tapez ce code vous aurez de belles surprises entre des vies supplémentaires, de l'équipement, ou une mort soudaine. On peut voir par exemple dans Les Mondes de Ralph le roi faire cette combinaison pour accéder au code source du jeu. Bien entendu il existe d'autres codes dans d'autres jeux pour obtenir des bonus :

  • Dans Tomb Raider 2 : allumer une torche, un pas en avant, un pas en arrière, trois tours sur soi-même et un saut en avant ou en arrière donnent respectivement un accès au niveau suivant et toutes les armes. Désolé je ne connais pas le code pour la déshabiller, mais JeffPalmier doit le connaître...
  • Dans Duke Nukem 2 : taper "eat" (avec un clavier anglais) permet de redonner de la vie et "nuk" donne toutes les munitions et l'arme du niveau en cours.
  • Dans Super Meat Boy : taper "petaphile" dans l'écran de sélection des personnages débloque Tofu Boy, un personnage jouable aux capacités réduites.

Implémentation

Conception

La conception est très simple : intercepter au clavier un code de 10 touches. On stocke donc le vrai code dans un tableau et on empile les entrées clavier dans un autre. Pour l'interception de caractères il vaut mieux prendre jQuery pour ne pas se poser de questions quant à la compatibilité des navigateurs...

Le code Javascript

Un peu de Javascript à placer au début de votre page. Etant donné que l'on capture les caractères, pensez éventuellement à surcharger votre fonction gérant les raccourcis clavier si vous en avez une.

// initialisation du buffer clavier var myCode = new Array(); for(i=0;i<10;i++) { myCode[i]=0; } // initialisation du konami code (à l'envers cause empilage) var kCode = new Array(65,66,39,37,39,37,40,40,38,38); // empiler la dernière touche saisie function stackArray(array, value) { for(i=9;i>0;i--) { array[i] = array[i-1]; } array[0] = value; } // tester les différences entre le code et la saisie function testArray(a,b) { for(i=0;i<a.length;i++) { if (a[i]!=b[i]) return false; } return true; } // action! function konami() { alert("konami"); } // interception de saisie $(document).keyup(function(event) { stackArray(myCode,event.keyCode); // si c'est la dernière lettre "a" du code if (event.keyCode==65 && testArray(myCode,kCode)) { konami(); } });

Et après ?

A vous de voir ce que vous voulez faire. Grâce à Javascript et jQuery vous pouvez faire des trucs assez amusants.

Rediriger vers une autre page :

window.location.href="http://mapage.com";

Afficher une boîte d'alerte :

alert("message");

Changer la couleur du fond d'un élément (ou du site si l'élément est body) :

$("#identifiant").css("background-color", "#FF4FC7");

Un code qui se propage

  • Google, déjà connu pour ses recherches loufoques telles que "do a barrel roll" ou "zerg rush" a mis le Code dans Google Reader pour faire apparaître des ninjas dans la barre de menu.
  • Facebook fait apparaître des étoiles.
  • En faisant ce code, on déclenche un succès dans Universe Sandbox.

Ma motivation de cette implémentation vient d'une fiche de qualité de @Nico3333fr spécifiant qu'un bon site doit obligatoirement avoir un Konami Code. Son site en contient d'ailleurs un !

Une liste de tous les sites utilisant le Konami Code peut être trouvée ici ou ici. Bien entendu votre serviteur a implémenté ce Code ici, à vous de voir ce qu'il fait ! Et vous, qu'avez-vous trouvé ?

]]>
https://blog.goufastyle.org/article/2013/04/10/integrer-facilement-le-konami-code-sur-votre-site Wed, 10 Apr 2013 21:43:47 +0200
<![CDATA[[Technique] Liens, publicités et Neutralité du Net]]> https://blog.goufastyle.org/article/liens-publicites-et-neutralite-du-net
-->

En ce début de nouvelle année, que je vous souhaite bonne et heureuse, il y a quelques news qui commencent déjà à enflammer la toile : la presse qui ne veut pas que Google News référence ses liens quitte à les faire payer et Free qui choisit de bloquer de façon obscure toutes les pubs de ses abonnés. Des choix de marketing qui relancent le débat sur le modèle économique dédié à la publicité, la présence sur le Net de certains géants, l'accessibilité de l'information gratuitement et surtout la Neutralité du Net. On croyait avoir échappé à l'apocalypse mais finalement on dirait qu'une fenêtre est en train de s'ouvrir violemment...

Un peu de technique

Neutralité du Net, késaco?

Il s'agit d'un principe simple : Le moindre octet de donnée transitant sur le web doit être fourni équitablement, sans restriction de débit et sans frais supplémentaires. Pour résumer, vous n'avez pas à payer 20 euros par mois en plus de votre abonnement web pour obtenir Youtube ou Facebook plus rapidement parce que vous habitez en campagne.


Exemple de bridage d'Internet

Cependant il s'agit juste d'un principe qui n'est pas appliqué par les opérateurs pour des raisons techniques (infrastructure) ou stratégiques (légalité, mise en avant de services,...) : blocage des flux P2P ou newsgroup sur les plateformes mobiles, bridage du débit de certains sites pour privilégier les autres,... la Quadrature du Net se bat d'ailleurs pour mettre en place ce fonctionnement et ainsi garantir un Internet libre sans contraintes et accessible, tout l'inverse du projet #ACTA.

Tissons des liens!

Le lien est l'essence même d'internet, le HT de HTML et HTTP signifie Hypertext ou Hyperlien en français, d'ailleurs la balise HTML pour faire un lien est on-ne-peut plus simple :

<a href='adresse'>Titre du lien</a>

Imaginez que vous êtes dans un livre et que l'on vous dit d'aller à une page en particulier ou de regarder une référence dans un autre ouvrage, quel plaisir de pouvoir accéder directement à l'élément aussi rapidement q' un clignement d'oeil ! Aujourd'hui, le lien est un facteur clef pour le référencement dans les moteurs de recherche : il faut qu'il soit court, précis, avec des mots-clefs. Les blogueurs se les échangent entre eux pour mieux se faire connaître mais hélas la presse en ligne n'y voit qu'une façon rapide et gratuite d'accéder à l'information. J'y viens plus bas.

Les liens sont cependant très utilisés pour le spam par référencement, et ce grâce aux fermes de liens. Il s'agit de robots qui prennent des liens de sites au hasard ou selon une thématique (nouvelle chanson/film, médicaments,...) pour faire en sorte que quand le moteur de recherche inspecte sa page, il met le site malveillant, bien entendu rempli de publicités, dans les premiers résultats.

Le fichier robots.txt pour empêcher l'indexation

Si vous ne voulez pas qu'un robot puisse indexer votre site ou une partie, il faudra créer un fichier robots.txt à la racine de votre arborescence, par exemple empêcher tous les robots d'accéder à un répertoire :

User-Agent : * Disallow : /repertoire

Pratique pour ne pas indexer les pages d'administration mais hélas le simple fait d'afficher dans un fichier en lecture libre les endroits auxquels il ne faut pas accéder dévoile une faille de sécurité. Le site Reflets s'est d'ailleurs amusé à trouver quelques fichiers robots.txt qui soit cachent des pages particulières à ne pas montrer, soit qui essayent de communiquer sur un plan légal en français avec un robot codé en C++ ou en Pyhton...

C'est ça l'inconvénient de ce fichier : on montre à tout le monde ce que l'on ne veut pas montrer, mais bon il vaut mieux montrer ce genre d'information à quelques informaticiens avertis qu'à tout un panel d'internautes sachant utiliser la syntaxe de recherche de Google...

Dans la pub


Ah la publicité! Ce grand débat inépuisable :

  • c'est envahissant!
  • ce n'est pas assez ciblé
  • c'est un modèle de consommation
  • ça permet à certains sites de pouvoir ne pas faire payer leurs visiteurs
  • c'est du lavage de cerveau
  • ça nous aide à mieux consommer en général plutôt que de tester plein de produits ayant des propriétés différentes
  • c'est toujours orienté buzz
  • ça permet de faire connaître un nouveau produit

Tout le monde se rappelle tout petit du moment où il fallait avancer la cassette VHS pendant les pubs souvent répétitives au milieu du film. Sur Internet ça n'a pas changé : il faut cliquer sur la croix, ne pas survoler un cadre, cliquer sur "passer la publicité", attendre, ou tout simplement installer Ad Block Plus sur son navigateur!

Il faut cependant savoir que certains sites web ont choisi un modèle publicitaire pour bénéficier d'une source de revenus à l'affichage de la pub ou lors d'un clic. Certains en sont complètement remplis, d'autres se contentent d'un petit espace assez isolé dans un menu ou au bas de la page. Après tout dépend du contrat publicitaire choisi : la régie de pub voudra peut-être que l'encart soit visible dès l'affichage de la page, elle voudra aussi s'assurer que le taux d'affichage ou de clic est fort quitte à faire payer des frais supplémentaires. Ce qui force donc le webmaster à utiliser des techniques pour faire voir le plus de publicités possible : rafraîchir automatiquement la page toutes les X secondes, faire des liens vers plusieurs de ses propres articles (coupable), faire un article de deux paragraphes à propos d'une vidéo trouvée sur Youtube,...

Malheureusement les publicités commencent à adopter les mêmes techniques que le spam pour ne pas être détectées et la dernière à la mode est tout simplement le hardcoding : le webmaster écrit en dur le texte de la pub sur son site et ne peut donc pas être bloqué...

Un peu d'actualité

La presse et les liens

Quand on va sur la page Actualités de Google, on peut voir un recueil de toutes les pages de magazines en ligne comme le Figaro, le Monde, le Nouvel Observateur,... avec des liens vers les articles ayant un rapport avec l'actualité du moment. Cette page de recueil est une bénédiction car en un coup de molette de souris on sait tout ce qu'il s'est passé en ce bas monde en quelques secondes. Si l'on veut voir plus de détails il suffit d'accéder aux différentes pages proposées en plus de l'article principal. Plus besoin de regarder la coiffure du présentateur du journal de 20h, on peut suivre en direct un match de football ou savoir où en est un évènement quelconque.

Cependant certains sites de presse ne souhaitent pas bénéficier de cette visibilité sur la page de Google News pour tenter eux-mêmes de faire leur propre référencement via leurs abonnements. Et c'est là où la logique s'effondre tout simplement : des gens publient des articles sur Internet pour ne pas qu'ils soient visibles sur Internet.... Les régies de presse utilisent donc plusieurs techniques pour empêcher cette publication : le robots.txt que j'ai décrit ci dessus, la menace d'un procès comme a fait la presse belge et enfin... le paiement du lien à l'unité (300 euros quand même) comme le demande la presse irlandaise!

Attendez... Faire payer l'accès à une page de texte ? Hélas copier du texte est aussi facile que de faire un clic-droit de souris ou d'appuyer sur la touche Imprime-Ecran, donc protéger un article est aussi inutile que de protéger une oeuvre audio-visuelle ! Le problème est que le moteur de recherche ou quiconque ne voudra pas payer pour une telle aberration et ce site va tout simplement perdre en visibilité, c'est ce qui est arrivé à la presse belge qui a demandé un retrait chez Google mais qui est très vite revenue sur sa décision...

Blocage de pub pour tous

EDIT : Free semble avoir fait marche arrière, mais le débat est toujours actif.

C'est l'information capitale de ces quelques jours : la dernière mise à jour de la Freebox V6 bloque automatiquement les publicités par défaut! Ah enfin on est débarrassés de ces pubs envahissantes oui mais comment vont faire les blogueurs et autre pour s'en remettre de toutes façons tout le monde a installé Ad Block sur son navigateur et la neutralité du net alors? Tout le monde a réagi à cette initiative en brandissant le hashtag #adGate, certains ont résilié leur abonnement, d'autres ont carrément proposé de bloquer l'accès à leur site aux Freenautes !

On connaissait tous Free pour ses actions coup de poing et innovantes comme l'invention de la box, le forfait net à 30 euros pas mois, l'envoi d'une liste papier de potentiels pirates à la Hadopi, le forfait mobile à 2 euros par mois,... Mais depuis un certain temps, Free rencontre des problèmes de débit avec le site Youtube, surtout le soir quand tout le monde s'y connecte. On conçoit donc que cette opération de blocage semble être un coup porté à Google et son service AdSense pour mettre la pression et demander des négociations quant à l'interconnexion des services. Malheureusement cette atteinte bloque aussi d'autres services notamment Google Analytics dont beaucoup de webmasters se servent pour analyser la performance de leur site et les liens de référencement. Mieux encore : toutes les pubs sont bloquées ! Toutes ? Non ! Les pubs sur le site du journal Le Monde sont encore affichées, peut-être parce que le directeur en est un actionnaire ?

Attendez... Couper l'accès à une donnée, privilégier une source ? Eh oui, ça remet en cause la Neutralité du Net qui garantit le bon cheminement d'une donnée sur la toile ! Mon avis est le suivant : en tant que développeur il peut m'arriver de vouloir tester l'intégration de publicités sur le site web d'un client, cette option n'est donc pas bien pensée car avec Ad Block je peux choisir de mettre certains sites dans une "liste blanche" car je les teste, car je sais que leurs publicités ne me gênent pas dans ma navigation, ce qui n'est pas le cas d'un simple interrupteur qui coupe toute la communication d'un coup.

Conclusion : le libre arrivé trop tôt

Je souhaite conclure sur un autre constat : Internet est une source gratuite d'information, mais le service en amont doit quand même être rémunéré (salaire, infrastructure, serveurs,...). On aura beau protéger nos articles avec une licence CC gratuite et libre de partager, ça ne nous permettra pas d'acheter à manger. D'un côté les blogueurs y mettent du coeur pour présenter une passion, mais de l'autre côté les grosses sociétés veulent tirer profit d'une visibilité en ligne.

Internet est donc comme un gros gâteau où tout le monde veut avoir la part la plus grosse pour espérer avoir le plus de revenu, mais ce gâteau se mange avec les yeux : ce n'est pas un catalogue de produits comme le veulent certains adeptes du Web 2.0 mais il s'agit de la connaissance de l'humanité, à partager bien sûr !

+ Sources des images

]]>
https://blog.goufastyle.org/article/2013/01/08/liens-publicites-et-neutralite-du-net Tue, 08 Jan 2013 19:01:02 +0100
<![CDATA[[Technique] Le spam Facebook, ne pas tomber dans le piège]]> https://blog.goufastyle.org/article/le-spam-facebook-ne-pas-tomber-dans-le-piege Je vous avais déjà parlé des mails de spam ou de phishing, aujourd'hui je vais m'attaquer à une forme de harcèlement non sollicitée beaucoup plus fourbe puisque elle est faite à notre insu : le spam viral Facebook. Dans cet article vous allez apprendre à différencier les spams des messages ordinaires de vos amis.

Définitions

  • post/tweet : entrée d'une relation sur le réseau, ça peut être un texte, un lien, une photo ou une vidéo
  • timeline/journal : ensemble des posts de nos relations généralement organisé par ordre déchronologique
  • buzz : tentative (généralement désespérée) de faire parler d'un évènement assez rapidement. On parle de buzz viral quand c'est les internautes eux-mêmes qui transmettent l'information, et de "bad buzz" si l'évènement passe mais en mal.

Symptômes

Pour résumer, il s'agit d'un post sur votre timeline qui contient un lien ou une vidéo appelant le buzz, en règle générale un ami qui n'a aucune activité se met soudainement à vous inviter à jouer à des jeux ou à découvrir une vidéo intéressante. Ils sont assez faciles à détecter :

  • changez les couleurs de Facebook grâce à cette application!
  • regardez qui consulte votre profil!
  • oh mon Dieu! Tel homme politique se fait humilier!
  • vidéo d'accident de voiture, mort violente, accident,...
  • sexe sous-entendu, blague, photo provocante,...
  • machin aime ce lien : vidéo

Quand vous cliquez sur le lien, vous tombez sur une page bourrée de publicité et une action utilisateur obligatoire pour continuer comme par exemple appuyer sur un bouton anti-spam, cliquer sur play,... Une fois que vous avez fait cette manipulation c'est trop tard : la page poste automatiquement dans votre profil un lien vers ce site alors que vous n'avez même pas commencé à voir le média.


Page atteinte quand on clique sur un spam.
  • Titre évocateur et vidéos liés.
  • La vidéo ne se lance pas tant qu'une action n'a pas été faite.
  • Copie de l'interface de Facebook dans les commentaires.
  • Publicités (la plupart sont masquées par Ad-Block), ici "Gagnez un MacBook Air", "Qui regarde ton profil?",... Notez la barre en haut qui ressemble à l'installation d'un plugin sous Firefox, alors que je suis sous Chrome...

Comportement

Pour savoir si cette vidéo de chaton en train de se laver n'est pas piégée, quelques règles s'imposent :

REGLE D'OR
SURTOUT NE PAS CLIQUER SUR LE LIEN OU L'IMAGE

Un ami

Regardez le message du post et posez-vous les questions suivantes

  • est-ce que cet ami est actif sur Facebook? Regardez son profil et comparez les dates de parution des posts
  • est-ce le genre d'activité qu'il poste d'habitude (généralement il poste ses photos de vacances, là il poste un truc politique, il se met à parler en anglais) ?
  • est-ce que le message est bien de lui (message générique, fautes d'orthographe ou erreur d'accents dénotant un copié collé) ?

Si vous doutez déjà sur ces questions, commentez son post en lui demandant si ça vient bien de lui. Mais vous pouvez d'ores et déjà repérer des phrases type :

  • 'faut que tu voyes ça!
  • énorme!
  • j'ai trouvé cette vidéo sur tel site
  • machin a aimé un lien
  • message avec des caractères bizarres, du genre Ä© ou �

Le post, applications et vidéos intégrées

Maintenant on va regarder de plus près le post

  • est-ce que l'image de post est un site de streaming connu (youtube, dailymotion,...), attention certains sites imitent la vignette d'aperçu en mettant une fausse flèche "play"
  • survolez le lien, est-ce un site connu ?
  • le titre du lien est en adéquation avec l'image d'aperçu ?
  • le titre est trop accrocheur ?

Si vous n'avez pas confiance au post, faites une recherche du titre de la vidéo sur Youtube ou Dailymotion, et si elle vous plait partagez-la à partir du site.

Blocage

Ça y est on a tous les éléments qui nous permettent de dire que le post est issu d'un spam. Avant d'insulter cet ami de tous les noms pour sa maladresse il faut bloquer le site, pour cela il y a deux méthodes :

  • En haut à droite du post se trouve une croix qui permettra de signaler le site.
  • Si le message vient d'une application, aller dans Options > Confidentialité, taper le nom de l'application et valider pour la bloquer.

Cas particulier : l'affiliation

Il se peut que certains de vos contacts soient embauchés dans une agence de pub ou dans une boîte jouant fort sur la communication, vous risquez donc de voir changer sa ligne éditoriale pour poster des éléments sur son métier ou son association. A vous de voir si ces nouvelles informations sont intéressantes. Pour repérer ce genre de situation :

  • changement de la photo de profil et des informations
  • post multiple d'éléments ayant rapport avec l'affiliation, les posts doivent être différents

Ce n'est pas du spam car ce n'est pas fait à l'insu, mais ça reste du matraquage. Signalez à votre contact de réduire un peu ce type d'information mais gardez à l'esprit que ces annonces peuvent intéresser d'autres personnes.

Mise en situation

Partage conforme


Partage standard.
  • Commentaire simple pour montrer qu'on à bien partagé quelque chose de son plein gré.
  • Site correct (ici youtube.com). Attention au cyber-squatting, les sites écrits avec des fautes (genre yotuube.com)
  • Lien standard (ici un clip).

Partage personnalisé.
  • Toujours un site correct et un lien normal.
  • Commentaire personnalisé par rapport au mode de vie du contact (je confirme, elle joue bien à Ideo ;))
  • Participation des amis au partage (appréciation, commentaire,...)

Spam


Spam évident.
  • Aimer un lien? Non, je n'aime pas un lien, je le partage!
  • Titre incitant au voyeurisme avec la photo suggestive qui va avec.
  • Drôle de site... jetons un oeil sur Google!
  • C'est marrant, ce site est présent sur d'autres posts depuis peu!

Affiliation


Un profil qui fait de la pub pour une marque.
  • Changement de l'image de profil et d'informations (nouvel employeur,...)
  • Omniprésence de la marque partout.

Pour rappel, ce n'est pas du spam. A vous de voir si cette information est importante ou non.

Enjeux

Qu'y a-t-il de mal à partager une vidéo automatiquement quand bien même je la partage à mon insu avant même de l'avoir vue ? Simple : les revenus publicitaires. En effet quand on clique sur le lien on se retrouve sur une page bourrée de publicité, il suffit juste de les afficher pour que l'auteur du site soit rémunéré. Et bien sûr pour que le plus de monde possible puisse accéder à ce site, il faut le promouvoir et tous les coups sont permis... C'est la raison pour laquelle je ne monétise pas (encore) mon blog, pour ne pas tomber dans le piège de la performance et devoir assommer mes lecteurs de liens vers mes autres articles.

Bonus : spam Twitter

Twitter aussi à droit à du spam mais étant donné qu'on ne peut pas poster à la place de quelqu'un, l'accès est protégée. Il reste cependant une façon de vous forcer à cliquer sur un lien : la mention.

En gros vous recevez un message comme quoi quelqu'un vous a mentionné et le message est on ne peut plus explicite :

@Goufalite http://cliqueici.com

Les réflèxes sont les mêmes, et bien entendu NE PAS CLIQUER SUR LE LIEN !

Si vous êtes sur le site de Twitter, survolez le lien pour voir la véritable destination du lien pour qu'il soit raccourci. Si ça ne marche pas n'insistez pas, c'est trop louche pour que cette personne cache son lien dans une suite de raccourcisseurs d'URL.

Vous connaissez la personne? Oui? Alors on la contacte pour lui demander quel est ce lien... Non? Alors on regarde le profil. Voici à quoi ressemble un profil de spammeur :


Profils de spam Twitter.
  • tête d'oeuf (nouvellement arrivé ou pas d'imagination pour mettre une image) ou photo de fille sexy
  • pas ou peu de description du profil, ou alors des mots au hasard les uns après les autres
  • plein de mentions à différentes personnes avec un lien
  • peu d'abonnés
  • tweets répétitifs ou aléatoires (phrases toutes faites, mot en désordre)

Pour s'en débarrasser c'est très simple : il suffit juste de le reporter comme spammeur dans l'interface de votre lecteur de tweets.

Résumé

Je vous rappelle donc les règles pour ne pas tomber dans le piège du spam Facebook ou Twitter :

  • NE PAS CLIQUER SUR LE LIEN OU L'IMAGE!
  • repérer la différence avec les posts habituels de la personne
  • demander si la personne est à l'origine du post, sinon examiner son profil
  • rechercher le titre du post sur Internet
  • bloquer le service sur Facebook ou le spammeur sur Twitter
  • utilisez des plugins qui vérifient la réputation d'un site web comme Web Of Trust ou Webrank d'Avast!

Si tout le monde prend part à ces actions alors nos timelines seront plus lisible et on pourra partager de la vraie information.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2012/12/03/le-spam-facebook-ne-pas-tomber-dans-le-piege Mon, 03 Dec 2012 21:59:39 +0100
<![CDATA[[Technique] Analogie réelle du partage/piratage]]> https://blog.goufastyle.org/article/analogie-reelle-du-partage-piratage Je sais que l'informatique est complexe à expliquer à ceux qui ne s'y connaissent pas ou qui ne veulent pas s'y connaître. J'ai choisi donc de partager ma connaissance de quelques éléments de société en utilisant des analogies simples. Aujourd'hui, je vais essayer de vous présenter tout l'univers du partage musical avec ses avantages et ses inconvénients. Je vais vous raconter l'histoire de Germain, un dessinateur qui ne sait pas trop comment se faire connaître du public. Il a à sa disposition plein d'outils et surtout l'appui de certains partageurs anonymes...

Mise en situation

L'exposition

Germain a un don pour le dessin. Il réalise plusieurs toiles qu'il stocke dans son garage mais il a peur de l'impact sur les gens, s'il sera connu? rémunéré? apprécié? Toutes ces questions lui font peur mais il prend les devants et choisit de les exposer devant chez lui pour que les passants puissent lui en parler.

Durant cette exposition, il reçoit beaucoup d'avis positifs et des retours sur ses oeuvres. Certains gens lui demandent même de les reproduire pour qu'ils puissent avoir une copie chez eux. Tout le monde est content de faire la connaissance de ce nouvel artiste et la presse parle de lui dans le journal local.

Tout à coup, une personne, Luffy, prend en photo une toile et s'en va en courant, celle-ci aura récupéré une version moins précise de l'oeuvre mais qui pourra être partagée plus rapidement et facilement, on va y venir.

  • contact non réplicable avec l'auteur
  • vision de l'originalité de l'oeuvre

Le circuit classique

Pendant l'exposition, un drôle de bonhomme, Sonny, aborde Germain en lui disant qu'il a beaucoup de talent et qu'il lui faudrait l'appui d'un producteur pour bien démarrer. Sonny lui propose donc de lui faire de la publicité, d'organiser des expositions plus grandes et de fournir un format de ses oeuvres dans les rayons des grands magasins. Du rêve en perspective! Hélas le producteur réclame dans son contrat certains éléments qui sont assez problématiques, à savoir :

Luffy de son côté a cherché un peu et a trouvé un moyen de contourner le format proposé par le producteur, il arrive donc à prendre en photo l'oeuvre de façon encore plus pointue, il va bientôt entrer en scène.

  • sûreté financière, sous réserve de résultat derrière
  • services de marketing et organisationnels colossaux
  • appropriation de l'oeuvre par le producteur
  • revenus maigres
  • format de diffusion propriétaire non contournable par l'auteur
  • obligation de suivre le courant imposé par le producteur
  • piratage inévitable

Quand le gouvernement s'en mêle

Sonny n'est pas content de sa perte son non-gain. Il va donc voir Christiane, la ministre de la culture, pour essayer de trouver une solution contre ces vilains pirates. Sonny présente donc Harold, celui qui va surveiller les moindres faits et gestes des consommateurs, les punir et mettre en avant SA politique de distribution de contenu. Malheureusement Christiane ne connait pas trop les moyens techniques pour que Harold puisse travailler correctement mais applaudit des deux mains quand Sonny lui assure que tout se passera pour le mieux.

Depuis que Harold est en place, les consommateurs sont plus méfiant et ne partagent plus convenablement les oeuvres. Certains artistes restent donc méconnus quand d'autres sont mis sur un piédestal pour garantir l'investissement de Sonny. Entre temps les vilains partageurs ont renforcé leur façon de se retrouver et de partager les oeuvres, laissant ceux qui débutent se faire maladroitement prendre.

Le partage collaboratif

Revenons à Luffy. Ce fourbe a réussi à prendre une version de l'oeuvre de Germain et souhaite le fournir gratuitement à tous ces amis. Il se rend compte qu'envoyer un mail a tout le monde ou donner un accès à son ordinateur sera très lourd. Il choisit donc d'utiliser le partage collaboratif.

Comment ça marche? Nami et Zorro veulent connaître cette oeuvre, il rencontrent donc Luffy qui va leur proposer de partager l'oeuvre en parties. Ainsi l'oeuvre va être découpée et les parties vont circuler entre les amis. Si quelqu'un d'autre en veut aussi un morceau il va interroger les premiers qui vont lui fournir quelques parties et il faudra qu'il cherche d'autres personnes possédant les parties manquantes. D'un point de vue technique, Luffy qui possède toute l'oeuvre va la semer (seed) et les autres vont récupérer les parties progressivement. Ceux qui n'ont rien vont devoir pomper (leech) des parties existantes mais qu'ils pourront proposer à d'autres une fois que celles-ci seront récupérées.

Ouch, un petit schéma :


Fonctionnement du partage collaboratif.

L'inconvénient est que pour se rencontrer les différents acteurs devront passer par un service de rencontre qui listera toutes les parties que chacun possède. Et pendant ce temps Harold veille... Germain de son côté n'est pas rémunéré mais profite quand même de cette publicité gratuite pour que d'autres partageurs puissent acheter ses oeuvres plus tard.

  • gratuité
  • décentralisation de l'oeuvre
  • décongestion du réseau car tout se fait de pair à pair
  • accessibilité : on peut trouver des oeuvres qui n'existent plus ou qui sont dures à trouver
  • risque de virus car on n'est pas forcément sûr de ce que l'on partage
  • obligé quand même de passer par un site centralisateur qui peut être surveillé par Harold par exemple

Le flux

Luffy a trouvé une autre solution : proposer de visionner l'oeuvre de Germain sans la posséder. Cette technologie appelée Streaming permet de consulter un site, d'installer un logiciel et de regarder l'oeuvre sans la stocker sur son disque dur. Harold ne peut pas surveiller ce genre de site car il n'y a pas de preuve matérielle de déplacement de l'oeuvre. C'est comme si Nami lisait une copie d'un livre et le brûlait directement après. Harold cependant se penche sur un moyen d'analyser les octets lus par Nami pour reconstituer une preuve du transit du fichier.

  • accès direct à l'oeuvre
  • pas de trace de l'appartenance de l'oeuvre
  • économie d'espace disque
  • centralisé : si le site tombe l'oeuvre n'est plus accessible
  • non appartenance de l'oeuvre, on la fait disparaître après l'avoir consommée, comme une location

Récupération directe

Kim propose encore une autre solution : créer un espace pour mettre à disposition différents éléments (fichiers, objets, oeuvres livres de droits,...) que tous les gens pourraient utiliser. Si un élément est protégé par le droit d'auteur il est reporté par Sonny ou Harold qui pourra le faire supprimer sans préavis. L'inconvénient est que Luffy n'est pas bête : il va changer le format et le nom de l'oeuvre dans l'espace de stockage pour qu'elle ne soit pas reconnue.

Par contre Kim commence à avoir des soucis financiers car il faut qu'il garde en place son espace qui grossit de plus en plus... Il installe donc des bannières publicitaires un peut partout et fait payer les gens qui voudraient récupérer plus vite les éléments sans passer par la publicité. Tout cet argent va à Kim, mais pas à Germain.

  • récupération rapide de l'oeuvre
  • garantie de l'authenticité de l'oeuvre via les commentaires et des notes
  • centralisé : si le site tombe l'oeuvre n'est plus accessible
  • coût de stockage entraînant des frais
  • l'auteur n'est pas rémunéré

Le tunnel

Luffy en a marre de voir Harold le suivre partout, il choisit donc de correspondre avec Waldo, un ami qui se trouve dans un autre pays via un tunnel de communication crypté. Si Harold essaie d'ouvrir le courrier de Luffy il ne verra que des symboles qu'il ne pourra pas déchiffrer. De plus, Waldo permet à Luffy de se faire passer pour lui quand il doit utiliser des services qui ne sont pas disponibles dans son pays : il peut donc lire des vidéos, s'inscrire sur des sites disponibles uniquement dans un pays en particulier sans avoir à bouger de chez lui!

  • anonymat
  • accès à des services inaccessibles dans son pays
  • lenteur en raison du cryptage et de la distance
  • il faut faire confiance à Waldo, qui pourrait éventuellement nous dénoncer à Harold...

Auto-promotion

Germain se rend compte qu'il existe beaucoup de services gratuits sur Internet pour se faire connaître rapidement et facilement. Il souscrit donc à un service de publications d'articles, il se filme en train de dessiner, il propose un espace de stockage où les gens pourront récupérer une copie de ses oeuvres en payant ou non.

  • maîtrise de la réputation
  • contact avec le public
  • revenu dépendant uniquement des dons
  • dépendance des services (contrat d'utilisation, disponibilité,...)

Résumé des analogies

  • Germain : il s'agit de l'artiste qui souhaite se faire connaître tout en espérant un revenu sur sa création
  • Sonny : il s'agit de la maison de disque, label ou major. Il voit Germain comme un investissement et le garde pour lui en forçant les formats de diffusion. Attention toutes les maisons de production ne sont pas comme ça, tout dépend du contrat signé.
  • Luffy, Nami et Zorro : c'est les pirates partageurs, ils utilisent les connaissances techniques ou les outils mis à leur disposition pour partager l'oeuvre gratuitement.
  • L'exposition : comme son nom l'indique, c'est là où Germain va présenter une version physique de son oeuvre. C'est donc les concerts, les démonstrations, les festivals,...
  • Le circuit classique : quand vous allez en grande surface ou que vous faites des achats sur Internet via une plateforme éditrice.
  • Harold : il s'agit d'HADOPI, l'organisme censé surveiller la population pour voir qui partage des oeuvres protégées par le droit d'auteur. Mais quand c'est lui-même qui télécharge il n'y a plus personne...
  • Le partage collaboratif : il s'agit des protocoles P2P, Torrent, Tor,... qui permettent une communication uniquement entre deux ordinateurs
  • Le flux : c'est le système de streaming comme décrit dans l'analogie. Attention tout de même aux faux sites qui font installer des virus quand le lecteur se lance.
  • Le tunnel : il s'agit du tunnel VPN, une connexion sécurisée permettant de profiter du réseau d'un ordinateur distant sur son propre ordinateur.
  • Récupération directe : Megaupload, Fileshare,... tous les services de mise à disposition de fichiers sur un serveur. C'est une véritable mine d'or pour les partageurs car il suffit de renommer le fichier ou de le découper pour qu'il passe inaperçu. Hélas les gouvernements (épaulés par les majors) tentent d'attaquer ces boîtes en agissant sur le portefeuille : en coupant les accès, les serveurs,...
  • Auto-promotion : Youtube, Wordpress, Bandcamp,... tant de services plus ou moins gratuits permettent aux artistes de s'exprimer sans passer par un label.

Bilan

Voici toutes les options possibles pour que Germain puisse s'épanouir et partager ses oeuvres. Chaque méthode se vaut et permet d'obtenir plus ou moins de visibilité sur ses produits ou sur sa prestation générale (expositions, objets physiques,...). A lui donc de choisir qui il veut privilégier : le portefeuille du major ou l'intérêt de la communauté?

+ Sources des images

]]>
https://blog.goufastyle.org/article/2012/10/18/analogie-reelle-du-partage-piratage Thu, 18 Oct 2012 13:19:10 +0200
<![CDATA[[Technique] NewbieContest, le terrain de jeu du hacker]]> https://blog.goufastyle.org/article/newbiecontest-le-terrain-de-jeu-du-hacker Vous avez toujours rêvé de pirater le site de la Nasa? De récuperer des documents secrets depuis les renseignements généraux? Mais hélas vous avez peur de vous faire attraper par la HADOPI (non, non, arrêtez de rigoler) et surtout vous n'avez pas les moyens techniques pour faire ces prouesses. Heureusement Internet a pensé à vous invite donc à vous échauffer sur un site prévu pour : NewbieContest.

Au programme


Ah oui, il faut recomposer l'image avant...

NewbieContest est un site regroupant des épreuves de programmation, de logique, de décryptage, de stéganographie et bien sûr de hacking et vous en aurez à toutes les sauces : injection SQL ou XSS, gestion des cookies, dialogue avec un bot sur IRC,... le tout dans un environnement isolé prévu pour avec le petit forum d'entraide quand on sèche ou qu'on veut trouver la réponse rapidement.

Voici ce qui est proposé :

  • Épreuves de "Crackme" : on vous fournit un éxecutable, à vous de le contourner pour trouver le mot de passe.
  • Épreuves de cryptographie : une phrase, des nombres avec ou sans clef qu'il faudra décoder avec tous les indices proposés.
  • Épreuves de hacking : on vous donne l'accès à un site sur lequel il faudra généralement vous octroyer vous-même les droits d'administration.
  • Épreuves Javascript/Java : il vous faudra analyser le code de la page de l'épreuve pour connaître la faille qu'elle cache.
  • Épreuves de logique : une suite de nombres ou de lettres, une énigme textuelle, à vous de trouver la suite ou de répondre correctement.
  • Épreuves de programmation : une page vous pose une question, cependant il faut moins d'une seconde pour y répondre. Impossible pour un humain, mais pas pour une machine! Il vous faudra faire un programme qui résolve le problème et qui renvoie la réponse à la page.
  • Épreuves de stéganographie : un code est caché dans une image, il vous faudra la décortiquer!

Le nombre de points et de validations vous donneront une idée de la difficulté de l'épreuve.

Un peu d'aide pour résoudre les énigmes

Les expressions régulières c'est très bon! Mangez-en!

J'en ai complètement abusé lors de ma migration en PHP5, les expressions régulières vont vous sauver la vie pour la récupération des paramètres des énigmes dans les pages ou par le bot IRC. Je vous donne quelques exemples :

Rechercher un nombre dans une phrase :

preg_match("#([0-9]+)#",$txt,$result); $nombre = $result[1];

Trouver une phrase commençant par un texte sans vérifier la casse :

$texte = "L'énigme est"; preg_match("#^($texte.*)#i",$txt,$result);

Faites juste attention au point . qui veut dire "n'importe quel caractère", il faudra l'échapper avec un backslash.

Injection SQL et XSS

On en entend beaucoup parler en ce moment où les grands sites se font pirater avec ces techniques. En gros on injecte du code SQL ou Javascript dans des requêtes pour faire se comporter le site d'une certaine façon ou pour récupérer des informations dans la base de données, et ce en passant par les données de formulaire ou les requêtes dans l'URL.

Pour le XSS, il suffit de mettre du Javascript dans un champ de formulaire, comme par exemple le très célèbre :

<script type="text/javascript"> alert("Vous avez été piraté!"); </script>

Si cette phrase est rentrée telle quelle dans la base de données, chaque internaute verra une popup s'afficher lors de l'affichage de l'information, de quoi le rebuter et le faire fuir de ce site!

Pour le SQL, il suffit de regarder le morceau de code suivant :

$query = "SELECT * FROM matable WHERE mon_texte LIKE '%".$texte."%'";

Et si $texte contenait du SQL? Genre

$texte = "' AND 0 UNION SELECT * FROM admin --'";

La requête devient :

$query = "SELECT * FROM matable WHERE mon_texte LIKE '%' AND 0 UNION SELECT * FROM admin --'";

Et hop! On récupère tout plein de données! Pour se protéger de tout ça il y a quelques gestes simples et rapides à faire :

  • Échappez les variables passées dans une requête en utilisant la fonction htmlentities de PHP ou tout autre fonction de remplacement de caractères, surtout les " et les '.
  • Utilisez si possible des requêtes préparées, par exemple "WHERE texte = @mon_texte"
  • Évitez le "*" dans les requêtes, sélectionnez les colonnes qui vous intéressent vraiment.

La suite de Fibonacci

Cette suite, vous allez la manger à toutes les sauces, et pourtant c'est une suite de nombres que vous pourrez trouver en tournant un peu la tête dans tous les sens. La suite de Fibonacci se définit ainsi :

u1 = 1 u2 = 1 un+1 = un + un-1

En gros le nombre courant est la somme des deux précédents, ce qui donne :

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,...

Et maintenant si on prend la division de deux nombres accolés en allant vers l'infini, le résultat va tendre vers un nombre : (√5+1) / 2, le nombre d'or! Ce nombre représente la proportion parfaite, le rapport entre tous les éléments d'une spirale, d'un écran 16/10, du "canon" grec,... et bien sûr on le retrouve dans la plupart des énigmes de NewbieContest.


Les écrans 16:10 sont donc une perfection naturelle!

N'hésitez pas à coder une librairie dans le langage de votre choix pour trouver tous ces nombres, en PHP par exemple :

function fibonacci($n) { $n0 = 1; $n1 = 1; $c = 0; if ($i<=2) { return 1; } for($k=3;$k<=$i;$k++) { $c = $n1; $n1 += $n0; $n0 = $c; } return $n1; }

Ou en Python :

def fibo(n): n0 = 0 n1 = 1 for i in range(n): n1,n0 = n1+n0,n1 return n1

Et pensez aussi à faire la fonction inverse, ça peut servir...

Les épreuves de programmation

Quand vous allez envoyer la réponse à l'épreuve de programmation, il faudra faire passer votre session à la page de réponse pour qu'elle puisse identifier à quelle question correspond la réponse. Pour cela il faudra faire un peu de CURL ou de Pyhton pour récupérer la page avec tous ces éléments

$curl_instance=curl_init(); curl_setopt($curl_instance, CURLOPT_URL, $url) ; curl_setopt($curl_instance, CURLOPT_COOKIE, "SMFCookie89=$session") ; curl_setopt($curl_instance, CURLOPT_RETURNTRANSFER, 1); $str = curl_exec ($curl_instance);

Une fois la réponse trouvée, il faut renvoyer la session en plus de la réponse avec la même fonction. Attention au type de transfert, GET ou POST...

Quelques astuces

  • Ne faites pas de bruteforce! Sinon vous allez vous faire jeter par le site.
  • Avancez à tâtons, persévérez et ne vous jetez pas directement sur le forum d'aide. Vous êtes là pour apprendre de vous-même.
  • Plus le nombre de validations est grand, plus l'exercice est facile.
  • La solution la plus évidente est souvent celle-là.
  • Si votre solution de programmation ne marche pas, relancez le programme quelques fois en attendant entre les essais pour ne pas déclencher le détecteur de bruteforce.
  • Bien entendu faites des pauses : si vous n'arrivez pas à résoudre une énigme, passez à un autre, elle contiendra peut-être une méthode qui vous permettra de résoudre la première.

Sur ce, éclatez-vous bien et tirez-vous bien les cheveux sur les énigmes proposées et pourquoi pas ne pas en proposer vous-même?

+ Sources des images

]]>
https://blog.goufastyle.org/article/2012/09/02/newbiecontest-le-terrain-de-jeu-du-hacker Sun, 02 Sep 2012 20:41:36 +0200
<![CDATA[[Technique] Du blocage de sites web en entreprise]]> https://blog.goufastyle.org/article/du-blocage-de-sites-web-en-entreprise -->

Cher monsieur l'administrateur réseau de mon entreprise, je sais qu'il y a une politique de sécurité assez importante dans toutes les boîtes pour contrer les attaques virales ou juste nous rendre plus productifs, ce qui fait que je vois tous les jours de plus en plus de sites web filtrés par le pare-feu. Mais aujourd'hui vous avez fait fort : vous avez bloqué les accès aux scripts externes CGI-BIN, c'est le fonctionnement normal des pages web après la saisie de formulaires que vous avez bloqué! J'en profite donc pour vous annoncer l'inefficacité et la sur-proportion de votre tâche, mais qui je le sais vient de plus haut.

Pourquoi et comment ?

Je suis informaticien, je connais donc les risques que l'on peut rencontrer en ouvrant une fenêtre sur le web : des virus, des pages sur le pédo-terro-nazisme, une chute globale de la productivité à cause d'un jeu, bande-passante réduite à cause des vidéos Youtube,... Oh mon Dieu, que cet endroit est dangereux! Il faut le cloisonner! Ça peut faire beaucoup de mal aux pauvres ordinateurs du parc et au profit de l'entreprise! Que de temps perdu pour regarder quand sort le prochain Call of Duty ou si Nadal s'est qualifié cette année. Et pourtant nous travailleurs avons besoin de ce genre d'information pour ne pas paraître idiots à la machine à café, pour notre propre épanouissement ou tout simplement pour s'informer.

Donc la direction fait ce que font toutes les personnes voulant se débarrasser d'un problème rapidement et proprement : le lance-roquette! Et c'est à vous pauvre administrateur réseau qu'incombe la lourde tâche de trouver un plug-in pour filtrer automatiquement ou manuellement les pages web. On trouvera donc des listes blanches (sites accessibles) ou noires (sites non accessibles), des filtres textuels qui regardent si l'adresse ou le contenu du site comportent des mots-clefs hors de l'étiquette de l'entreprise comme poker, jeu, reproduction humaine, minecraft,... en temps réel qui auront pour résultat final de faire apparaître une jolie page indiquant que ce site est dangereux ou qu'il faut se remettre au travail.

Accès à un site

C'est dans la nature de l'homme de s'informer, ce côté voyeur à côté des accidents de voiture, des bagarres dans la rue ou des infos de TF1. Par conséquent si l'on veut récupérer une information, on va faire des pieds et des mains pour la trouver!

Un cas simple : comme tous les Jeudis, jeb_ sort un aperçu de la prochaine mise à jour de Minecraft. Je sais que tous les modifications apportées au jeu se trouvent dans une page web ressemblant à un wiki. Ce site est parfaitement sûr et ne propose pas d'y jouer. Malheureusement il contient des mots qui ne vont pas plaire à mon chef, et est par conséquent bloqué!

Version non informatique

Je le rappelle : Internet est tellement puissant qu'il arrive à se contourner lui-même. Et surtout il n'est pas nécessaire d'avoir des connaissances en informatique pour contourner un blocage grâce à un outil à portée de main! Un téléphone avec un abonnement 3G permet d'aller sur pratiquement tous les sites web.

Avec un blocage nous avons donc :

  • ouverture du site web
  • erf il est bloqué
  • bon, le cache Google n'est pas très lisible
  • recopie de l'URL du site (récupération via l'appli Twitter ou Facebook, transfert via Chrome to Phone, QRCode, à la main) sur le mobile
  • attente du chargement de la page
  • EDIT : fermeture de toutes les popups de pub/applications/cookies
  • redimensionnement de la page
  • lecture
  • 5 minutes

Sans blocage :

  • ouverture du site web
  • scroll haut et bas pour lire l'information
  • 5 secondes

Le gros problème de cette solution est que l'on mord dans la bande-passante soit disant "illimitée" de notre opérateur, les réseaux sont congestionnés, Orange se plaint de lenteurs,... alors qu'ici nous avons un accès direct et rapide à l'information.

Version informatique

Pour récupérer la page, on peut utiliser les flux RSS, pour peu que les lecteurs de flux ne soient pas bloqués, cela permet de récupérer au moins les derniers articles de blogs ou des brèves comme VDM, DTC ou La Punaise. Avec un peu de chance ces articles ne seront pas tronqués, sinon on peut passer par un récupérateur de flux complets. Pour les pages fournies en lien, c'est un peu plus compliqué car trouver le flux correspondant sera un peu complexe. Alors on a plusieurs solutions : utiliser un autre proxy d'entreprise moins restrictif, un VPN (sécurisé) hors site,... Il existe aussi les défilters plus ou moins fiables qui ouvrent une fenêtre web dans leur fenêtre web.


Google reste quand même le meilleur anti-proxy

Les développeurs pour peu qu'ils aient leur propre serveur peuvent faire leur propre anti-filtre grâce à la fonction file_get_contents, mais risquent de se faire bloquer l'accès s'il y vont trop souvent...

Récupérer un freeware

Clic droit sur un fichier : ouvrir avec PSPad. Bon moi personnellement je préfère Notepad++ comme éditeur riche et je dois donc le récupérer. Je vais sur le site de l'éditeur, dans la page de téléchargement, je clique sur le lien et là...


Alors bien sûr cette situation est discutable quand on sait que certains sites de téléchargement même connus embarquent plein de malwares dans les installeurs. Mais le problème est que Je veux ce logiciel et je ne compte pas faire un aller-retour chez moi pour le récupérer car j'en ai besoin maintenant! Je vais donc fouiller dans les méandres d'Internet, éplucher les forums et après une demi-heure de recherche cliquer sur le premier lien non bloqué. Une fois installé je vais déployer un virus dans toute mon infrastructure! Bon, mon entreprise ne filtre que les sites de Freewares, mais j'en connais qui ont carrément désactivé l'autorun sur les postes. Imaginez la tête de non informaticiens qui ont découvert le contenu de la racine des CD-ROM : un fichier autorun.inf, beurk!

C'est exactement le même problème que le partage de fichiers et l'offre légale : si on n'en trouve pas légalement, on va chercher illégalement et on risque de tomber sur de bonnes surprises!

La solution : UN MUR

Ne rigolez pas et ne voyez pas d'aspect négatif à ce titre, je l'ai vu à l'oeuvre (dans une société de télécommunications d'ailleurs) et ça marche très bien : un ordinateur pour le travail, et un autre pour Internet. En gros on possède un poste relié au réseau normal de l'entreprise, et des bornes Internet ou un portable relié à un point d'accès Wifi. Bien sûr il reste toujours le moyen de transférer les fichiers avec une clef USB et il faudra quand même sécuriser un minimum les postes en question avec un bon antivirus ou responsabiliser l'internaute. Quand on veut surfer un peu, on fait une petite liste de sites à visiter et on part faire un tour à la borne le temps d'une pause et ensuite on retourne à son poste, sans être distrait par une fenêtre volante annonçant une info capitale.

Conclusion

La dernière fois que je suis allé en Chine, j'ai pu accéder à mes flux Facebook et Twitter sans utiliser de VPN ou de proxy et ce quelques minutes après avoir pu poser le pied hors de l'avion. C'est pour dire aujourd'hui la facilité que l'on a, informaticien ou non, à contourner un blocage que ce soit en s'aidant d'outils externes ou en faisant une simple recherche Google.

Bien sûr il faut réfléchir à filtrer certains sites vraiment dangereux (vrais sites de warez, jeux d'argent, pédophiles), gourmands en bande passante (vidéos ou musique en ligne,...) ou chronophages (jeux en ligne flash ou poker,...) et non pas épier les moindres faits et gestes des employés en filtrant le moindre nouveau site de jeux.

+ Sources des images

]]>
https://blog.goufastyle.org/article/2012/04/04/du-blocage-de-sites-web-en-entreprise Wed, 04 Apr 2012 23:40:30 +0200
<![CDATA[[Technique] Comment j'ai été dégoûté des nouvelles technos Java]]> https://blog.goufastyle.org/article/comment-j-ai-ete-degoute-des-nouvelles-technos-java

Maven, JUnit, Hibernate, Hudson, GWT, JBoss,... Tant de termes qui font rêver quand on les entend et qui ont un goût de mode en cette période de programmation vouée à l'intégration rapide et à l'extrême développement. C'est donc vers ces technologies que je me suis dirigé lors de ma mutation à Toulouse pour pouvoir mettre quelques lignes de plus sur mon CV et rédiger ce petit article.

Résumé

Un petit lexique des termes utilisés ci-dessus pour comprendre le contexte

  • Maven : utilitaire permettant d'interfacer une multitude de plugins nécessaires au projet, il permet aussi de compiler le code en fonction de ce que l'on veut en faire (tests, déploiement, installation,...).
  • Hudson : serveur qui récupère tout ce qui est en gestion de configuration pour le compiler en utilisant Maven et faire un rapport des constructions récentes.
  • Hibernate : librairies pour gérer l'accès à une base de données, plus de détails ci-dessous.
  • GWT : Google Web Toolkit, plateforme de travail permettant de créer des application web. Les pages générées sont mises à jour automatiquement avec du code Javascript.
  • JUnit : plateforme permettant d'effectuer des tests unitaires automatiquement, pratique quand on modifie certains modules pour détecter les régressions
  • JBoss : serveur applicatif pouvant héberger des applications Java.
  • Sonar : utilitaire permettant de faire du contrôle de code, notamment la couverture des tests et les styles de programmation.
  • Spring : framework permettant de décorréler les objets en passant par des annotations
  • Tout s'annonce bien, chaque plugin semble avoir ses propres avantages. Mais...

    On prend tout et on déploie en local!


    Je cherche une image pour montrer l'équilibre de mon projet

    Je suis donc sur un projet dont on se sert de Maven pour assurer les dépendances entre Hibernate, JUnit,... en passant par des annotations Spring à déployer sur un serveur JBoss avec la partie GWT le tout commandé par Hudson qui envoie un rapport à Sonar...STOOOOOP!! Déjà que je ne connais presque aucune technologie, je dois en apprendre une dizaine en quelques instants avec pour seul appui Google ou mes collègues qui sont occupés sur d'autres modules!

    De plus il s'agit d'une application Web, par conséquent on doit déployer le projet sur un serveur JBoss afin de le rendre disponible, et pour ne pas se marcher sur les pieds chacun installe un JBoss sur son poste. Heu... attendez :

  • Windows : 1000Mo de RAM
  • SpringSource : 1Mo
  • La JVM pour Eclipse : 300Mo
  • La JVM pour JBoss : 512Mo
  • Le serveur applicatif de code GWT : 300Mo
  • Firefox : 100Mo (oui je sais il y a chrome mais c'est pour la compatibilité entre navigateurs)

  • Vous avez demandé plus de RAM? Ne quittez pas!

    Bilan, plus de 2,5Go de RAM pulvérisés pour une application locale. Sympa pour un simple ordinateur bureautique! De plus il faut déployer, redémarrer le serveur JBoss, redémarrer le plugin de développement GWT, s'assurer que le code a bien été repris et construit, résoudre les problèmes de conflits et de fichiers existants, recommencer tout puisque ça n'a pas été pris en compte,... une bonne heure pour enfin insérer ce "N" oublié dans une chaîne de caractères! Au fait, le serveur JBoss prend 5 minutes à (re)démarrer, beaucoup plus que de déployer sous Android...

    Hibernate ou la chasse à l'objet

    Bon, il y a deux écoles pour la manipulation de données dans les bases. La première est d'utiliser des requêtes SQL précises pour récupérer uniquement ce dont on a besoin et le stocker dans des variables :

    Query q = new Query("UPDATE user SET name = '"+newName+"' where id = '"+userId+"'"); q.executeStatement();

    La deuxième consiste à créer un objet contenant tous les champs d'une table et l'interfacer avec tous les autres objets en y ajoutant quelques fonctions propriétaires :

    class User { String id; String name; String getId() { return this.id; } String getName() { return this.name; } void setName(String _name) { this.name = _name; } } User user = entityManager.getUser(userId); user.setName(newName); entityManager.flush();

    Les deux méthodes se valent : la première permet simplement de récupérer les informations nécessaires en maîtrisant les jointures entre les tables, et la deuxième permet de passer outre l'implémentation SQL pour manipuler directement l'objet.

    Hélas, dans des projets avec des spécifications précises, les objets sont incontournables, trop nombreux et beaucoup trop spécifiques! Je me retrouve donc à mettre des objets dans les objets en cas de jointure (au lieu d'un simple identifiant), certes le moteur d'hibernate gère tout tout seul mais pour récupérer un pauvre champ je dois passer par tout une arborescence d'objets pour juste obtenir le champ qu'il me faut, si ce n'était que ça... il faut que je passe par une montagne de protocoles juste pour avoir l'information :

    • Objet : l'objet en question (appelée entité), il contient tous les champs de la table en question avec des getters et des setters
    • ObjetDAO : Data Access Object, interface permettant d'implémenter des fonctions spécifiques pour récupérer des données (requêtes, toutes les lignes,...)
    • ObjetMockFactory : permet de simuler l'insertion de données dans l'entité
    • ObjetDaoTest : permet de faire des tests sur les deux éléments ci-dessus
    • ObjetWS : caractéristiques du fichier XML, JSON,... permettant de faire transiter les données en appel du Web Service
    • ObjetService : web service contenant les fonctions à appeler
    • ObjetDTO : Data Transfert Object, objet permettant de faire le transfert de l'entité (comme si l'entité ne suffisait pas)
    • ObjetDataProvider : comme son nom l'indique, fournisseur de données, il implémente un écouteur pour savoir quand les données on été reçues
    • ObjectDTOMapper : interface avec le fournisseur de données
    • J'omets ici les modèles abstraits ou les interfaces génériques dont les objets héritent ou implémentent.

    Voilà tout le beau monde que je dois appeler juste pour récupérer un pauvre champ dans une table, alors qu'une requête SQL aurait pris moins d'une minute!

    Bon si ce n'était que ça... Les administrateurs de la base de données nous imposent l'appel à une procédure stockée retournant une variable en sortie, à exécuter au début de la session. Avec un connecteur simple ç'aurait été une simple formalité, mais hibernate ne gère pas facilement les sessions, vu qu'il instancie les objets à la volée.

    J'aurais préféré voir deux objets : un connecteur chez le client et une entité chez le serveur. Cela aurait déjà été mieux au lieu de devoir faire transiter une simple donnée dans un enchevêtrement d'objets!

    Le modèle GWT

    Je n'ai rien contre les design patterns (MVC, MVP,...) malgré le fait que je vienne de PHP, un monde où afficher une variable dans une TextBox tient dans une ligne. J'ai aussi l'habitude de travailler avec des modèles MVC surtout depuis que je me suis mis au développement Android, mais là je suis un peu sidéré par tout le code qu'il faut pisser PONDRE juste pour afficher un champ de saisie :

    • mettre son modèle dans l'objet modèle
    • mettre le champ dans un fichier xml
    • le déclarer dans l'objet vue GWT

    Déjà quand je vois les deux derniers points, je vois de la répétition! Bon d'un côté c'est pour permettre la vue HTML d'interfacer avec le Java. Jusque ici tout va bien avec le présentateur qui contrôle le modèle et la vue. ET BIM! L'architecte nous impose l'utilisation d'une interface supplémentaire pour lier la vue et le présentateur pour pouvoir faire des tests unitaires plus facilement. Le modèle est lié abstraitement à la vue et nous ne pouvons plus passer par le modèle pour récupérer nos données. Tous mes collègues ont choisi la solution ultime : mettre tous les composants du modèle dans la vue! Et ça marche!

    LE TOUT SOUS ECLIPSE


    On préferera quand même la console, elle marche mieux que le compilateur Eclipse -_-"

    Ah Eclipse, l'environnement de développement qui fait de l'ombre au soleil (à Sun). Cet IDE est surchargé de plugins, de fonctionnalités, de "perspectives" (il s'agit de configurations d'écran) qui le rend très difficile d'utilisation :

    • quand le programme change d'état (configuration SVN, déboguage,...) la perspective change et donc toutes les fenêtres changent de place et on se perd complètement!
    • il faut souvent "rafraîchir" l'espace de travail, il s'agit d'une sécurité pour voir si les fichiers ont été modifiés en externe mais Notepad++ le fait de façon transparente. Une option peut être activée pour rendre le rafraîchissement automatique en allant dans "Window > Préférences > Général > Workspace". Pour l'éditeur c'est bon, par contre il faut aussi faire ça pour compiler le projet, avec donc un risque de ne pas avoir les dernières modifications.
    • je passe sur l'interaction entre les différents modules et plugins décrits ci-dessus, et le fait qu'il sont complètement indépendants d'Eclipse malgré leur interfaçage (par exemple erreurs dans Eclipse alors que la compilation Maven marche).

    Je disais dans un article précédent que l'acharnement est important, mais là on en est à un phénomène de simultanéité comme l'effet papillon ou l'enchaînement d'évènements en fonction de la météo ou des positions des feuilles sur mon bureau. Nous avons un wiki dans l'équipe mais il est progressivement complété par des manipulations phénoménales qui se résument généralement à réinstaller tout le système et donc de perdre une heure en manipulations. Donc pensez d'ores et déjà à bien répartir vos projets dans différents "workspaces" pour mieux les réinstaller.

    Tout n'est pas noir

    JUnit est mon module préféré parmi l'avalanche de plugins décrits ci-dessus. Il permet de faire des tests ponctuels sur les différentes fonctionnalités de notre programme, c'est très pratique pour analyser les régressions suite à de grandes modifications de code, une livraison ou un changement de la base de données. Un simple clic droit dans l'interface d'éclipse permet de lancer une série de tests et le débogage de ceux-ci se fait grâce à une trace de la pile d'erreur assez ergonomique.

    Par contre une fois posés ne les négligez pas! C'est un coup à se retrouver avec une multitude de tests qu'il faudra maintenir, corriger ou pire, feinter... N'oubliez pas que ces tests ne remplacent jamais un test de bout en bout avec l'IHM.

    Le bilan


    Je suis arrivé à un point où je dois promettre de vendre mon âme au diable pour qu'un programme puisse compiler, déployer, accéder, débogguer ET marcher correctement et je pense que tous mes collègues sont de mon avis. Encore une fois, chaque technologie prise à part peut être d'une richesse non négligeable dans un projet d'entreprise, mais les mettre toutes ensemble consisterait à construire un bâtiment en utilisant plusieurs ressources et méthodes à la fois.

    Pour ma part j'ai quand même bien appris l'utilisation de la plupart des technologies et certaines sont intéressantes, notamment les JUnit. Bien sûr il faut derrière un équipement de pointe (multi-écran, 12Go de RAM, un bon architecte,...) et j'aurais moins de pénibilité à faire avancer le projet.

    Bon, je vous laisse, je dois préparer la chèvre en vue du sacrifice sur le parking tout à l'heure pour que la livraison de ce soir se passe bien...

    + Sources des images

    ]]>
    https://blog.goufastyle.org/article/2012/02/14/comment-j-ai-ete-degoute-des-nouvelles-technos-java Tue, 14 Feb 2012 22:04:56 +0100
    <![CDATA[[Technique] Gestion d'une mailing list]]> https://blog.goufastyle.org/article/gestion-d-une-mailing-list Aujourd'hui, une journée ordinaire pour un développeur d'applications dans une SSII : reprise d'outils, tests et validations, étude du besoin. C'est sans compter le collègue d'en face qui raccroche son téléphone et pousse un petit soupir.

    - Bon Claude, on doit contacter par mail 3000 personnes pour leur demander des informations.
    - Ça roule! Je fais un script qui envoie un mail personnel à chaque personne avec un lien qui pointe vers un site en interne proposant un formulaire avec les données requises qui remplira une base de données facilement exploitable...
    - Euh... C'est un peu compliqué... Écoute j'ai préparé un modèle de mail et les gens pourront y répondre directement en nous le transférant grâce à un compte mail générique.
    - Mais les réponses on les récupère comment? En lisant les mails?
    - Ouais!
    - 3000 mails?
    - Euh... Ouais!

    Je ne suis qu'à moitié étonné, après tout je travaille dans une SSII. Mais fort de cette expérience je vais vous proposer de mettre en place des bases pour bien gérer une mailing list.

    Format de sortie, pensez à vos collègues!

    Que vous soyez stagiaire ou non, pensez au format dont vous allez exporter les résultats. Cool vous avez fait une base de données MySQL sans interface parce que vous tattez le SQL, mais vos collègues sont peut-être restés sous Excel, Access ou autres. Demandez-leur le format de sortie (Excel, ordre des colonnes,...), discutez des premières réponses reçues et envoyez-leur des versions progressives.

    Créer un filtre de messagerie et une adresse générique

    Félicitations vous avez 100 réponses, et elles sont toutes à la racine de la boîte de réception... Il faudrait donc créer une règle pour déplacer les mails dans le dossier qui va bien. La règle de filtrage est simple : le sujet de votre mail, car il y aura automatiquement des RE: avant qui ne pourront pas être filtrés dans un projet international (AG: AW:,...). On pourra ensuite mettre manuellement les messages redirigés ou particuliers dans le bon répertoire. Si possible privilégiez un compte commun ou générique (support, liste,...) pour que les réponses tombent dans un environnement accessible à d'autres collèges qui pourront continuer le traitement des réponses en votre absence.

    Faîtes des vagues!

    Je vous le disais avant, quand on envoie un mail à plein de personnes, les gens vont voir l'adresse des autres destinataires, et enrichir une machine à spam. Je vous avais donc conseillé de mettre les gens dans le champ Ccc (copie cachée) afin que les adresses ne se voient pas. Inconvénients : un utilisateur inexpérimenté pensera que le mail ne lui est pas destiné, et s'il est transféré vous ne connaîtrez pas l'expéditeur de base. Le principe de la vague d'envoi est d'envoyer les mails en masse d'abord à une cinquantaine de personnes, puis 100, puis 200 afin de connaître l'origine des réponses et éventuellement gérer les réponses, on y viendra plus tard.

    L'idéal absolu est bien sûr de faire un script qui envoie nominativement à chaque personne une par une le mail, ainsi le destinataire se sentira concerné et recevra le mail avec plus de considération.

    Ceci n'est pas du phishing

    Rappel de la définition du hameçonnage, un utilisateur qui recevra un mail lui demandant des informations, il va se méfier... il faut donc le mettre en confiance, mais c'est justement ce font les créateurs de ce genre de mail! Fort heureusement nous sommes dans une architecture d'entreprise. Je vous propose donc les solutions suivantes :

    • mettez une signature conséquente en bas du mail, une adresse physique, un contact, (soyons fous!) un numéro de téléphone
    • mettez dans le champ Cc l'adresse mail d'un responsable, de l'initiateur de la demande. Ainsi quand un utilisateur ne comprendra pas la question, il lui demandera directement

    Bien entendu répondre rapidement aux utilisateurs suspicieux en leur donnant vos coordonnées ou celles de votre responsable. L'envoi par vague vous permettra de gérer statistiquement les gens se méfiant de ce genre de mail.

    Faîtes des jeux de tests

    Au début n'envoyez votre mail qu'à certains personnes ciblées (département de travail, zone géographique,...) afin de voir comment ils vont répondre au mail. Cela va vous permettre de :

    • adapter votre mail pour qu'il soit plus compréhensible
    • voir où se trouve la réponse de l'utilisateur
    • gérer les cas inattendus : plusieurs réponses, absence,...

    Ainsi vous pourrez commencer à remplir tranquillement le fichier de sortie, en adaptant le format choisi au début.

    Vérifiez vos résultats

    Faîtes des requêtes ou des formules pour tester les éventuels doublons, la pérennité et la conformité des données fournies. Il serait intéressant de faire ces contrôles pendant la récolte des informations afin d'intercepter une anomalie rapidement.

    Bilan

    Voilà, vous avez quelques astuces pour bien gérer votre mailing list! Bien sûr pensez à adapter ces règles et en poser de nouvelles en fonction de votre contexte de travail. Le plus important est de discuter du format de sortie et de proposer un script automatique avec formulaire pour faciliter le travail de tout le monde.

    ]]>
    https://blog.goufastyle.org/article/2012/01/28/gestion-d-une-mailing-list Sat, 28 Jan 2012 14:23:11 +0100
    <![CDATA[[Technique] Décorez votre PC pour Noël en CSS3]]> https://blog.goufastyle.org/article/decorez-votre-pc-pour-noel-en-css3 L'année dernière je vous proposais une petite application en Javascript pour faire alterner de jolies couleurs sur votre écran. Maintenant que j'ai découvert le CSS3 et ses capacités j'ai pu réduire sauvagement le code et laisser le navigateur gérer lui-même la transition de couleur. Cependant il reste encore du Javascript pour choisir aléatoirement quel fond afficher, mais voyez plutot...

       
    <html> <head> <style type='text/css'> #main{ /* qu'est-ce qu'on change? */ transition-property: background-color; /* pendant combien de temps? */ transition-duration: 5s; /* selon quelle variance? */ /* peut prendre : ease-in, ease-out, ease-in-out, ease, linear, ou des courbes de Bezier */ transition-timing-function:ease-in-out; /* retrocompatibilité navigateurs */ -webkit-transition-property: background-color; -webkit-transition-duration: 5s; -webkit-transition-timing-function:ease-in-out; -moz-transition-property: background-color; -moz-transition-duration: 5s; -moz-transition-timing-function:ease-in-out; -o-transition-property: background-color; -o-transition-duration: 5s; -o-transition-timing-function:ease-in-out; -ms-transition-property: background-color; -ms-transition-duration: 5s; -ms-transition-timing-function:ease-in-out; } </style> <script type='text/javascript'> function changeColor() { // nouvelle couleur a = Math.floor(Math.random()*255); b = Math.floor(Math.random()*255); c = Math.floor(Math.random()*255); document.getElementById("main").style.backgroundColor = "rgb("+a+","+b+","+c+")"; window.setTimeout("changeColor()",5000); } </script> </head> <body id="main" onLoad='Javascript:changeColor();'> </body> </html>

    Grâce aux attributs de transition de CSS3, il est possible de faire des animations de grande qualité tout en mettant le moins de code possible.

    • transition-property : quel élément est à animer?
    • transition-duration : combien de temps dure la transition
    • transition-timing-function : comment assouplir l'animation pour la rendre moins brutale (possibilité d'utiliser des courbes de Béziers)
    • transition-delay : retarder ou avancer l'animation

    Il suffit ensuite de modifier l'élément à animer en Javascript ou avec le :hover de CSS, le navigateur va gérer lui-même la transition.

    Toutefois cette application ne marche que sur les navigateurs compatibles HTML5, et il faut rajouter tous les attributs propriétaires dans la page de style comme vous pouvez le voir dans le code. Pour palier à ce dernier problème on peut récupérer une librairie Javascript qui va rajouter les attributs propriétaires de tout à l'heure en dynamique.

    N'oubliez pas de mettre le plein écran (F11 par défaut) pour profiter pleinement de votre nouvel économiseur d'écran et bonnes fêtes en avance!

    ]]>
    https://blog.goufastyle.org/article/2011/12/18/decorez-votre-pc-pour-noel-en-css3 Sun, 18 Dec 2011 22:28:54 +0100
    <![CDATA[[Technique] Attention au spam]]> https://blog.goufastyle.org/article/attention-au-spam J'ai récemment été attaqué par un spammeur qui utilisait le système de trackback de mon blog. Non seulement il a mobilisé mon week-end à trouver une solution de sécurité, mais il m'a donné l'inspiration pour rédiger ce billet. Le spam est un fléau qui monopolise la bande-passante, les ressources système et les nerfs d'un bon nombre d'acteurs. Je vais vous présenter l'origine et le fondement du spam, comment s'en protéger et comment le combattre.

    Fonctionnement du spam


    SPAM! SPAM! SPAM!

    À la base le spam est une marque de jambon épicé en boîte qui a été repris dans un sketch des Monthy Pythons où ils répètent le nom à tue-tête. C'est le côté répétitif qui a donné son nom au principe que je vais décrire plus bas. La francisation du terme est "pourriel".

    Le principe

    Pour résumer grossièrement, il s'agit de "publicité non sollicitée" comme les prospectus que vous recevez dans votre boîte aux lettres. En détail, nous sommes face à deux situations :

    • C'est la crise, un pauvre développeur (ou son équipe) cherche à grapiller quelques centimes d'euros en présentant une vitrine de produits dont le prix défie gravement la concurrence.
    • Un directeur d'entreprise souhaite vendre ses produits sans passer par une régie de publicité pour des raisons évidentes de coût ou de législation. Par conséquent il exploite (bah ouais qui accepterait de faire une telle magouille illégale) un pauvre développeur, peut-être celui du dessus, pour créer un programme permettant de diffuser massivement son offre.

    Dans les deux cas, la technologie est la même : envoi des offres sur tous les supports numériques possibles : mails, commentaires d'articles, forums, trackbacks,... et les sujet sont divers mais assez récurrents :

    • argent facile
    • casinos
    • pilules miracle pour le sexe ou le poids
    • produits de luxe (de contrefaçon évidemment)
    • diplômes gratuits
    • actions boursières
    • logiciels,...

    Le système d'envoi

    L'envoi par génération de nom est encore utilisé aujourd'hui car c'est simple à mettre en place : un robot génère une multitude d'adresse mail de façon séquentielle et envoie le message à toutes ses adresses. Ce genre de technique est facile à intercepter : pour des raisons de temps, le spammeur va envoyer un mail à plusieurs adresses et ce sera donc possible de reconnaître le mode opératoire.


    Exemple d'envoi robotisé

    L'envoi se fait donc généralement en faisant une collecte des adresses mails sur Internet, nous verrons plus en détail en bas comment s'en prémunir. En gros des programmes parcourent le web et enregistrent les adresses mails visibles, certains détectent des champs de commentaires à peupler.

    Dérivés du spam

    Le phishing ou hameçonnage est une forme sévère du spam qui utilise la même technique sauf qu'il s'agit d'attirer l'internaute vers un faux site bancaire pour récupérer ses coordonnées bancaires. Ce genre ce site se présente avec une interface simpliste et des fautes d'orthographe. Quand vous recevez ce genre de message, allez sur le site officiel de l'organisme et lisez les conditions de contact, voire contactez l'organisme officiel pour demander plus de lumière.

    Les retraits de fonds sont complètement abhérents, ils se présentent par un message du genre :

    Bonjour, nous cherchons à retirer un fonds de X Euros dans [nom du pays]. Cependant nous aurions besoin d'un référend dans votre pays qui puisse intercépter la somme et nous vous proposons X% pour vous

    Cette combine est fausse car vous allez vous retrouver à payer des sommes supplémentaires pour les aides (transport, pots de vin,...), et au final c'est votre argent qu'ils auront récupéré. Quand vous voyez ce message, signalez-le en tant que phishing et parlez-en autour de vous.

    Se protéger et prévenir

    Vous n'êtes pas submergé(e)? Patience ça va venir! Voici quelques manipulations importantes qui vont vous permettre de retarder ce grand moment.

    Ne jouez pas le jeu des chaînes de mails

    "Envoyez ce mail à 20 personnes et vous gagnerez un téléphone, de la chance dans la vie, sinon un dinosaure vous tuera,..." tant de menaces ou d'incitations dans ces chaînes qui vous proposent de faire marcher votre cercle d'amis ou de participer a des concours ou causes bidons, mais c'est surtout une occasion pour un spammeur de recueillir une quantité incroyable d'adresses mails. Un simple parcours des mots avec @ permet de récupérer tous les mails du message et une fonction en PHP permet d'envoyer les mails facilement!

    Je suis d'accord sur le fait que vous aimez bien partager quelque chose de rigolo ou d'intéressant, mais dans ce cas je vous propose des manipulations simples pour partager simplement une information :

    • quand vous transférez un mail, effacez les mails présents dans le message pour ne pas les faire re-transferer
    • utilisez le champ "Copie cachée" (ou Bcc) du mail pour transférez quelque chose à plusieurs d'adresses, ainsi le destinataire ne verra que son adresse dans son message
    • s'il vous plaît n'incitez pas vos destinataires à faire suivre votre document, ils choisiront s'ils trouvent intéressant de le partager à leurs contacts.

    Grâce à ces manipulations, vous evitez le transfert de votre adresse mail dans une chaîne infinissable et incontrôlable! Enfin, pensez à faire un petit tour sur Hoaxbuster pour vérifier la véracité des contenus.

    Ne diffusez pas votre adresse à tout va

    Une adresse visible sur Internet est une adresse à manger pour un programme de spam. Il ne faut pas l'afficher ou alors utiliser quelques subtilités :

    • remplacez votre mail par une image sans mentionner de mail dans le nom ou le champ alternatif
    • remplacez les caractères @ ou . par At, chez, dot, point,...
    • préférez un contact par formulaire ou par un compte twitter
    • si vous administrez un site web, remplacez votre mail par du code Javascript, il s'affichera sur votre page mais pas sur votre code :
    <script type="text/javascript">document.write("monmail"+"\u0040"+"domaine"+"\u002e"+"com");</script>

    Utilisez une adresse jetable

    Pour lutter contre le spam, certains forums exigent lors de l'inscription une adresse mail pour prouver l'humanité de l'internaute. Ben entendu ça repousse quelques robots mais surtout les internautes qui n'ont pas envie de fournir leur mail pour ne pas être, justement, spammés.

    Il existe cependant des services pour obtenir une adresse temporaire (unmail, zemail,...). En gros vous créez l'adresse, vous en servez pour l'inscription, la relevez pour le code d'inscription et vous l'oubliez elle sera désactivée dans quelques jours! Si vous ne constatez pas de spam après l'inscription alors vous pourrez mettre une adresse fiable à la place.

    Si vous possédez un serveur mail ou d'hébergement avec votre propre nom de domaine, vous pouvez vous amuser à créer des adresses poubelle spécifiques du service (poubelleamazon@...) et ensuite contrôler plus facilement l'origine du transfert de votre adresse! Et si elle est spammée, vous la supprimez!

    Personnalisez votre système de reconnaissance


    Exemple de Captcha, et encore celui-là est facile...

    Petite anecdote : un site d'informatique a posé un système Captcha pour contrer le spam dans ses commentaires. En quelques temps les membres eux-mêmes ont réussi à trouver la faiblesse du système rendant le contrôle pratiquement inefficace.

    Le Captcha est un outil permettant d'afficher des lettres déformées dans une image pour que l'internaute dusse les saisir avant de s'inscrire ou poster un message. Avec le temps les déformations sont devenues de plus en plus complexes et étant daltonien, il m'est pratiquement impossible de les résoudre alors les spammeurs arrivent à poster sans soucis. L'autre aspect est qu'il s'agit d'un plugin universel, c'est-à-dire que la plupart des sites se le sont approprié, mais si une faille est détectée, alors tous les spammeurs vont s'y engouffrer.

    Il vous faut donc personnaliser votre système de contrôle à votre sauce avec vos phrases par exemple, et utiliser un codage propre pour faire passer les paramètres du formulaire.

    Comment combattre le spam

    Ca y est, vous commencez à recevoir des messages publicitaires non sollicités, nous allons voir comment ne pas amplifier le phénomène et ne pas dériver.

    Ce n'est pas celui que vous croyez!

    Bien sûr votre premier réflexe sera de répondre à l'expéditeur pour lui demander de se calmer (on verra ça plus bas) mais il faut savoir qu'un mail est comme une lettre à la poste : on peut mettre ce que l'on veut dans le champ expéditeur, vous ne pouvez pas le faire vous-même car vous êtes bridé(e) par votre logiciel de messagerie!

    Si l'expéditeur est une connaissance proche, demandez-lui de faire un scan anti-virus sur son poste. Profitez-en pour en faire un de votre côté.

    Sachez différencier le non-sollicité du opt-out

    Je ne choisis pas de ne pas choisir de ne pas recevoir des offres qui ne me seront pas envoyées si je ne coche pas la case ci-contre

    Quand vous adhérez à un service en ligne ou dans une boutique, vous ne remarquez pas souvent la petite case à cocher qui vous dit "ne m'envoyez pas d'offres de votre service". De ce fait vous recevez de la publicité venant de l'organisme auquel vous avez souscrit.

    Ceci n'est pas du spam (du moins par ommission), c'est une manipulation particulière qui s'appelle de l'opt-out :

    • opt-in : c'est vous qui choisissez si vous voulez obtenir des offres
    • opt-out : on vous envoie des offres mais vous pouvez choisir de vous désabonner
    • spam : on vous envoie des offres, que vous le vouliez ou non.

    Si vous reconnaissez l'organisme auquel vous avez adhéré, alors vous pouvez cliquer sur le lien de désinscription qui figure au bas du message.

    Attention toutefois à l'opt-out non sollicité : un message venant d'un organisme que l'on ne connait pas qui fait de la pub et qui vous propose de vous désinscrire. Il peut s'agir de "partenaires" de l'organisme en question. Pour ma part je ne répond pas et je filtre ces messages, car si je clique sur le lien je prouve que j'existe et s'ils arrêtent de m'envoyer des messages, peut-être que ce sera quelqu'un d'autre...

    Ne cherchez pas la provocation ou la vantardise

    Tout simplement parce que vous ne savez pas à qui vous avez affaire en face! Il s'agit de quelqu'un qui est motivé pour gagner de l'argent ou pour satisfaire son boss. Mais pour peu qu'il soit un geek, alors il trouvera le temps de se parfaire voire de développer un outil pour vous attaquer directement. Si vous dévoilez votre système de sécurité, alors le spammeur l'exploitera à ses fins.

    Pour ma part j'utilise un principe assez particulier : je fais croire au spammeur qu'il a réussi à poster son message en laissant un message d'alerte par défaut. Par exemple, si vous bloquez l'accès à votre site au spammeur en mettant dans votre .htaccess

    Deny from <ip>

    Alors le spammeur va se rendre compte du blocage (une erreur 403) et va s'adapter. Mais si on lui fait croire qu'il a réussi, alors il générera des visites sur votre site et ne changera pas sa stratégie!

    Suivez vos règles de blocage

    Mettez-vous à la place du spammeur : quand une règle de postage ne marche plus, il en utilise une autre! Par conséquent vous allez vous retrouver avec une multitude de règles de contrôle dont certaines vont être inutilisés. Comptez-les pour voir lesquelles sont encore utilisées.

    Paré au combat

    Tout comme les virus biologiques ou informatiques, le spam mute pour passer toutes les barrières de protection. Il ne faut pas désespérer car grâce à cet article vous êtes parré(e) pour empêcher ou combattre ce fléau et rappelez-vous que la prévention est beaucoup plus efficace que le tri sélectif après coup.

    + Sources des images

    ]]>
    https://blog.goufastyle.org/article/2011/02/02/attention-au-spam Wed, 02 Feb 2011 23:26:53 +0100
    <![CDATA[[Technique] Le RSS, c'est quand vous voulez]]> https://blog.goufastyle.org/article/le-rss-c-est-quand-vous-voulez

    Tous les matins, certaines personnes ouvrent une batterie de pages web pour regarder les nouveautés et ce faisant, saturent le cache de leur navigateur et la bande passante déjà débordée de leur connexion à Internet. Moi, j'ouvre un lecteur de flux RSS et je survole toutes les nouveautés en quelques secondes (sites, vidéos ou images) sans ouvrir une page web supplémentaire! Un gain de temps phénoménal dans un monde où l'on est submergé d'informations. Cet article a pour but de présenter la technologie RSS à ceux qui ne la connaissent pas d'un point de vue consommateur (ceux qui vont les lire) et producteur (ceux qui vont les mettre à disposition.

    Concrètement c'est quoi un flux RSS

    Concrètement, c'est un fichier lu par votre navigateur ou un serveur distant qui contient une liste d'éléments. Ça peut être une liste d'articles de votre blog ou d'un journal, les derniers commentaires d'un billet, ce que vous voulez! Plus précisément il s'agit d'un fichier XML mis à jour dynamiquement (généré directement par du code) ou statiquement (enregistré tous les X temps par une tâche planifiée. Je vous rassure tout de suite, il n'est pas nécessaire de s'y connaître à mort dans le parcours en profondeur ou la création de fichiers de ce genre, des bibliothèques existent dans la plupart des langages de programmation.

    Une chose est sûre, ce système est arrivé en même temps que tous les outils propres au mécanisme Web 2.0 (à savoir les blogs, wikis,..) : c'est le contenu qui vient à nous! et en plus c'est un gain de productivité en proposant une liste de sujets et non pas des articles complets :

    • derniers articles ou news
    • derniers commentaires généraux ou d'un article en particulier
    • découpage par catégories d'un site
    • alertes ou notifications (mail, facebook,...)

    Côté consommateur

    Où le trouver?

    Très simple ; cherchez le logo orange avec des ondes dessinées dessus. Il est soit en haut à droite dans la continuité de la barre d'adresse de votre navigateur (pour google chrome il faut un plugin) ou quelque part sur le site. Pour vous aider je vous donne le lien :http://blog.goufastyle.org/rss/posts

    Comment on s'en sert?

    Si vous avez ouvert le lien précédent en cliquant dessus, vous avez constaté deux choses : soit vous avez un vieux navigateur et il vous a affiché un code indigeste que nous détaillerons dans un section plus bas, soit il y a un aperçu du contenu du flux avec la possibilité de vous abonner en utilisant votre lecteur de flux favori :

    • Netvibes
    • Google Reader
    • ...

    Netvibes


    Ajouter un flux dans Netvibes

    Pour ajouter mon flux, cliquez sur "Contenu" en haut à gauche puis sur "ajouter flux" avec le logo que nous connaissons maintenant. Il suffit ensuite de rentrer l'adresse du site ou de coller l'adresse du flux. Une boîte se crée pour vous montrer l'aperçu et vous pourrez ensuite la glisser dans la page et l'onglet qui vous convient.

    Ensuite vous pourrez décorer cette boîte en fonction de vos désirs et du contenu de l'information. Cliquez sur le numéro entre parenthèses pour passer directement pour les flux en lus.

    Google Reader


    Ajouter un flux dans Google Reader

    En haut à gauche de la fenêtre, cliquez sur "Ajouter un abonnement" et entrez l'adresse du flux. Pensez à mettre un tag dans les paramètres du flux pour pouvoir le classer plus facilement.

    Dans votre code

    Pour récupérer les informations du flux RSS, vous pouvez parser le contenu avec n'importe quel parseur de fichier XML ou utiliser la bibliothèque fil_le pour récupérer le contenu sous forme d'objet.

    Côté producteur

    A quoi ça ressemble?

    Pour ne pas que vous ayez à regarder plus haut, je vous recolle le lien de mon flux RSS bande de flemmards : http://blog.goufastyle.org/rss/posts

    Donc si vous l'ouvrez sur un ancien navigateur ou dans un éditeur quelconque, vous verrez un code ingérable mais dont la structure est familière :

    <?xml version='1.0' encoding='ISO-8859-15' ?> <rss version='2.0'> <channel> <title>Goufablog - Tous les billets</title> <link>http://blog.goufastyle.org/</link> <description>Les derniers billets du Goufablog!</description> <lastBuildDate>Mon, 06 Dec 2010 09:18:16 +0100</lastBuildDate> <item> <title><![CDATA[[Jeux vidéos] La chasse aux FPS]]></title> <link>http://blog.goufastyle.org/article/la-chasse-aux-fps</link> <description><![CDATA[Tout &agrave; commenc&eacute; par la sortie du jeu Max Payne sur PC. Les machines commen&ccedil;aient...]]></description> <guid isPermaLink='true'>http://blog.goufastyle.org/article/2010/11/27/la-chasse-aux-fps</guid> <pubDate>Sat, 27 Nov 2010 22:12:55 +0100</pubDate> </item> <item> ... </item> </channel> </rss>

    En gros vous avez une description de votre flux, et une liste d'items qui représente la liste des éléments du flux.

    Comment on génère le flux?

    À vous de choisir parmi les 3 types de génération :

    • à la volée en générant dynamiquement le flux, fiable car direct et recommandé quand vous n'avez pas d'autorisations sur les manipulations de fichiers
    • par création automatique dans un intervalle de temps défini, pratique quand la fréquence de mise à jour des données est faible
    • avec des bibliothèques ou des sites aspirateurs si vous avez la flemme de coder ou que vous voulez pousser le suivi de vos articles

    Pour les deux premières parties, il suffit de reproduire le code XML du flux décrit ci-dessus sans oublier de signaler au client qu'on envoie du XML :

    Content-Type: application/rss+xml;charset=ISO-8859-15

    Il faut aussi penser à l'encodage du fichier notamment concernant les accents. Penser aussi à le valider.

    Si vous optez pour les bibliothèques, je vous conseille la librairie fil_le.

    Pour la troisième partie, je connais feedburner qui permet en plus de parcourir votre site, d'établir des statistiques sur les abonnés.

    Et comment on le met à disposition?

    Le flux va être caractérisé soit par un fichier statique, soit par une URL à accéder. Donc bien entendu c'est à vous d'en faire la promotion, mais il y a un moyen plus rapide et efficace pour prévenir internautes et serveur distant : insérez dans votre code (en remplaçant l'adresse dans href)

    <link rel='alternate' type='application/rss+xml' href='rss/posts' title='Derni&egrave;res nouvelles' />

    et le logo RSS apparaîtra dans la barre d'adresse de votre navigateur et les sites distants sauront où chercher votre flux juste à la racine de votre site. Pratique et simple!

    Mais ça rapporte quoi?

    Intégrer les RSS dans votre site vous donne un meilleur accès à l'information de votre site sans assiéger le lecteur avec une newsletter par mail ou en l'incitant à venir glaner des informations en venant sur votre site toutes les heures. Si toutefois vous avez peur de ne plus avoir de visiteur, faîtes comme moi : ne distribuez qu'un résumé ou le premier paragraphe de votre article.

    Le RSS est une technologie qui date un peu mais je vois que certains sites ne l'implémentent pas encore, alors que la mise en place est plutôt facile. Si la plupart des sites peuvent mettre en place cette visibilité, la vitesse d'accès à l'information et la productivité générale pourraient être grandement améliorés!

    + Sources des images

    ]]>
    https://blog.goufastyle.org/article/2010/12/09/le-rss-c-est-quand-vous-voulez Thu, 09 Dec 2010 16:41:51 +0100
    <![CDATA[[Technique] Décorez votre PC pour Noël en Javascript]]> https://blog.goufastyle.org/article/decorez-votre-pc-pour-noel-en-javascript Ah les décorations de Noël! Des guirlandes électriques ou pas, les sapins, les crèches,... Rien de tel pour montrer à tous vos voisins que vous respectez les traditions à but commercial (vous savez, Noël, Halloween, le nouvel an,...). Mais bon comme je suis un gros geek, je ne vais pas sortir de chez moi et décorer mon petit appartement. J'ai donc choisi de faire une décoration minimale qui durera toute l'année : un changement aléatoire de la couleur de l'écran!

       

    Moins clignotant qu'une guirlande, plus doux que l'éclairage domestique, vous aurez de quoi vous prélasser pour Noël et les autres jours!

    Choix de la technologie

    J'ai choisi la technologie HTML/Javascript pour réaliser ce programme :

    • pas besoin d'installer de logiciel, votre navigateur suffit
    • le Javascript est côté client, donc pas d'instance de serveur sauf peut-être pour distribuer le programme
    • distribution facile et multi-plateforme
    • le code est visible, mais bon...
    • il faut activer le Javascript pour que ça marche

    Le principe consiste à utiliser la propriété de Javascript de modifier le DOM (Document Object Model) d'une page web pour modifier la couleur de l'arrière plan du Body de la page.

    Code

    Côté Javascript :

    /*****************************************************\ |Nom : couleurs.js |Auteur : Claude Boellinger |Date : 24/11/2007 | | Ce programme a pour but de modifier la couleur | de fond du body d'une page (ou d'autre chose) | \*****************************************************/ var back = new Array(); // couleur par défaut for (i=0;i<3;i++) { back[i]=Math.floor(Math.random()*256); } var timeOut = 35; var hexa = new Array(); hexa[0]="a"; hexa[1]="b"; hexa[2]="c"; hexa[3]="d"; hexa[4]="e"; hexa[5]="f"; var cpt = 1; var oldState = 0; var state = 0; var way = 1; // on appelle la fonction de dessin tous les timeOut // millisecondes window.setTimeout("changeColor()",timeOut); // fonction pour convertir en hexadécimal function toHex(v) { a = Math.floor(v /16); b = v - 16*a; if (a>=10) { a = hexa[a-10]; } if (b>=10) { b = hexa[b-10]; } return ""+a+b; } // fonction appellée et bouclée function changeColor() { cpt--; if (cpt==0) { // en gros on dégrade la composante de // couleur (RGB) continuellement // pendant cpt itérations way = way * -1; cpt=75; state = Math.floor(Math.random()*3); while (state == oldState) { state = Math.floor(Math.random()*3); } oldState = state; } if (!((back[state]==0 && way == -1) || (back[state]==255 && way==1))) { // incrementation de la composante // de couleur back[state] +=way; } else { // on change de sens si on a atteint // une extremité cpt = 1; } totalBack = "#"; for (i=0;i<3;i++) { // on met la couleur en cours au // format hexa (#03FE5A) totalBack += toHex(back[i]); } // et on met à jour le document! document.getElementById("body").bgColor = totalBack; // la fonction se rappelle elle-même window.setTimeout("changeColor()",timeOut); }

    Côté page web :

    <html> <head> <title>Couleurs</title> <script type="text/javascript" src="couleurs.js"> </script> </head> <body id="body"> </body> </html>

    Exécution

    Mettez les deux fichiers dans un même répertoire. Ouvrez votre navigateur et accédez à la page où vous avez mis ce code. Vous pouvez le mettre en plein écran en appuyant sur la touche F11 par défaut (le navigateur Opéra cache toutes les barres de navigation en plein écran). Vous obtiendrez le résultat visible en haut de cette page mais sur tout l'écran. Simple, non? Voilà, vous avez de quoi décorer votre appartement simplement! Sur ce passez de bonnes fêtes de fin d'année!

    ]]>
    https://blog.goufastyle.org/article/2010/12/09/decorez-votre-pc-pour-noel-en-javascript Thu, 09 Dec 2010 10:21:09 +0100
    <![CDATA[[Technique] Ma migration PHP4 vers PHP5]]> https://blog.goufastyle.org/article/ma-migration-php4-vers-php5

    Étant encore en version 1.8 d'EasyPHP et ayant marre des messages d'alerte m'indiquant la présence d'une nouvelle version des outils, je me suis pris par la main et j'ai téléchargé la dernière version d'EasyPHP contenant PHP 5.3.2i. Malheureusement tout n'est pas comme dans le monde des bisounours et je me suis confronté à quelques problèmes :

    • les pages s'affichaient mal
    • des fonctions obsolètes sont apparues
    • quelques problèmes pour restaurer la base de données

    Je vais donc vous donner quelques conseils pour palier à ces petits soucis et vous aider à faire une meilleure migration vers PHP5 sur EasyPHP.

    Pré-requis

    Mais avant de commencer, préparez-vous bien avec quelques manipulations et quelques outils :

    • téléchargez et installez notepad++, il s'agit d'un éditeur de texte performant multi-plate-forme qui va nous aider notamment grâce à sa recherche dans les fichiers d'un dossier et la recherche en expression régulières.
    • SAUVEGARDEZ TUDJU!!!! Sauvegardez le contenu de votre répertoire www et mysql_data. Je ne suis pas responsable des pertes de données ou de fichiers suite aux manipulations ci-dessous!
    • faîtes un export de votre base en fichier texte ou autre. Grâce à votre nouvel éditeur, surveillez le bon passage des accents au besoin.
    • gardez une installation de votre ancien serveur pour tester la non régression et récupérer votre base de données, nous verrons cela plus loin.

    Les pages ne s'affichent pas correctement

    Pour se simplifier la vie ou tout simplement en copiant-collant du code sur le net, je me suis retrouvé avec plein de balises courtes (<?, <?=,...). La directive short_tags permet de déterminer si le serveur veut bien les reconnaître ou non. Laissez ce paramètre à false, il permettra de mettre un peu de rigueur dans votre code en spécifiant précisément quel langage vous utilisez côté serveur. Maintenant il faut remplacer tous les mini-tags par des tags normaux.

    Pour cela, on va utiliser notre nouvel éditeur de texte et ses fonctions d'expressions régulières. Vous avez fait la sauvegarde? On y va!

    Remplacement des <?


    Interface de recherche de notepad++

    L'expression régulière est "remplacer toutes les balises <?. Ouvrez donc Notepad++ et faîtes Edition > Rechercher > Fichiers dans les dossiers. Cochez le bouton "expressions régulières" et remplissez les zones de texte :

    Rechercher :

    <?

    Vérifiez la liste qui vous est fournie en contrôlant tous vos langages serveurs ou autres (xml par exemple). Rajoutez éventuellement les balises non php avec leur texte long (<?xml par exemple).

    Remplacer par :

    <?php

    Ajoutez un espace à la fin de l'expression de remplacement. Ne regardez pas votre code maintenant, vous allez avoir peur! J'espère que vous avez sauvegardé!

    Remplacement des <?=

    L'expression régulière est "remplacer tout le contenu entre <?= et ?> par <?php echo ... ; ?>". Attention, on a déjà remplacé les <? existants!

    Rechercher :

    <?php=(.*)?>

    Remplacer par :

    <?php echo \1; >

    Remise en forme des <? surchargés

    Eh oui, vous allez trouver des <?phpphp ou <?phpxml restants du premier remplacement. Heureusement que vous avez mis au propre les autres balises non php avant de faire tout ça. Nous allons nous en occuper :

    Recherchez :

    <?php([a-zA-Z0-9]+)

    Remplacez par :

    <?\1

    Pour vérifier, relancez votre site pour guetter les éventuelles erreurs d'affichage. On continue?

    Fonctions obsolètes

    En migrant j'ai eu affaire à deux groupes de fonctions obsolètes : des fonctions de session et les fonctions ereg*. Si vous tombez sur d'autres fonctions obsolètes, je vous laisse consulter la documentation PHP

    Les sessions

    D'après les messages d'alerte, les fonctions session_register et session_unregister sont obsolètes et donc amenées à disparaître dans les prochaines versions. Le contournement est simple :

    Rechercher :

    session_register\((.*)\);

    Remplacer par :

    $_SESSION[\1] = 0; // ou ""; si c'est du texte

    Rechercher :

    session_unregister\((.*)\);

    Remplacer par :

    unset($_SESSION[\1]);

    Les fonctions ereg

    La version 5 de PHP choisit de déprécier les fonctions traitant les expressions régulières de type POSIX pour laisser place aux PCRE (Perl Compatible Regular Expression). En gros il s'agit d'expressions régulières améliorées, mais elles ont un format différent... Vous pourrez trouver toute la documentation sur le site de PHP

    Les PCRE ont un masque de délimitation. Par exemple :

    Je.*cherche

    devient

    #Je.*cherche#

    Le masque de délimitation peut être n'importe quel caractère, de préférence un qui n'est pas dans l'expression elle-même, sinon il suffit de l'échapper.

    #Je\#.*cherche#

    Après les délimiteurs, on peut mettre un masque comme pour des options supplémentaires de recherche. Par exemple i permet de faire une recherche en ignorant la casse :

    #Je.*cherche#i

    Pour résumer, voici les fonctions à remplacer avec un délimiteur générique :

    AvantAprès
    ereg\((.*),(.*)\)preg_match(\1,\2)
    eregi\((.*),(.*)\)preg_match(\1i,\2)
    ereg_replace\((.*),(.*),(.*)\)preg_replace(\1,\2,\3)
    eregi_replace\((.*),(.*),(.*)\)preg_match(\1i,\2,\3)
    split\((.*),(.*)\)preg_split(\1,\2)

    Il vous faudra par contre ajouter les délimiteurs et surveiller la moindre expression changée pour être sûr(e) quelle corresponde bien à vos attentes.

    La base de données

    Apparemment déplacer les fichiers ou reparamétrer le répertoire ne suffit pas à faire fonctionner la base qui passe quand même de 4.1.9 à 5.1.49! La seule solution que j'ai trouvé pour migrer les données consiste à faire un export de l'ancienne base et un import dans la nouvelle.

    Encodage

    Attention aux formats d'exportation et d'importation notamment si vous manipulez des accents, vous devez garder le même format entre l'encodage de l'ancienne base, le fichier d'exportation et le format de la nouvelle base. Pour passer d'un format à l'autre, servez-vous du fichier et convertissez le avec Notepad++ (Format > Convertir en UTF-8/ANSI).

    Passez au mysqli

    PHP5 propose une nouvelle librairie, mysqli, qui intègre quelques fonctionnalités supplémentaires en plus de la librairie mysql de base. Par exemple l'encodage est mieux supporté et il est possible d'utiliser une instance de connexion sous la forme d'un objet.

    Assurez-vous quand même que votre hébergeur final aura cette extension ou au pire demandez-la lui.

    Pour partir du plus simple et migrer rapidement, il faudrait remplacer l'ensemble des fonctions de votre code par des fonctions mysqli au lieu de définir un objet d'instance. Je n'ai pour ma part pas eu le besoin de passer en mysqli, mais la documentation de PHP stipule qu'il est intéressant pour un nouveau projet d'utiliser cette bibliothèque.

    Bilan

    Tous les points que j'ai rencontré plus haut sont ceux qui m'ont bloqué personnellement dans ma migration. Il se peut donc que vous trouviez des écarts, notamment lors du remplacement de texte. Si vous vous trompez, récupérez la dernière sauvegarde de votre fichier et comparez vos modifications avec la duplication des vues. Grâce à ce tutoriel, vous avez pu en savoir plus sur les expressions régulières et sur certains réglages de votre serveur Apache-PHP-Mysql. Vérifiez quand même la configuration de votre futur serveur avant de mettre en place vos modifications!

    + Sources des images

    ]]>
    https://blog.goufastyle.org/article/2010/08/23/ma-migration-php4-vers-php5 Mon, 23 Aug 2010 21:18:59 +0200
    <![CDATA[[Technique] Test du décodeur IHD 91 en mousse d'Orange ]]> https://blog.goufastyle.org/article/test-du-decodeur-ihd-91-en-mousse-d-orange Je suis un geek. Par conséquent tout passe par mon ordinateur : jeux vidéos (carte graphique HD5850 via le DVI), télé (carte tuner reliée à la prise coaxiale de l'immeuble), téléphone (skype),... Hélas on dit que la vie d'un geek ne tient qu'à un fil, celui du câble RJ11 (eh oui, on est passé au Wifi maintenant). Je dépend donc d'un opérateur téléphonique qui me loue un modem-routeur à 3 euros tous les mois et qui n'hésite pas à m'appeler pour me proposer des offres alléchantes pour me garder plus longtemps.

    Je suis donc démarché de temps en temps pour savoir si je suis toujours satisfait de mon offre, pardon, si leurs différents processus internes (vente, achat, fourniture, SAV) atteignent l'excellence, et ce qui devait arriver arriva : l'offre triple play. En gros mon abonnement comprend la possibilité (mais non pas l'obligation) de brancher un décodeur télé sur ma box Internet. Je suis donc appelé tous les mois par un être humain différent lisant toujours le même script contenant le même message : "vous savez que vous pouvez prendre un décodeur dans votre offre pour pouvoir regarder des émissions de sport, de musique, de [lit sa fiche...],... alors?" et auxquels je répondais toujours la même chose : pas de place (oh vous savez c'est tout petit), pas de prise (mais si, avec votre prise HDMI), pas besoin (je vais donc vous parler de la télé sur le web, alors...)

    Après le 3ème appel où l'opératrice était limite à genoux et me proposait de m'envoyer le décodeur directement par une pin-up en parachute juste sur mon balcon, je cède pour être enfin tranquille et je précise bien à la dame que la destination finale de cet appareil risque d'être sous mon fauteuil.

    Installation

    Ouverture de la boîte


    Le IHD91 en fonctionnement "optimal" et sa télécommande

    Le vendeur m'a donc fourni le IHD 91 et une offre d'essai d'un bouquet de chaîne, d'abord 3€ les 3 premiers mois, puis 16€!). Un petit tour sur le net montre que ce décodeur à tendance à exaspérer et rendre suicidaire contrarier fortement les utilisateurs et vous connaissez maintenant mon fournisseur Internet, rassurez-vous, pas pour longtemps. J'ouvre donc la jolie petite boîte pour découvrir une boîte en plastique blanche et une télécommande en forme d'oeuf. Une notice me signale de ne pas poser d'objets sur sa surface parfaite dépourvue d'aération... Un câble RJ45 de 15 mètres (véridique) suit et un câble d'alimentation de 1,5 mètres. Pour tout vous avouer il m'a fallu rajouter une rallonge... électrique!

    Le tout est installé, j'appuie sur le bouton de la télécommande, il ne se passe rien! Je retourne la télécommande et appuie sur le bon bouton, ça s'allume! J'entends le doux bruit d'un disque dur interne se lancer, je vais donc pouvoir enregistrer des émissions et utiliser le time shifting! L'affichage de l'heure est assez fort mais avec un cache c'est bon...

    J'attends le paramétrage quelques minutes et je mets le code d'accès.

    A un moment le décodeur semble calculer un truc et se fige. Je recherche donc un bouton Reset introuvable, le manuel stipule donc de débrancher/rebrancher électriquement l'appareil. Ça marche, mais je me retape le paramétrage! Pratique en cas de coupure de courant! Un autre freeze survient et là je découvre avec consternation que si le premier débranchement ne fonctionne pas, il faut aussi débrancher la box! Je teste, et ça marche! Impressive!

    Utilisation et ergonomie

    Donc j'appuie sur la télécommande, je la retourne, j'appuie sur la télécommande et la boîte se met en marche. Je me retrouve donc sur une chaîne par défaut quand ce n'est pas de la pub pour les autres bouquets de l'opérateur et... je ne peux pas zapper à cause du sablier d'attente qui charge le libellé du programme en cours et qu'il ne pouvait pas profiter de la veille pour le faire. Je peux enfin zapper!


    La mosaïque de consommation des programmes

    La qualité est relativement bonne, mais le menu est assez lent et in-ergonomique! Les touches à l'écran ne correspondent pas à celles inscrites sur la télécommande et la navigation n'est pas intuitive. La "mosaïque des programmes" présente toutes les chaînes de toutes les offres, un survol annonce le programme en cours mais quand on veut y aller, c'est que à ce moment qu'on nous signale qu'elle ne fait pas partie du bouquet! C'est ainsi que j'ai appris en résiliant l'offre temporaire que j'avais perdu des chaînes pourtant accessibles comme Game One. EDIT : Corrigé avec la nouvelle version du firware!

    Je suis donc en présence d'une boîte blanche chauffante à la télécommande symétrique qui me propose des chaînes auxquelles je n'ai pas accès, qui se bloque le temps de charger le programme télé alors qu'elle pourrait le faire pendant la veille et EDIT : Corrigé avec la nouvelle version! Plus que 10 secondes! qui se réinitialise (et s'éteint donc) à chaque micro-coupure! On continue?

    J'appuie sur le bouton d'enregistrement, je retourne la télécommande, non non le bouton ne marche pas! Après vérification, je dois payer 5 euros par mois pour utiliser cette fonctionnalité! Euh attendez, j'ai un bouton de télécommande prêt, un disque dur apparemment opérationnel et un décodeur qui capte plutôt bien (si si!), donc tous les moyens techniques pour enregistrer des émissions et faire du Time Shifting... et il faut que paye 5 euros par mois en plus?!?

    Bon bref la petite boîte me sert quand même de tuner secondaire en cas d'enregistrement sur l'ordinateur. Et.. ben en fait c'est tout!

    Verdict

    • un tuner de secours en cas d'enregistrement sur le PC
    • un disque dur qui chauffe inutilement
    • une télécommande symétrique
    • l'heure affichée en lettres de feu (même en veille)
    • 40 secondes au démarrage avant de pouvoir zapper Corrigé!
    • réinitialisation à chaque micro-coupure de courant
    • des chaînes visibles mais inaccessibles Corrigé!
    • un câble d'alimentation 10 fois plus petit que le câble réseau

    Réponse aux questions

    Attends, je croyais que tu ne pouvais pas brancher d'écran sur le décodeur?

    En fait je suis passé à côté d'un 22" à Surcouf qui m'a plu pour remplacer mon écran cathodique de 17". Il a une prise HDMI et des baffles intégrés. C'est un gain de place et de confort pour moi, mais je suis d'accord que c'est quand même de l'incitation à la consommation.

    T'es allé un peu vite pour récupérer ce décodeur!

    Je vais vous raconter un autre histoire : pendant une semaine, je recevais un appel par jour sur mon fixe (mais bon, je travaille...) avec toujours le même message : "[robot]... pas, vous allez être mis en relation! Ne quittez pas, vous allez... [humain]Allô? Allôôô?!? Allô?...".

    J'ai donc fait un transfert d'appel vers mon portable pour enfin ne plus psychoter à cause d'un central téléphonique ne connaissant pas l'existence d'un... répondeur! Mon téléphone sonne, et j'entends "[robot]... pas, vous allez être mis en re... [humain]Ras le bol, ras le bol! ... Oui bonjour Monsieur! Je suis..." la nouvelle standardiste avec toujours le même script! Face à un tel harcèlement, je n'ai pu que céder avant de broyer le téléphone dans ma main!

    Ben, ramène-le!

    Je n'ai pas confiance en mon facteur, et je n'ai pas la tête à faire des aller-retours dans les boutiques d'Orange jusqu'à satisfaction... Comme je l'avais précisé, je l'ai pris juste pour ne pas recevoir des tonnes d'appels téléphoniques, ce qui est le cas depuis son acquisition il y a 5 mois, comme quoi...

    Vas voir ailleurs!

    Je prévois de profiter d'un déménagement dans le Sud pour résilier avec l'opérateur. J'ai déjà commencé à comparer les offres. Fort heureusement je n'ai pas eu de prolongement de durée d'engagement.

    + Sources des images

    ]]>
    https://blog.goufastyle.org/article/2010/08/23/test-du-decodeur-ihd-91-en-mousse-d-orange Mon, 23 Aug 2010 21:12:12 +0200
    <![CDATA[[Technique] L'informatique et le cinéma]]> https://blog.goufastyle.org/article/l-informatique-et-le-cinema

    Un nouveau buzz (pardon, ramdam) est sorti aujourd'hui. Après le Meuporg d'un journaliste du télé matin mal réveillé, la série Plus belle la vie s'attaque aux MMOMRPGP et au piratage informatique toujours aussi parodique! Bon après je ne connais pas la série alors peut-être que quelques hypothèses m'échappent (par exemple c'est une maison de geeks et la fille travaille aux renseignements généraux...)!


    Stop! Petite analyse :

    • Un portable dual-screen (dont un écran non observé) sur une table au milieu du salon...
    • Ah! Une fille! Bon d'accord, je suis sûr qu'il y a beaucoup de geekettes là où je travaille, quoique (se lève, regarde à gauche, regarde à droite) ah ben non!
    • "Ses firewalls sont trop puissants!" Euh c'est une forteresse cet ordinateur! De plus on ne va pas pirater un tel système assis dans le salon connecté à la Livebox.
    • "Ouais! Je suis rentré dans son bureau!" Généralement le profil d'un joueur en ligne est plutôt stocké sur le serveur dédié au jeu appartenant au studio de développement et là je vous laisse deviner la sécurité!
    • Le eeePC connecté au 3G (tout au plus au Wifi ouvert du bar) à l'air vachement sécurisé pour être hacké par un MacBook contenant 5 fois la même console.
    • Le même eeePC peut faire tourner un jeu en ligne massivement multijoueur. D'accord s'il s'agit d'un site web mais de là à passer tant de temps, les pages répétitives doivent être lassantes, et je ne pense pas qu'un site web soit efficace pour tuer un boss de fin...

    En bref, plein de nouveaux éléments pour montrer que les films et séries regorgent d'éléments que certains seront capables de déceler, mais ce n'est pas tout! Voici une petite liste des bourdes et détails que l'on peut déceler et qui montrent que les réalisateurs ne sont pas encore au point sur les nouvelles technologies :

    • On n'utilise pas la touche espace lorsque l'on tape au clavier.
    • Tous les écrans affichent des caractères de 10 centimètres de haut.
    • Les ordinateurs high-tech des services gouvernementaux ou scientifiques sont tellements puissants qu'ils ont des interfaces lisibles et ergonomiques.
    • Ceux qui ne le sont pas ont une interface en ligne de commande capable de comprendre parfaitement l'anglais.
    • Par conséquent il suffit de taper ACCEDER AUX FICHIERS SECRETS dans la ligne de commande pour y acceder.

    Matrix reloaded : le ssh commençait pourtant bien!
    • De même pour déployer un virus surpuissant, il suffit de taper DEPLOYER VIRUS pour attaquer tous les ordinateurs!
    • Les virus font chauffer les machines comme la fièvre chez les humains. Au bout d'un moment, de la fumée s'échappe des disques et de l'écran.

    Ce genre d'attaque serait possible sur des ordinateurs gérant l'overclocking, mais la fumée est exagérée...

    • Tous les ordinateurs sont connectés et accessibles, même éteints!
    • Les ordinateurs émettent un "bip" quand l'utilisateur appuie sur une touche ou quand l'écran change.

    Je viens juste de vérifier cette théorie dans l'épisode de Castle ce soir, quand une popup de site s'est ouverte!

    • Certains ordinateurs ralentissent l'affichage pour que l'on puisse lire en même temps. Les meilleurs imitent le bruit des imprimantes à pointe au fur et à mesure que le texte s'affiche.
    • Les serveurs reposent sur une batterie de générateurs tenant dans une salle. Quand ça plante, des éclairs et des explosions surviennent.
    • Les personnes utilisant leur ordinateur l'éteignent sans sauvegarder.
    • Si le programmeur reste pendant plus de 60% du film / de la série alors il finit avec l'héroïne.
    • Un hacker peut attaquer l'ordinateur le plus puissant du monde avant le compte à rebours de verrouillage et en devinant le mot de passe toujours en deux coups.
    • Tous les ACCÈS REFUSÉ ont une fonction SURCHARGE ou DÉTOURNEMENT.
    • Les ordinateurs sont utilisés dans les films uniquement pour accéder à des données (fichiers, site web ou mails) ou arrêter un système ou une bombe.
    • Les calculs scientifiques ou statistiques les plus difficiles prennent juste quelques secondes et les modems transmettent 20Go par seconde!
    • Quand la centrale, le silo,... surchauffe, tous les écrans de contrôle explosent!
    • Quand une machine est complexe, elle à un nombre incroyable de boutons. Mais il suffit d'être assez entraîné pour les manipuler car ils ne sont pas... étiquetés!
    • Quand un acteur regarde un écran, l'image est tellement forte qu'elle apparaît sur le visage.
    • Toutes les consoles commencent par un prompt DOS (>).
    • Les organisations les plus complexes ont très rarement un site de repli.
    • Les ordinateurs ne plantent jamais pendant les phases de stress où le temps est compté, et les opérateurs ne font jamais d'erreurs même sous pression!

    Boris dans Goldeneye aime travailler sous pression, sauf celle de la barre espace!
    • Tous les support média sont lisibles partout aussi exotiques qu'ils soient.
    • A chaque recherche sur un ordinateur il vous répondra par un pourcentage, notamment pile le temps qu'il mettra pour trouver cette information.
    • Quand une recherche est effectuée, tous les résultats s'affichent jusqu'à la découverte d'un résultat.
    • Supprimer des données prend autant de temps que d'attendre les méchants défoncer la porte.
    • Toutes les technologies sont plug'n'play et il n'y a pas besoin de pilotes pour installer des nouveaux périphériques.
    • Quand vous affichez un fichier et que quelqu'un le "supprime", le fichier disparaît aussitôt et il est impossible de le récupérer.
    • Tous les ordinateurs, peut importe leur taille, ont des capacités graphiques 3D impressionnantes!

    Cela pourrait expliquer le eeePC pouvant faire tourner un MMORPG!

    • Si on coupe un programme pendant qu'il transfert de l'argent, seule une certaine portion d'argent est transférée.
    • Tous les programmes sont parfaitement ergonomiques et ne ralentissent pas.
    • Les ordinateurs sont tellement puissants qu'il sont capables de trouver des détails dans une photo sans perte.

    Source : http://www.pcsandthings.com/fun.htm

    Mise à jour du 31/08/2010, ajout de Morgue :
    • Jack Bauer a toujours besoin qu'on lui ouvre un socket (vive la sécurité)
    • Les experts s'envoient des photos instantanément et pendant la communication sur les portables
    • Dans Ennemi d'état, ils arrivent à inverser les algorithmes
    • Dans NCIS, ils arrivent toujours à avoir une image nette d'un visage se reflétant dans une carrosserie de voiture le tout pris par une caméra de surveillance
    • Pourquoi les autres agences de "flics" américaines ont besoin de systématiquement hacker le FBI ou le Pentagone (au lieu de demander gentiment !)?

    Et vous, qu'avez vous trouvé?

    + Source des images

    ]]>
    https://blog.goufastyle.org/article/2010/08/16/l-informatique-et-le-cinema Mon, 16 Aug 2010 19:18:55 +0200