Archives pour la catégorie Non classé

Créer une image avec un algorithme

L’art est partout, même dans les maths :)

Vous vous demandez des fois comment on peut créer des images avec des algorithmes ? Voyons comment c’est possible avec un exemple :

myImage

Pour dessiner cet astre orbitant autour d’une étoile, on explique « simplement » en plusieurs étapes à l’ordinateur comment dessiner :

  • un carré noir (le fond),
  • une zone jaune de moins en moins dense (l’étoile proche),
  • des points orangés dispersés aléatoirement (les étoiles lointaines),
  • une boule avec un effet d’ombre (l’astre).

Un algorithme, c’est une succession d’instructions que l’on donne à l’ordinateur. Il existe plusieurs langages algorithmiques en informatiques : nous allons aujourd’hui nous servir de JavaScript.

Le fond noir

Le fond noir, c’est juste un rectangle. En JavaScript, quand on créé une image simple de dimension (l, L), on stocke un rectangle noir de largeur l et de longueur L. L’unité de longueur étant simplement le pixel.

Du coup, quand on écrit :

var output = new SimpleImage(320, 320);

On obtient :

myImage(1)

L’étoile proche

Pour l’étoile proche, on tire simplement une droite un peu en diagonale. En partant du bord en bas à gauche, on colore le premier pixel en jaune. On colore ensuite tous les autres jusqu’à la droite en diagonale en demandant à l’ordi d’utiliser un jaune de plus en plus sombre (jusqu’au noir). En JavaScript :

for(var pixel of output.values()){
    pixel.setRed  (1.5*pixel.getY()-pixel.getX());
    pixel.setGreen(1.5*pixel.getY()-pixel.getX());
}

Littéralement, on regarde chaque pixel et lui assigne une valeur jaune dont la coloration va dépendre de sa position sur l’image. Plus le pixel sera en bas et plus le jaune sera vif, plus il sera en haut et plus il sera sombre. De même, plus il sera sur la droite et plus il sera sombre.

Pixel.setRed et setGreen sont des fonctions permettant de choisir les couleurs. Pour faire court, la couleur de chaque pixel est créé à partir d’une combinaison de rouge (Red), vert (Green) et bleu (Blue) dont l’intensité varie de 0 à 255. Un pixel noir aura des valeurs rouge, vert, bleu (R,G,B) de 0,0,0 et un blanc 255,255,255. Le jaune choisi en bas à droite est (255,255,0).

Pour comprendre la petite formule, il faut juste savoir que l’image est représenté par un plan de coordonnées (X,Y) et que le point d’origine (0,0) est le point en haut à gauche.

Donc quand j’écris :

pixel.setRed  (1.5*pixel.getY()-pixel.getX());

je demande d’établir la coloration rouge du pixel à la valeur (1.5*pixel.getY()-pixel.getX()). Pour le point de coordonnées (10, 50), sa valeur Red sera de 1,5*50 – 10 = 65.

Et donc sa valeur (R,G,B) après exécution du code  : (65, 65, 0)

En image :

myImage(4)

Les étoiles lointaines

Pour les étoiles, on va dire à l’ordinateur de mettre des pixels oranges un peu partout. Comment ? C’est simple : on va regarder chaque pixel, un à un, et va tirer un nombre au hasard entre 0 et 1. On va ensuite dire à l’ordi de le colorer en orange si ce nombre est supérieur à 0,995 par exemple. Si on veut plus d’étoile on diminue ce seuil, si on en veut moins on le rapproche de 1. En langage JavaScript ça donne ça :

for(var pixel of output.values()){
 if (Math.random() > 0.995){
        pixel.setRed(255);
        pixel.setGreen(140);
    }
}

Après exécution du code :

myImage(2)En exécutant tout le code depuis le début :

myImage(3)L’astre

Avant d’être une boule, notre astre est un cercle. Un cercle en maths, ce sont les points situés à égale distance d’un point. On va donc choisir un point (ses coordonnées) et colorier en jaune tous les points dans un certain périmètre voulu. Si on prend le point de coordonnées (150,150) et qu’on veut un rayon de 50 (pixels), on écrit :

for(var pixel of output.values()){
    if (dist(pixel, 150, 150)<50){
        pixel.setRed(255);
        pixel.setGreen(255);
    }
}

Après exécution du code :

myImage(5)

Pour faire l’effet d’ombre :

for(var pixel of output.values()){
    if (dist(pixel, 150, 150)<50){
        pixel.setRed(255-4*dist(pixel,100,100));
        pixel.setGreen(255-4*dist(pixel,100,100));
    }
}

