Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 5 juillet 2018

Utiliser Visual Studio Code pour développeur rubyonrails

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 in US-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) :

... },
{
"name": "Rails server",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "${workspaceRoot}/bin/rails",
"args": [
"server"
],
"env": {
"LANG": "en_US.UTF-8",
"LC_COLLATE": "en_US.UTF-8",
"LC_CTYPE": "en_US.UTF-8",
"LC_MESSAGES": "en_US.UTF-8",
"LC_MONETARY": "en_US.UTF-8",
"LC_NUMERIC": "en_US.UTF-8",
"LC_TIME": "en_US.UTF-8",
"LC_ALL": "en_US.UTF-8"
}
},
{ ...

Source :

https://lankydanblog.com/2017/05/12/debugging-a-rails-server-in-visual-studio-code/

https://github.com/rubyide/vscode-ruby/issues/43

mercredi 9 mai 2018

Mettre Firefox en plein écran au démarrage par code

Attention ne fonctionnera que si :

- 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>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Ceci est un exemple</title>
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
<script>
function toggleFullScreen() {
document.querySelector("body").mozRequestFullScreen();
}
// Nécessite full-screen-api.allow-trusted-requests-only = false (dans about:config)
$(document).on('ready', function(){
toggleFullScreen();
});
</script>
</head>
<body allowfullscreen="true">
<p>Ceci est un texte !</p>
</body>
</html>

jeudi 20 juillet 2017

Je n'aime pas la syntaxe Hash ruby 1.9+

Bon à chaque fois que je dis ça, je m'attire des enemies, voici un cas pénible en syntaxe 1.9 :

# Clé integer
2.3.3 :054 > { 4 => 'truc' }
=> {4=>"truc"}
2.3.3 :055 > { 4: 'truc' }
SyntaxError: (irb):55: syntax error
# Clé string
2.3.3 :061 > { 'cle': 'truc' }['cle']
=> nil
2.3.3 :062 > { 'cle' => 'truc' }['cle']
=> "truc"

Si vous n'êtes pas d'accord, pas de souci mais argumentez le débat sera plus intéressant (sur twitter, trop de spam ici :/) !

EDIT : Il s'agit uniquement d'une syntaxe simplifiée pour les clés symboles. Merci Bob (https://twitter.com/bobmaerten/status/888473343589982208).

lundi 17 juillet 2017

Find et Grep : quelques exemples pratiques

Voici quelques exemples pratiques de find grep et autres :

grep -v pouet permet de ne selectionner que les lignes ne comportant pas pouet !

find . -mmin -10 permet de récupérer la liste des fichiers modifiés il y a moins de 10 minutes

grep "action" development_error.log -B 2 -A 2 permet de chercher 'action' dans development_error.log avec 2 lignes Avant (Before) et une ligne Après (After)

Ce billet sera mis à jour au fur et à mesure des découvertes.

mardi 11 juillet 2017

Manipuler les migrations SchemaMigrations dans une console rails [RAILS 4 / 5]

Pour réparer une boulette, je suis tombé là-dessus pour manipuler les migrations en console rails et c'est bien pensé :

http://stackoverflow.com/questions/19100303/schema-migrations-table

En résumé on définit un model pour mapper la table schema_migrations (vous pouvez taper ceci tel quel en console) : 

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end

On a ensuite accès à l'api ActiveRecord. Du coup j'ai corrigé ma bêtise comme ça : 

SchemaMigration.where(version: '20161020124307').first.update_attribute(:version, '20161026065007')

JS : Afficher un menu qui ce cache quand on clique ailleurs que sur un élément du menu

Cas d'utilisation : un menu déroulant qui s'affiche lors d'une recherche (le menu contient des éléments cliquables et quand on clique ailleurs sur la page on souhaite masquer le menu :

$(document).on('click', 'body', function(e){
// Quand on clique sur le body on cache la zone
$('#zone-a-cacher').hide();
});
$(document).on('click', '#zone-a-cacher', function(e){
// Evite que l'évènement ne soit propagé jusqu'au body
// (car sinon la zone serait de nouveau cachée)
e.stopPropagation();
e.stopImmediatePropagation();
});

mardi 9 mai 2017

Faire un timelapse avec un raspberrypi et une lampe commandée par un relais


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.

Bref rentrons dans le vif du sujet.

Déjà voici la liste du matériel :

Un raspberry pi 3 model B

L'alimentation du RPI avec radiateur passif et boitier plexi

Un relais (pour les noobs comme moi, un relais est un interrupteur contrôlable électroniquement (voir ici https://www.astuces-pratiques.fr/electronique/le-relais-principe-de-fonctionnement)

La camera PI v2 8mpx

Il faut également ça mais vous avez peut-être déjà ça chez vous...

Un transformateur 12v DC (que vous n'utilisez plus...)

Une lampe 12v gu5.3 led (les spots halogènes en led)

Des fils/cables breadboard

Des douilles gu5.3

Voici j'ai été exhaustif...

Pour le montage :

SCHEMA

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).

Bref donc voilà le script :

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

- page 1 de 49