Dans cette vidéo, vous allez apprendre à réaliser un petit spectroscope avec trois fois rien : un CD, un tube de PVC, de la colle et du carton. Mac Gyver lui-même n'aurait pas fait autrement :)
Télécharger la vidéo : mp4, ogg.
À retrouver ici sur YouTube
Pour une fois, les explications théoriques restent succinctes. Il n'est en effet pas évident d'expliquer simplement le fonctionnement d'un réseau de fentes sans faire appel à de la physique complexe.
La fin de la vidéo vous montre bien sûr le spectroscope en action, même s'il est difficile de prendre en photo les spectres observés au travers. Ainsi, ce que l'on voit en vrai est souvent mieux que les images présentées dans la vidéo.
Depuis quelques temps, je publie des vidéos sur une chaîne YouTube (http://www.youtube.com/tiennotg). Voici la dernière d'entre elles, qui parle d'un phénomène physique un peu curieux : la surfusion.
Dans cette vidéo, j'explique rapidement en quoi consiste le phénomène physique, puis je réalise deux expériences : une première pour déterminer à quel moment du refroidissement de la bouteille se produit la surfusion, et la deuxième pour montrer l'instabilité de l'eau surfondue en précipitant la formation de glace à l'aide d'une perturbation.
Télécharger la vidéo : ogg, mp4.
À retrouver ici sur YouTube
Je ne vais pas détailler plus longtemps le contenu de la vidéo (vous n'avez qu'à la regarder :p), mais je vais en revanche apporter quelques précisions sur le dispositif électronique utilisé pour les mesures au cours de la première expérience.
Pour la mesure de transparence, le fonctionnement est très simple : une photorésistance est placée face à une LED qui l'éclaire. Plus la bouteille contient de glace, plus la luminosité reçue par la photorésistance est faible, d'où une mesure de transparence. Cette dernière est tout simplement montée en série avec une résistance de 30 kOhms (valeur déterminée par essais successifs), de manière à se trouver à environ 4,5 volts pour la mesure maximale. Ceci permet d'exploiter pleinement le convertisseur analogique-numérique qui suit, qui peut supporter des tensions allant jusqu'à 5 volts. La transparence est alors proportionnelle à la tension aux bornes de la résistance de 30 kOhms.
Pour la mesure de température, c'est un LM 35DZ qui est utilisé. Ce capteur peut mesurer des températures allant de -55 °C à +150 °C. Pour l'alimenter, il est nécessaire d'utiliser une alimentation symétrique. Comme je n'en avait pas sous la main, j'ai utilisé une astuce pour la simuler : en utilisant deux résistances de 10 kOhms en diviseur de tension, on peut obtenir une alimentation symétrique -4,5 volts / 4,5 volts à partir d'une non symétrique de 9 volts (voir schéma ci-dessous). Du reste, le fonctionnement du capteur est assez simple ; je vous laisse vous reporter à la documentation du constructeur pour en savoir plus.
Enfin, pour pouvoir enregistrer les données sur l'ordinateur, j'ai choisi d'utiliser une carte Arduino Uno. D'une part, ce type de carte est très simple à programmer, d'où un gain de temps conséquent. D'autre part, elle peut se connecter à un ordinateur via un port USB, tout en émulant sur ce dernier un port série. La carte se commande donc comme à travers une liaison série, mais par un port USB, ce qui permet de s'affranchir du problème de la disparition du port série sur les ordinateurs les plus récents (bien que celui de l'expérience en comporte un). Pour enregistrer les données, j'utilise un script écrit en python, qui est extrêmement simple : il demande à l'Arduino de relever les mesures, et les enregistre dans un fichier avec le temps écoulé depuis le début de l'expérience. Les convertisseurs analogique-numérique de l'Atmega 328 sont largement suffisant pour cette application : ils possèdent une résolution de 10 bits.
Certains d'entre vous le savent, je suis animateur/réalisateur d'un talk show sur la radio étudiante EvryOne - il s'agit de Tech&More, les jeudis soirs. Dans ce cadre, je me suis amusé à créer quelques jingles amusants pour ponctuer un peu mon émission. Je vous les propose donc, sous licence Creative Commons, comme spécifié en pied de page. Amusez-vous bien !
L'arrivée de nouveaux terminaux mobiles s'accompagne de nouvelles résolutions d'affichage, ce qui est d'autant plus perturbant que certains écrans peuvent basculer, comme sur les tablettes. Certes, il est possible de rendre son design adaptatif grâce à des dimensionnements relatifs ou des media queries, mais il peut être parfois intéressant d'optimiser l'espace avec du javascript, ou tout simplement ajouter des effets lors du basculement.
Travaillant actuellement sur une mission de développement web où j'ai à me soucier de ces problématiques, je me suis essayé à la tâche ardue de détecter le basculement et l'orientation du terminal en javascript - en l'occurrence, une tablette. Et la solution n'est pas aussi simple qu'il n'y paraît...
Pour les impatients, le script fonctionnel se trouve à la fin du billet.
window.orientation, c'est pas encore ça...
Pour déclencher une fonction à chaque basculement, il suffit de l'attacher à l'évènement window.onorientationchange. La variable window.orientation nous donne alors l'orientation du terminal par rapport à sa position de référence : 0°, 90°, -90° ou 180°.
/* Ce code ne donne pas le résultat attendu... */
window.onorientationchange = function() { var orientation = window.orientation;
Mais cela ne marche pas. Pour comprendre pourquoi, prenez un iPad dans une main, une Galaxy Tab dans l'autre. Si vous les placez dans leurs positions normales (bouton en bas pour le premier, logo Samsung en bas pour la seconde), vous remarquerez que l'un est en mode portrait, l'autre en mode paysage. Ainsi, le 0° peut correspondre indifféremment à l'un ou l'autre mode suivant le terminal, et idem pour les autres valeurs !
On y est presque !
Pour s'en sortir, l'idée serait de comparer la largeur et la hauteur de l'écran pour savoir si on est en portrait ou en paysage à 0°. Ainsi, on peut en déduire l'orientation pour les autres valeurs.
/* Ce code ne fonctionne toujours pas... */
/* Appelé quand le device passe en mode portrait. */ function mode_portrait() { alert('mode portrait.'); }
/* Appelé quand le device passe en mode paysage. */ function mode_paysage() { alert('mode paysage.'); }
window.onorientationchange = function() { var orientation = window.orientation;
Ce code fonctionne très bien pour iPad, par exemple. Mais sur la Galaxy Tab, le message affiché sera toujours le même. Pourquoi ? Parce que les valeurs mêmes de screen.width et screen.height changent avec l'orientation sur cette tablette, ce qui n'est pas le cas sur l'iPad. Nous nous retrouvons donc face à un beau casse-tête !
La solution
Voici la solution que je vous propose. Tout d'abord, les hauteur et largeur de l'écran sont relevées au lancement du script. Puis, lors d'un basculement, on compare les valeurs de screen.width et screen.height avec celles enregistrées. Si celles-ci ont changées, on se fie à cette donnée pour déterminer l'orientation. En revanche, si elles restent inchangées, on utilise le script présenté juste avant.
/* La solution ! * Licence : GNU/GPL 2. */
var width = screen.width; var height = screen.height;
/* Appelé quand le device passe en mode portrait. */ function mode_portrait() { alert('mode portrait.'); }
/* Appelé quand le device passe en mode paysage. */ function mode_paysage() { alert('mode paysage.'); }
window.onorientationchange = function() { var orientation = window.orientation;
/* Trois cas de figure possible : * - le device a un écran plus large que haut. * - le device a un écran plus haut que large. * - le device trouve intelligent de modifier la largeur * et la hauteur de l'écran en fonction de son orientation... * * Du coup, soit la largeur/hauteur de l'écran change, et * on en déduit à partir de là l'orientation, sinon il faut * se fier à la variable window.orientation, et en déduire * d'après le ratio de l'écran l'orientation... */
Cette solution n'est peut-être pas la plus élégante (si vous avez mieux, je suis intéressé), mais elle a le mérite de fonctionner correctement.
Ce qu'en dit la norme
La notion d'orientation a été vraisemblablement introduite par Apple avec l'iPhone et l'iPod. À l'époque, seuls ces deux terminaux prenaient en charge l'évènement window.onorientationchange et la variable window.orientation. Actuellement, elle est en passe d'être normalisée par le w3c, ce qui explique pourquoi la plupart des périphériques tactiles la prennent en charge. Cependant, la norme est encore à l'état de brouillon.
Malgré tout, l'orientation n'est pas restreinte aux seuls modes portraits ou paysage, comme on pourrait s'y attendre. Ainsi, le fabricant a toute la liberté de choisir la position de référence qu'il souhaite.
Concernant la largeur et la hauteur de l'écran, je n'ai pas vu qu'il était imposé qu'elles soient fixées. Ce détail est laissé à l'appréciation du constructeur, ce qui explique le comportement de la Galaxy Tab.
Comme vous pouvez le constater, la norme reste encore floue aujourd'hui, d'où des comportements différents suivant les terminaux. On ne peut qu'espérer qu'à l'avenir, tout ceci se clarifie un peu.
La nouvelle s'est répandu sur le web comme une traînée de poudre : les députés européens ont aujourd'hui rejeté une fois pour toutes le traité ACTA à 478 voix contre 39. Ce projet de loi constituait une atteinte intolérable aux libertés fondamentales des eurocitoyens, et même aux citoyens du monde entier. Il prévoyait, entre autres, de filtrer l'internet et de censurer les propos des internautes. La liberté d'expression sur le web s'en serait trouvée considérablement atteinte.
Cette victoire pour la démocratie est l'occasion de nous rappeler que nous, citoyens, avons le pouvoir de dire non aux politiques abusives qui nous sont parfois imposées. Même si l'avenir semble assombri par les différents projets de lois liberticides tels que SOPA, PIPA ou Hadopi, nous pouvons encore croire en un monde où la liberté d'expression et le libre échange seront respectés.
Mais ACTA nous montre également qu'il faut rester vigilant. La démocratie n'est pas un acquis ; il est de notre devoir de veiller à ce qu'elle ne nous échappe pas.