C’est le même code sauf que la coloration rouge et verte change. Elle n’est plus simplement 255 mais 255-4*dist(pixel,100,100) avec la fonction dist définie comme suit :

function dist(pixel, x, y){
    var dx=pixel.getX() - x;
    var dy=pixel.getY() - y;
    return Math.sqrt(dx*dx+dy*dy);
}

En français ça veut dire que je pars du point de coordonnées (100,100) sur le cercle et je trace un cercle (encore!) de moins en moins coloré :

En image (sur fond blanc pour y voir mieux) :

myImage(6)

L’image complète

On a plus qu’à mettre ensemble les bouts de codes :

function dist(pixel, x, y){
    var dx=pixel.getX() - x;
    var dy=pixel.getY() - y;
    return Math.sqrt(dx*dx+dy*dy);
}
// start with a blank image
var output = new SimpleImage(320, 320);

for(var pixel of output.values()){
    pixel.setRed  (1.5*pixel.getY()-pixel.getX());
    pixel.setGreen(1.5*pixel.getY()-pixel.getX());
    if (Math.random() > 0.995){
        pixel.setRed(255);
        pixel.setGreen(140);
    }
    if (dist(pixel, 150, 150)<50){
        pixel.setRed(255-4*dist(pixel,100,100));
        pixel.setGreen(255-4*dist(pixel,100,100));
    }
}

Et on retrouve l’image initiale !

myImage(7)

La Commission Européenne

Après avoir présenté le Parlement Européen et le Conseil de l’Union européenne, quoi de plus naturel que de parler de la Commission européenne ?

On l’a vu, le Parlement est une assemblée élue par les citoyens de l’Union Européenne qu’elle représente. Le Conseil est formé par les différents ministres des pays membres et représente donc leur gouvernement. Et la Commission ? elle représente l’intérêt général de l’Union Européenne :

ConseilParlementCommission

Depuis que la Croatie fait partie de l’UE, la Commission est composée de vingt-huit commissaires européens, soit un par État membre. Elle siège à Bruxelles. Son président est élu par le Parlement européen.

Initiatve législative et pouvoir exécutif

Le rôle de la Commission, c’est de promouvoir l’intérêt général de l’UE. Pour cela elle est la seule institution a faire des propositions de lois (elle est la seule à avoir l’initiative législative au niveau de l’Union). Ces lois sont ensuite revues par les autres institutions (Parlement et Conseil) avant d’être adoptées. La commission est également chargée de mettre en œuvre les décisions de ces deux institutions, c’est ce qu’il lui confère le statut d’organe exécutif de l’UE.

Élaboration et exécution du budget

C’est la commission qui, chaque année, définit comment l’argent sera dépensé en faisant une proposition de budget ensuite débattue/modifiée/votée par le Parlement et le Conseil : ce sont donc eux qui ont le pouvoir budgétaire. Une fois que tout le monde est d’accord et que le budget est adopté, c’est la commission qui le gère et qui assure le paiement et le contrôle des dépenses.

Gardienne des traités

Sous le contrôle de la Cour de justice de l’Union Européenne (CJUE), la Commission européenne veille à ce que les traités et les décisions prises soient appliqués correctement. Les traités, ce sont le fondement de l’UE (un peu comme une constitution sauf que l’UE n’en a pas…)  En cas de mauvaise application du droit communautaire par un État membre, la Commission européenne saisit la Cour de justice de l’Union Européenne (qui peut prononcer des sanctions).

La Commission contrôle particulièrement le respect des règles de concurrence et l’attribution des subventions publiques. Elle peut pour cela infliger des amendes.

Représentation

A part en ce qui concerne la politique étrangère et la sécurité (sujets sensibles laissés aux mains des gouvernements nationaux), la Commission a aussi un rôle de représentante de l’Union Européenne vis à vis du reste du monde (prise de décision relatives à la politique commerciale par exemple).

Sources

  • http://europa.eu/about-eu/institutions-bodies/european-commission/index_fr.htm
  • http://ec.europa.eu/index_fr.htm
  • http://www.francetvinfo.fr/elections/europeennes/video-commission-parlement-conseils-quels-sont-les-roles-des-institutions-europeennes_605909.html
  • http://www.vie-publique.fr/decouverte-institutions/union-europeenne/fonctionnement/institutions/qu-est-ce-que-commission-europeenne.html
  • http://www.vie-publique.fr/decouverte-institutions/union-europeenne/fonctionnement/institutions/ou-situent-differentes-institutions-europeennes.html
  • http://www.vie-publique.fr/decouverte-institutions/union-europeenne/fonctionnement/institutions/existe-t-il-constitution-europeenne.html
  • http://www.touteleurope.eu/l-union-europeenne/commission-europeenne/synthese/le-role-de-la-commission-europeenne.html

