Là vous pourriez dire qu'il suffit de double-quoter pour que les séquences unicodes soient interprétées :
puts"s\u00E9par\u00E9"# Affiche "séparé"
C'est vrai, mais nous ne maitrisons pas les données qui arrivent (par exemple dans le cadre d'une API REST avec un client qui ne sait pas envoyer des caractères unicodes d'une autre manière. Voici une solution :
Je regarde de temps en temps les alternatives à rubymine (J'ai eu pas mal de
problème de lenteur avec le debuggeur sur MacOSX...). J'avais testé VS Code il
y a quelques temps mais je suis vite revenu sur rubymine. Un article
intéressant sur lequel je suis tombé explique comment mettre en place le
débuggeur :
https://lankydanblog.com/2017/05/12/debugging-a-rails-server-in-visual-studio-code/
Ça n'a pas suffit chez moi malgré ruby 2.4, j'avais une erreur : "invalid
byte sequence inUS-ASCII", en
spécifiant la section "env" dans le fichier de confça rentre dans l'ordre (le fichier de conf
c'est le fichier launch.json en cliquant sur la roue crantée dans la zone debug
de VS Code) :
- Vous avez la main sur la machine sur laquelle est lancée firefox
- Si vous avez le contrôle du code-source du site à afficher
Si ce n'est pas le cas, retournez sur votre moteur de recherche
préféré...
Il n'est pas prévu de lancer firefox en plein écran au démarrage (même en
ligne de commande).
Me souvenant de la fullscreen api je décide de l'utiliser. Le but étant qu'au chargement
de la page le navigateur se lance en plein écran. Je fais mon POC et là c'est
le drame :
"Request for fullscreen was denied because Element.requestFullscreen() was
not called from inside a short running user-generated event handler.".
Après avoir pleuré à chaudes larmes pendant 15 min, je me souviens avoir vu
des trucs dans "about:config" de firefox. Et je trouve l'option miracle :
"full-screen-api.allow-trusted-requests-only". En passant ce flag à false on
peut mettre le navigateur en plein écran programmatiquement !
<!DOCTYPE html><htmllang="fr"><head><metacharset="utf-8"><title>Ceci est un exemple</title><scriptsrc="https://code.jquery.com/jquery-1.12.4.min.js"integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="crossorigin="anonymous"></script><script>functiontoggleFullScreen(){document.querySelector("body").mozRequestFullScreen();}// Nécessite full-screen-api.allow-trusted-requests-only = false (dans about:config)$(document).on('ready',function(){toggleFullScreen();});</script></head><bodyallowfullscreen="true"><p>Ceci est un texte !</p></body></html>
Ok j'ai craqué, certe un peu plus tard que tout le monde mais j'ai craqué
: j'ai acheté un raspberrypi. A la base je compte faire un photomaton mais j'ai
pas mal d'autres projets avec le raspberry.
On alimente le relais (pour voir l'allume de mon relais cliquez sur le lien
du relais dans la liste au dessus) :
- le "5v" du RPI (le 1er cercle bleu sur l'image) sur le DC+ du
relais
- le "ground" du RPI (le 2nd cercle bleu sur l'image) sur le DC- du
relais
- un troisième fils pour commander le relais (IN sur le relais) et sur le
RPI le GPIO 12 (le 3ème cercle bleu sur l'image).
Le principe c'est que lorsque le raspberry enverra du courant dans ce 3ème
fils le relais va s'activer (on lit souvent le terme "coller" sur internet)
laissant ainsi passer le courant dans le second circuit électrique. Il y a donc
deux circuits différents.
Le second circuit est très simple : on branche la lampe gu5.2 led au
transformateur (essayez déjà ce circuit seul...). On intercale le relais qui
sera l'interrupteur du circuit.
Vous noterez qu'il y a 6 connecteurs et non 5 comme sur tous les schémas mis
plus haut : ce relais permet ici d'utiliser le fait que lors que l'interrupteur
est ouvert (le courant ne passe pas), l'autre connecteur (noté NC) est fermé.
Ça peut avoir une utilitée mais pas pour nous. Nous connectons donc le "+" du
transformateur à la lampe, de la lampe à COM du relais et NO au "-" du
transformateur.
J'aime bien tout faire en ruby. Alors j'ai cherché comment controller les
GPIO du raspberry en ruby.
J'ai trouvé deux projets pour cela : pi_piper et rpi_gpio, j'ai
choisi rpi_gpio, le truc qui m'a fait choisir c'est le fait de choisir le
type de numérotation des PINS gpio soit physique (les numéros écrit sur fond
vert ci-dessus) soit électronique (les numéros écrit en italique
ci-dessus).
Personnellement j'ai mis mon ici dans
/home/pi/rivsc/photoflash/photoflash.rb (/home/pi/rivsc/ étant le répertoire
dans lequel je mets tous les scripts que je teste sur le RPI.
Donc le principe est qu'on envoie le signale au relais, le circuit de la
lampe se ferme, la lampe s'allume. On prend une photo avec raspistill
(l'utilitaire pour prendre des photos sur le raspberry). Puis on coupe le
relais en cessant de lui envoyer du courant sur le 3ème fils.
Le must c'est de ne pas reste derrière le raspberry.
Donc on va mettre en place des tâches planifiées via cron :
crontab -e
A la fin de toutes les lignes de commentaire (qui commence pas des #) mettez
ceci :
*/10 * * * * cd /home/pi/rivsc/photoflash/ && ruby
photoflash.rb
Cette ligne signifie que le script sera lancer toutes les 10 minutes (*/10 :
pour toutes les heures toutes les 10 minutes).
Bon ça c'est la théorie, le problème c'est que les gems GPIO ne fonctionne
pas avec la version de ruby installée. On va donc réinstaller ruby avec rvm,
mais il faut au préalable : git et curl. Lancez donc un terminal puis :
sudo aptitude install git curl
Installer rvm (la ligne de code vient du site officiel https://rvm.io), ça va prendre un peu de temps... donc
toujours dans un terminal :
\curl -sSL https://get.rvm.io | bash -s stable
Installer le gem rpi_gpio, dans un terminal :
gem install rpi_gpio
Fermer vos terminaux et relancez-en un, il faut faire une manipulation pour
utiliser le ruby rvm avec cron :
rvm cron setup
Maintenant ça devrait fonctionner !
Si vous souhaitez tester le script sans attendre 10 minutes pour prendre la
photo :
cd /home/pi/rivsc/photoflash && ruby photoflash.rb
S'il y a un problème ou une coquille dans l'article, interpelez-moi sur
twitter : @rivsc57