Qu’est ce que je peux/dois visiter ?

guidance

Il m’arrive souvent de tomber par hasard sur de magnifiques lieux et ça me fait réfléchir : comment ça se fait que je ne connais pas ce lieu ? qu’est ce que j’aurais du faire pour le connaitre ? De même lorsque je visite une ville ? qu’est ce que je dois aller voir d’abord ? comment ne pas se faire avoir pas tout ces attrapes touristes ? comment tomber sur des lieux mal référencés car personne n’a d’intérêt financier à ce que vous le visiter ? je veux me promener pas loin de chez moi qu’est ce que je peux voir d’intéressant ?

Voici quelques sources qui peuvent aider :

sightsmap (source panoramio) : qui montre la densité des photos prises sur une carte : les lieux qu’on prend beaucoup en photo sont souvent les plus jolis. Mais il faudrait pondérer sur le nombre habitant car toutes les grosses villes ressortent beaucoup dans cette carte.

tripadvisor : le site le plus connu pour trouver des lieux à visiter, mais il souffre de quelques problèmes : les classements ne sont pas les plus pertinents, les lieux qui font du chiffres ressortent beaucoup mieux que l’incroyable petit coin de nature où il n’y a rien à vendre…

la liste du patrimoine mondial de l’unesco :  intéressant mais il faut que site fasse la demande pour être sur cette liste et certains le sont plus grâce à la motivation de ceux qui ont posé le dossier qu’à un réel intérêt du lieux…

les plus beaux villages de france : c’est mignon mais il n’y a que la France

la liste des immeubles classés monuments historiques : même problème que pour la liste de l’unesco et il n’y a que la France

– google image : simplement en tapant le nom du lieu et en regardant les premières photos qui sortent on peut se faire une idée des trucs à voir

monnuage : propose pour une destination la liste des choses à voir avec photos et descriptions détaillée. Surement le site le plus abouti mais il manque beaucoup de lieux.

– les guides papiers : routards ou autres : on en trouve de très bonne qualité mais c’est désuet face au web et leurs sites internet n’est souvent pas à la hauteur.

– le bouche à oreille, les contacts locaux : très riche mais trop subjectif et trop difficile d’accès

– les offices de tourisme : très riche assez objectif mais difficile d’accès et il n’y a pas ça dans tous les pays…

– google + tous les sites/blog de voyage qui proposent des classements des destinations à voir selon les critères tapés : peut être la solution la plus utilisée mais finalement très hasardeuse.

 

Et vous vous faites comment ?

Football : Regarder les résumés des matchs en replay sans connaitre le résultat !

ligue1 premiereleague liga calcio  bundesliga

Je n’ai pas regardé les matchs de la veille et je vais pouvoir regarder les résumés ce matin avec un peu de suspense !
Beaucoup attende de voir les émissions comme « l’équipe du dimanche », « l’après ligue des champions », etc. mais cela demande d’être assidu et on nous oblige à écouter des commentaires, analyses, interviews, résumés pas forcément intéressants avec des publicités aux milieux. Et pour visionner tous les matchs qui nous intéressent avec les problèmes de répartitions des droits TV, on est obligé de regarder plusieurs émissions à heures fixes et on doit regarder toute l’émission même s’il n’y a qu’un match qui nous intéresse.

Plusieurs sites proposes des résumés de match de football en ligne :

Bein_sport_logo   canalplus   logo-lequipe

  • canalplus.fr : première ligue, euro, copa africa
  • beinsport.fr :  calcio, liga, bundesliga, copa america, matchs amicaux
  • lequipe.fr : ligue 1, matchs amicaux
  • tf1 : match équipe de france

Mais tous nous affichent le score en gros avant qu’on ait visionné la vidéo. Résultat : lors du visionnage on attend de voir les buts au lieu de se laisser surprendre !

Ça parait bien difficile d’aller régulièrement sur chacun des sites en essayant de se masquer les scores pour visionner les vidéos dans ces conditions. Voici une solution : habiTv :).  Ce logiciel permet de télécharger automatiquement les vidéos de certains plateformes de replay dont bien sûr celles citées au dessus.

Ce logiciel nécessite java pour fonctionner (https://java.com/fr/download/), télécharger le fichier exécutable habitv et lancer le.

habitv - loading

Le premier chargement est un peu long habiTv doit télécharger plusieurs dépendances.

Une fois l’écran principal ouvert, cliquer sur l’onglet configuration et choisissez le répertoire de destination des vidéos.

Cliquez ensuite sur l’onglet « A télécharger », vous devriez voir l’arbre avec tous les fournisseurs de contenu et en les dépliant voir les émissions (catégorie de vidéos) qu’il propose.  Si ce n’est pas le cas cliquer sur le bouton « Rafraichir ».

habitv - a telecharger

Vous retrouvez donc canalFootballClub, beinsport, lequipe et wat (tf1).
Parcourez l’arbre jusqu’à tomber sur les listes de vidéos qui vous intéressent et cocher les pour lancer le téléchargement automatique.

Une fois la case d’une catégorie cochée, toutes les nouvelles vidéos de cette catégorie seront automatiquement téléchargées.

Comme certains fournisseurs ne catégorisent pas suffisamment leur contenu on a la possibilité de filtrer sur le nom de la vidéo en utilisant le champs de saisi « filtrer les épisodes » en bas et en définissant des inclusions (ex : je télécharge seulement les vidéos avec les mots clés « Barcelone » ou « Madrid ») ou des exclusions (ex : je télécharge tout sauf les vidéos avec les mots clés « Interview »). Penser ensuite à cliquer sur ajouter pour sauvegarder vos filtres et cliquer sur un filtre sauvegardé pour le supprimer. On peut ainsi finement définir les vidéos à télécharger.

Et voilà, plus qu’à attendre que les vidéos se téléchargent. Vous pouvez aussi par un clique droit sur la liste de vidéo télécharger manuellement des vidéos qui vous intéressent.
Vous remarquerez que les scores sont effectivement masqués des noms de fichier.

Attention à certains fournisseurs comme lequipe.fr ou canalplus.fr qui annoncent le résultat du match d’entrée. Il faut alors penser à passer les premières secondes de la vidéo. Pour cela il est plus pratique de repérer la touche raccourcis (alt + flèche -> pour VLC) pour sauter quelques secondes dans la vidéo.

Selon les fournisseurs on peut avoir les résumés plus ou moins rapidement après la fin du match, le problème avec lequipe.fr c’est qu’on a les résumés de ligue 1 à minuit après le dernier match de la journée. Il faut donc rester 1 ou 2 jours sans se faire spoiler c’est compliqué…

bon foot !

TEDx Mines Nancy : Au delà du Possible

J’ai eu la chance de participer à l’évènement TEDx Mines Nancy 2015 (merci Arnaud!) sur le thème « Au delà du possible. » Avant de vous parler des conférences passionnantes auxquelles j’ai assisté, une petite explication du concept TED :

TED, Ideas Worth Spreading

tedLes conférences TED (Technology, Entertainment and Design) donnent la paroles à des personnes de tous les horizons pour parler de sujets très variés. Le point commun : la façon de faire. Les « talks » sont courts (15 min environ) et la présentation reste la même avec un (voire deux) « speaker » qui parle d’un sujet qu’il maitrise à la perfection et qui vaut la peine d’être partagé (Ideas Worth Spreading).

Le x de TEDx Nancy, c’est pour dire que c’est un évènement indépendant organisé selon le modèle de TED (qui distribue des licences) : ça nous permet notamment d’avoir des discours en français :)

AU DELÀ DU POSSIBLE

L’association TEDx Mines Nancy, de la fameuse école des Mines de Nancy, a organisé avec brio (aucune blague avec le président de l’association L.Briot^^) la mise en scène de pas moins de 10 conférences passionnantes ! Onze personnalités sont venus nous faire partager leur histoire, leurs idées et leur volonté de dépasser les limites du possible :

Quand la médecine rencontre la technologie

latremouilleChristian Latremouille est chirurgien cardiovasculaire. Il fait partie de l’équipe qui a réalisé l’exploit de greffer un coeur artificiel définitif chez un patient ! Deux choses m’ont principalement marqué en écoutant Pr. Latremouille : la technologie nécessaire pour concrétiser un tel projet. l’idée est simple, remplacer une pompe, mais les contraintes de la médecine font que l’erreur n’est pas permise. Alors Médecins et Ingénieurs travaillent de paire pour réaliser la machine qui viendra remplacer un coeur. Et puis la personnalité du Professeur Latremouille qui maitrise à la perfection son sujet et s’exprime sans aucun mal devant le public venu nombreux. Il nous parle de son travail, des choses incroyables qu’il a déjà accomplies et des projets qui continuent. Pourtant, c’est toujours ses collègues, les ingénieurs, l’administration… que le Professeur met en avant en reconnaissant le travail des autres  :)

Pilo : la pile auto rechargeable

piloQuoi de plus frustrant que de ne pas pouvoir lire ses e-mails en randonnées alors qu’on a du réseau ? Même si certaines batteries durent aujourd’hui plusieurs heures, il faut bien les brancher à une prise secteur à un moment ou à un autre… Mais ça c’était avant ! Avant Nicolas Toper et son invention : la pile qui se recharge toute seule.

Pilo, c’est le nom de cette pile que Nicolas nous a apportée sur scène. Sa particularité ? Un simple mouvement la recharge ! L’énergie récupérée du secouement est suffisante pour espérer fabriquer des télécommandes sans piles par exemple, ou d’utiliser le mécanisme sur des objets déjà en mouvement (ex : vélo). Génial !

SensorWake : le réveil olfactif !

sensorwakeVous réveiller avec l’odeur du café ? C’est possible ! Et plus besoin de demander à votre conjoint de se lever avant vous^^ Guillaume Roland, à seulement 18 ans, en est l’inventeur ! Ce jeune bricoleur de génie nous expose son attrait pour le bricolage technique depuis son plus jeune âge. A 13 ans il invente une machine capable de d’optimiser l’infusion du thé. A 18 ans, son invention d’un réveil qui émet des odeurs plutôt que des sons lui offre la victoire au concours Google Science Fair organisé par la firme californienne. Le principe de l’objet est simple : un réveil normal dans lequel on met une capsule (biodégradable). On choisit l’odeur du réveil et le parfum du dollar est même proposée pour les business men !

Un voyage hors du commun

CorentinCorentin de Chatelperron nous raconte un voyage unique mais qui peut profiter à tous. Cet aventurier s’est embarqué dans un bateau en y instaurant son propre écosystème : il pouvait y cultiver de quoi se nourrir (pommes-de-terre, poules !…) et était donc autosuffisant. En théorie. En pratique tout n’a pas été aussi facile que prévu… mais c’est là tout le mérite de ce marin peu ordinaire : Correntin a su analyser son périple pour proposer des solutions et s’embarquer dans de nouveaux projets. Le prochain : un catamaran qui va commencer un tour de la terre pour se charger à chaque arrêt d’une nouvelle idée venant améliorer son autonomie ! Non seulement le projet est brillant à une époque où les problématiques écologiques sont d’actualités, mais la manière est aussi admirable puisque c’est grâce à un gigantesque échange d’idées que les choses se font :)

Une volonté plus forte que tout

elina dumontElina Dumont nous livre un témoignage poignant, celui de sa vie. Elle nous raconte les difficultés qu’elle a eu a surmonter durant son enfance, sa jeunesse. Son message contraste avec celui de Guillaume : à 18 ans, le jeune génie est invité en Californie par Google, à 18 ans Elina était remise à la rue par les services sociaux… Pourtant, elle est là aujourd’hui, au TEDxMinesNancy : elle partage avec nous son histoire qui nous donne plein d’espoir. A croire qu’il n’existe pas d’obstacle infranchissable et que la volonté de s’en sortir peut vous mener n’importe où. Une belle leçon de vie

Témoignage d’un Antiterroriste

EsquiviéJean-Louis Esquivié est un officier Général de Brigade de la gendarmerie. Il a travaillé dans la cellule antiterroriste de l’Elysée et nous livre son expérience et son point de vue sur l’actualité. Le terrorisme est une menace et le Général nous parle de la violence, trop présente. Les dessins de l’un de ses fils viennent illustrer les paroles de l’Expert qui évoque également le parcours d’un autre de ses enfants, militaire lui aussi et qui est parti en Afghanistan. Un témoignage d’une grande richesse.

Rugby, Psychology, Philosophie

Raphael PoulainDans un discours captivant, le champion de Rugby Raphaël Poulain nous raconte son parcours. Aujourd’hui Raphaël n’est plus sur le terrain et nous parle de la difficulté de la transition : entre la lumière des caméras dans les stades et l’après. Ce qui marque en écoutant Raphaël c’est son honnêteté : il se livre au public. Il nous dit tout. Les questions qu’il s’est posé, il se les pose avec nous et ses réponses il les partage avec nous.

Beaucoup de psychologues s’interrogent sur le sport et la force mentale des sportifs. Avec Raphaël, c’est du côté du sport qu’on se pose des questions en psychologie, en philosophie même. Et ce qui fait que c’est beaucoup plus fun d’aborder ses sujets avec lui, c’est son vécu. Merci pour ton expérience !

Au delà du possible : pourquoi ? Tout est possible !

AssoumaniArnaud Assoumani est un homme hors du commun. Sportif de haut niveau, ce médaillé Olympique nous montre qu’avec un mental à toute épreuve et de la créativité, nos « limites » se transforment en obstacles à franchir. Parfois il faut savoir sauter haut… ou loin !

Arnaud est athlète et son domaine, vous l’aurez compris, c’est le saut en longueur. Il évoque avec nous comment il est arrivé où il est, comment il s’est entrainé. Depuis sa naissance, une malformation le prive d’avant-bras gauche : un état qui aurait pour beaucoup été synonyme d’une croix sur le sport… Mais pour ce sportif de mérite, ça a été une raison de redoubler d’efforts et d’accomplir tout ce qu’il a accompli (dont un saut de 7,82 mètres !!!). Sa créativité a même tourné son physique a son avantage avec Golden Arm : une prothèse de bras personnalisée et même artistique.

Bravo Arnaud !

Le pouvoir de la Musique

david WaltersDavid Walters est quelqu’un de doué. D’abord athlète, il est aujourd’hui musicien pour notre plus grand plaisir ! Sur la scène de TEDx, il ne joue pas (ou un peu de beatbox :) ) mais nous explique le pouvoir de la Musique. Cet outil de communication est un moyen d’union et David nous le montre grâce à ce qu’il a rapporté de ses nombreux voyages. Parmi ceux-ci : l’Afrique du Sud où il se rend compte que la Musique est un excellent moyen de manifester, de se faire entendre de façon dynamique et pacifique. Mais la musique c’est beaucoup plus ! C’est encore, dans l’armée (ce musicien hors pair a intégrer l’armée coréenne !) un moyen de maintenir le moral des troupes. Et puis c’est un très bon divertissement. Merci David !

Mars : et ça repart

MarsLucie Poulet et Florence Porcel nous l’ont démontré : la probabilité pour qu’elles soient là toutes les deux sur cette scène pour nous raconter leur parcours étaient extrêmement faible. Mais elle existait bien et les voilà aujourd’hui réunies pour ce talk. Lucie est une passionnée d’Espace depuis toujours, Florence une journaliste scientifique. Elles se sont rencontrées dans l’Etat de l’Utah aux Etats-Unis où a été organisée une simulation de mission sur Mars. La probabilité que ces deux filles prodiges de la science aillent un jour pour de vrai dans l’Espace ? Faible. Mais pas nulle :)

Bon courage et bonne chance à toutes les deux !

La solution du Rubik’s Cube 3×3 :)

Le Rubik’s cube est un casse tête inventé par Monsieur… Rubik^^ Il en existe plusieurs versions : 2×2, 3×3, 4×4… dépendant du nombre de carrés composant chaque face du cube.

Voyons comment résoudre le 3×3 : on utilise des algorithmes (i.e. des suites d’opérations) pour franchir différentes étapes, jusqu’à la dernière !

Ces étapes et algorithmes sont expliqués dans la vidéo (15 min, sans coupures) qui suit et résumés dans l’illustration ci-après. Bonne chance 😉

Solution rubik cube 001 Les algorithmes utilisés sont :

(lettres : Right, Left, Front, Bottom et Top pour les faces Droite, Gauche, Face, Bas, Haut – MAJ dans le sens des aiguilles du montre, min dans le sens inverse)

RTrTRTTrT pour synchroniser les couleurs des arrêtes de la face blanche avec le centre des autres faces

rBRb pour trouver les angles de la face blanche

TLTLTltltl pour remplir l’arrête gauche de la deuxième ligne avec le cube en haut au fond (au milieu)

trtrtRTRTR pour remplir l’arrête droite de la deuxième ligne avec le cube en haut au fond (au milieu)

rtfTFR pour faire la croix de la face jaune

RTrTRTTr pour synchroniser les couleurs des arrêtes de la face jaune avec le centre des autres faces (c’est d’ailleurs presque le même algorithme que pour la face blanche^^)

TRtlTrtL pour trouver les angles de la face jaune (même s’ils sont mal orientés) en commençant par un bon en haut à droite.

rttRTrTR LttltLtl pour orienter ces angles, et donc terminer :)

Les migrations techniques

Suite au changement d’hébergeur du site familial e-mendibil, j’ai dû réaliser une migration technique qui m’a été très coûteuse et c’est très frustrant car l’utilisateur final ne voit pas le résultat, pire tout ce qu’il peut constater suite à cette migration ce sont les régressions engendrées !migrationOiseau

Mais si ça n’apporte rien à part des bugs pourquoi je me suis infligé ça ?

Une migration d’un logiciel c’est le changement d’une technologie utilisée par ce logiciel. Ça peut être pour remplacer une technologie par une autre ou simplement mettre à jour une technologie existante.

Il y a différents objectifs pour une migration :

  • avoir de nouvelles fonctionnalités
  • corriger des bugs
  • améliorer les performances
  • faire marcher un logiciel avec une nouvelle technologie ou sur une nouvelle plateforme qui imposerait l’utilisation d’une certaine techno.

migrationPoisson

Pour reprendre l’exemple de la migration de e-mendibil, je vais expliquer rapidement les briques techniques avec lesquelles il était construit avant la migration.

E-Mendibil se base sur un logicel de gestion de contenu (Content Management System) appelé Drupal en version 5.5. Drupal 5.5 a besoin pour fonctionner que la plateforme PHP soit installée en version 4.2 avec une base de données MySQL.

drupal                                      mysqlphp

Ces prérequis étaient validés par le précédent hébergeur mais par soucis d’économie, nous avons décidés de changer d’hébergeur. Ce dernier fournit des serveurs plus à jour avec PHP en version 5.4.

Super ! une nouvelle version de PHP plus stable, plus de fonctionnalités, plus rapide… (harder, better, faster, stronger…) oui mais non car cette nouvelle version de PHP n’est pas rétrocompatible vis à vis de la version 4.4. C’est à dire que ce qu’ils l’ont développé ne se sont pas préoccupés que certains applications codées avec une version de PHP inférieur à 4.4  ne fonctionnerait probablement plus… Ce qui est le cas de Drupal 5.5 donc e-mendibil ne fonctionnait pas bien sur la nouvelle plateforme.

C’est un problème récurrent en informatique lors de la gestion des dépendances, les logiciels/systèmes dont dépendent d’autres systèmes sont amenés à évoluer forçant les logiciels dépendants dit « clients » à évoluer.

carte

Voici un exemple simple qui illustre bien le problème de rétro-compatibilité.

Imaginez que vous souhaitez afficher une carte sur votre site internet pour montrer votre localisation. Vous n’avez pas envie de dessiner vous-même la carte donc vous décidez de faire appel à un fournisseur de carte externe comme GoogleMaps ou ViaMichelin et vous choisissez le fameux Carto3000. Vous ajoutez sur votre site le composant « afficherCarteDUneAdresse » qui a partir d’une adresse française vous affiche la carte et c’est gagné.

Le changement c’est maintenant…

Carto3000 décide de s’ouvrir à l’international et donc d’afficher des cartes du monde entier. Le problème c’est que le composant « afficherCarteDUneAdresse » ne gère que la France et qu’en tapant « Barcelone » il affiche « Barcelone du Gers » (vous pensiez sûrement à cette ville là) !panneau-barcelonne-du-gers

Carto3000 doit donc faire évoluer son composant pour qu’on puisse préciser le pays mais que faire de tout ceux qui utilisent déjà le composant sans préciser le pays ?

Plusieurs solutions :

  • si le client ne précise pas de pays : on affiche un message d’erreur lui demandant de le faire
  • on détermine automatiquement le pays en récupérant les données de géo-localisation du visiteur
  • on laisse le composant « afficherCarteDUneAdresse » intacte (il n’affichera que les adresses françaises) et on crée un autre composant « afficherCarteDUneAdresseInternationale » capable d’afficher des adresses de n’importe quel pays

La solution 1 casse la rétro-compatibilité : tous les utilisateurs du composant « afficherCarteDUneAdresse » vont devoir modifier leur site pour préciser le pays sinon ils auront ce message d’erreur.

La solution 2 est très dangereuse car on a l’impression que la rétro-compatibilité est maintenue mais ce n’est pas vraiment le cas et le composant ne se comporte plus vraiment comme avant : les visiteurs espagnols d’un site à Barcelone du Gers verront la carte à Barcelone en Espagne…
Cette solution n’est pas acceptable car elle change le comportement du service rendu.

La solution 3 préserve la rétro-compatibilité tout en permettant aux nouveaux utilisateurs de préciser le pays. On va dire que le composant « afficherCarteDUneAdresse » est déprécié et qu’il est maintenant préférable d’utiliser « afficherCarteDUneAdresseInternationale ».

La solution 3 semble donc la solution idéale mais ce n’est pas le choix que va faire Carto3000, pourquoi ?

argentCar c’est la plus onéreuse ! Carto3000 va maintenant devoir maintenir 2 composants au lieu d’un. S’ils doivent corriger un bug ou ajouter une nouvelle fonctionnalité ils vont devoir le faire sur les 2 composants ça double quasiment la charge de travail !

Et en plus Carto3000 propose d’autres composant du même style : « afficherCarteSatelliteDUneAdresse », « afficherCarteReliefDUneAdresse », … La solution 3 les pousserait à dupliquer chaque composant !

Carto3000 n’a pas le budget de Google et choisit donc la solution 1 et va afficher un message d’erreur si on ne précise pas le pays. Et Carto3000 envoie donc un email à tous ses utilisateurs pour les prévenir qu’ils doivent préciser le pays sur le composant « afficherCarteDUneAdresse ».

Carto3000 fait des économies mais tous les utilisateurs vont avoir eux des frais supplémentaires pour mettre à jour leur site et préciser le pays.

Le choix de Carto3000 n’est pas isolé, on peut trouver beaucoup d’exemple de non rétro-compatibilité et pas que dans le monde logiciel :

  • apple change ses chargeurs
  • la SNCF commande des rames trop larges
  • vous achetez un livre trop grand pour rentrer dans votre bibliothèque

bibliotheque

Le dernier exemple est bête (les précédents sont pas mal non plus…) mais impose de changer de bibliothèque si vous tenez absolument à ranger tous vos livres en un seul endroit !

Pour revenir à e-Mendibil, qui donc ne fonctionnait plus sur le nouvel hébergeur, voici les solutions qui s’offrait à moi :

  • revenir sur l’ancien hébergeur
  • bricoler/modifier (« hacker ») ma version actuelle de Drupal pour que au minimum les fonctionnalités qui m’intéresse fonctionne sur le nouvel hébergeur
  • migrer de la version 5.5 à la version 6 compatible avec le nouvel hébergeur

La solution 1 était peut être la moins couteuse mais l’ancien hébergeur allait probablement se comporter un jour comme le nouveau. Ça ne ferait donc que reporter le problème.

J’ai étudié la solution 2 mais elle s’avère très dangereuse car quand on commence à « hacker » un logiciel beaucoup de problèmes peuvent ensuite survenir.

Il ne restait donc que la solution 3, très couteuse mais plus pérenne.

Très couteuse car dans mon cas Drupal n’est pas en bout de la chaine des dépendances ! Une vingtaine d’extensions/modules installées par dessus Drupal vont devoir être migrer également. Et chaque migration de module est spécifique :

  • quelques modules ont été migrés sans problème
  • sur certains modules la configuration faite pour e-mendibil n’était plus permises, il a fallu l’adapter ou la refaire
  • certains modules n’existe plus sur la nouvelle version de Drupal, il a fallu trouver des modules équivalents et refaire la configuration ou abandonner la fonctionnalité
  • certains modules demandait une migration du format des données dans la base, cette migration se faisait plus ou moins automatiquement…
  • certains modules sont buggés sur la nouvelle version…

Au final le site d’e-Mendibil n’a pas vraiment gagner sur cette migration puisque certaines fonctionnalités ont été abandonnées.

LogoDependance_05Comment éviter ce genre de problème de dépendance ?

La réponse est simple mais difficile à appliquer : il faut maitriser ses dépendances.

Comment maitriser ses dépendances ?

Ce n’est pas facile mais voici quelques pistes :

  • ne pas en avoir et tout faire soi-même :)
  • utiliser des dépendances qui ont de la « bouteille », qui existe depuis suffisamment longtemps et sont suffisamment utilisés pour avoir un bon niveau d’expérience et être assez stable.
  • A l’inverse, éviter les produits « hype » ou trop jeune qui suivent un effet de mode et ne sont pas pensés pour durer et peuvent souffrir de problème de conception qui les amèneront à modifier fortement leurs produits.
  • passer par des standards, si les dépendances s’attachent à être compatible avec un standard : elle ne peuvent pas changer du jour au lendemain et au pire vous pourrez basculer sur une autre dépendance qui est compatible avec ce standard.
  • si on est sur un produit qui évolue régulièrement, il est préférable de migrer régulièrement à chaque changement majeur plutôt qu’attendre et de se retrouver face à un mur quand on sera obligé de tout migrer d’un coup.