Installer NodeJS, NPM et Bower sous Debian

node.js-bower

Pour une installation d’un environnement de développement sous Debian.

Installer les dépendances

sudo apt-get update 
sudo apt-get install git-core curl build-essential openssl libssl-dev

Télécharger NodeJS

Et lancer la compilation

tar xvf node-v5.4.0.tar.gz
cd node-v5.4.0
configure
make

Editer le fichier /etc/profiles ou ~/.profile

# PATH
NODEJS_HOME=$HOME/prgm/node-v5.4.0-linux-x64

PATH="$NODEJS_HOME/bin:$PATH"

Tester l’installation

node -v
npm -v

Installer Bower

npm install -g bower

Installer Grunt

npm install -g grunt

Let’s Hack !

Configuration Wifi avec SSID masqué sous Raspbian

Dans le cas ou tout comme moi vous avez masquez votre SSID, éditer le fichier /etc/network/interfaces

# /etc/network/interfaces
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "SSID"
wpa-proto RSN
wpa-pairwise CCMP
wpa-key-mgmt WPA-PSK
wpa-psk "PASS"

Sources :

framboise314.fr

Projet : création d’une station météo à base de Raspberry Pi

J’ai décidé de me fabriquer une station météo à base de Rasberry Pi. Une série d’article détaillera suivant mon humeur, les étapes de cette station météo. Le projet est pour le moment à l’état d’ébauche. Cet article a pour but de servir de cahier des charges et de lister le matériel.

[toc]

Cahier des Charges
Informations disponibles

La station météo devra fournir les informations suivantes :

  • Température,
  • Humidité de la pièce,
  • Pression,
  • Qualité de l’air.

Dans un second temps, les informations complémentaires pourront être disponibles :

  • Température extérieure,
  • Pression extérieure,
  • Humidité extérieure,
  • Prise de vue du Jardin.

En somme, un capteur déporté devra pouvoir être installé. Ce capteur fonctionnera à l’énergie solaire. Le protocole de communication avec la station est encore à définir.

Fonctionnalités
  • Les informations devront être disponibles à distance (Web, API et frontend).
  • Les informations seront affichées sur un écran embarqué tactile.
  • Les informations seront enregistrées dans une base de données.
  • Les informations seront conservées pour une durée de 3 mois.
  • Une synthèse journalière sera générée pour archive. Il sera possible d’afficher cette synthèse pour chaque journée et d’afficher des courbes de comparaison.
  • Il devra être possible d’éteindre l’écran pour limité la consommation d’énergie.
Matériel
  • Rasberry Pi 2 model B, chez LDLC (45€)
  • Carte Mémoire Sandisk 16Go, chez LDLC (9€)
Capteurs
  • Humidité/Température : DHT22, chez Adafruit (10$)
  • Pression/Température : BMP085, chez Adafruit (20$)
  • Pression/Température: BMP180, chez Adafruit (10$)
Périphériques
  • Écran 7″ tactile, chez Adafruit (80$), chez Swag (58£), RS (60 €)
  • Boitier Pour l’écran, chez Adafruit (15$), KUBII (12.50 €)
  • Alimentation USB 2A, chez Swag (5£), RS (5 €)
  • Module Wifi USB, chez Adafruit (20$)
Composants Divers
  • 1x Résistance 10KOhms, chez Adafruit (0.75$ les 25)
  • 1x Fiche 40 pins, Adafruit (0.75$)
Matériel de mise au point
  • Carte d’essais, chez Adafruit (6$)
  • Cobbler 40 pins, chez Adafruit (6.50$)
Étapes de fabrication
  1. Élaboration du cahier des charge et conception
  2. Commande du matériel chez les différents fournisseurs
  3. Prototypage sur une carte d’essais du modèle simple (sans module déporté)
  4. Réalisation d’un circuit imprimé et commande chez un professionnel.
  5. Mise en place du premier modèle
Ressources

 

Mises à jour
  • 27/01/2016 : Commande Adafruit
  • 03/02/2016 : Commande RS

Git Aide mémoire

Commandes utiles

Initialiser un dépot distant

cd /var/git
mkdir projet.git
cd projet.git
git --bare init

Récupérer un dépot existant

# récupérer un repository distant chez soi
git clone git@github.com:foobar/barfoo.git

Ajouter un dépot distant à un dépot distant

git remote add origin git@dev.gitlab.org:gitlab/gitlabhq.git

Mettre à jour son repository local

# mettre à jour son repository local en fonction du remote "origin"
git pull

Jouer avec les branches

# créer une branche locale "dev"
git branch dev  # crée la branche
git checkout dev # bascule sur cette branche
 
# raccourcis en une commande
git checkout -b dev
 
# voir la liste des branches
git branch -a
 
# une branche peut avoir un nom plus complexe
git checkout -b kit-maps/dev
git branch -a
 
# envoyer la branche locale vers le remote origin
git push origin foo/branch_dev

Autres

# un fichier a été ajouté par erreur dans GIT ?
# pour le sortir de GIT sans l effacer :
git rm --cached <file>

# pour n'ajouter que certaines modifications d'un fichier dans un commit
git stage --patch
# ensuite pour chaque modif du fichier, git vous demande si vous voulez
# ajouter la modif

Outils

EGit : Plugin Eclipse

GitEye : Outil basé sur Eclipse et EGit

Sources

Aide mémoire interactif

Ubuntu-fr

Openclassroom

 

 

Limiter l’accès de certains pays avec Nginx

Je suis récemment tombé sur un article décrivant comment bloquer l’accès de certains pays avec Nginx. J’ai donc décidé de bloquer les pays responsables de spams (commentaires indésirables). Je vais ici décrire la procédure sur Debian Jessie.

Tout d’abord vérifier que le module GOIP est  activé :

nginx -V

Si c’est le cas, la commande vous retournera quelque chose comme cela. C’est normalement la configuration par défaut sur Debian :

nginx version: nginx/1.x.x 
TLS SNI support enabled 
configure arguments: [...] --with-http_geoip_module [...]

Installer GEOIP :

apt-get install geoip-database libgeoip1

Puis créer le fichier /etc/nginx/conf.d/geo.conf

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
    default yes;
    BE no;
    FR no;
}

Via cette configuration, la France et la Belgique (désolé amis frontaliés) sont bloquées. Je vous laisse le soin d’ajouter d’autres pays…

Dans la le fichier de configuration du site web concerné, ajouter :

if ($allowed_country = no) {
        return 444;
}

Redémarrer le serveur :

service nginx configtest
service nginx restart

Au besoin, il possible de mettre à jour la base de données GEOIP

cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

A surveiller dans la durée dans vos logs. La manipulation fonctionne, je l’ai tester depuis un poste extérieur.

Source : JBNet.fr

Documentation Nginx : HttpGeoipModule

Liste des codes pays : ICI

 

Serveur Gigabyte BRIX

Mon Seagate Dockstar venant de rendre l’âme j’avais besoin d’une machine de remplacement.

Critères :

  • Basse consomation
  • Silencieux
  • Petit
  • Prix inférieur à 250€

Moi choix s’est porté sur le Gigabyte Brix GB-BXBT-J1900GB-XM33. Vendu 145€ chez LDLC, je lui ai ajouté un SSD Sandisk de 120Go et une barrette de 8Go (DDR3 lowvoltage) de mémoire (pour voir large). Un disque dur mécanique de 500Go (celui du Dockstar) vient conserver les données.

Gigabyte Brix J1900
Gigabyte Brix J1900

L’installation de Debian Jessie ne pose aucun problème. Niveau puissance c’est le jour et la nuit par rapport au Dockstar.

Pour le moment les services installés sont :

  • Serveur DNS
  • Serveur NGINX
  • MariaDb SQL
  • Subversion
  • Git
  • VPN

Celui-ci servira peut-être à terme de média center. Je dois encore faire quelques tests.

 

Support d’écran maison

A la recherche d’un support d’écran pour la maison, je suis tombé sur l’article de Darklg. J’ai donc décidé d’en réaliser un aussi. Pour des raisons de stocks j’ai choisi une version un peu différente.

Matériel  :

  • Pieds CAPITA 8 cm : ICI
  • Face de tiroir BROKHULT 40x20cm : ICI

Matériel

Je ne détaillerai pas le montage car il est très bien décri chez Darklg. Perçage

Voici le résultat :

Final

 

Source : http://darklg.me/2012/09/support-ecran-10-euros-ikea/

 

Symfony : Création d’un formulaire

La puissance de Symfony est sans limite. Symfony vous fourni les outils nécessaires à création automatique de formulaires.

Ici serons listé quelques aide mémoires, les type disponibles, les méthodes à utiliser etc… Les sources sont disponnibles pour avoir plus de détails sur la création de formulaires.

Liste des type disponnibles :

Texte

Choix

Date et temps

Divers

Multiple

Caché

text
textarea
email
integer
money
number
password
percent
search
url

choice
entity
country
language
locale
timezone

date
datetime
time
birthday

checkbox
file
radio

collection
repeated

hidden
csrf

Sources :
http://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-symfony2/creer-des-formulaires-avec-symfony2

http://symfony.com/fr/doc/current/book/forms.html
http://zestedesavoir.com/tutoriels/324/developpez-votre-site-web-avec-le-framework-symfony2/396/allons-plus-loin-avec-symfony2/2002/creer-des-formulaires-avec-symfony2/
 

 

Matomo encountered an error: Uncaught Error: Class "Piwik\Plugins\CustomVariables\CustomVariables" not found in /var/www/piwik/core/Tracker/TrackerCodeGenerator.php:101 Stack trace: #0 /var/www/piwik/plugins/SitesManager/API.php(160): Piwik\Tracker\TrackerCodeGenerator->generate() #1 [internal function]: Piwik\Plugins\SitesManager\API->getJavascriptTag() #2 /var/www/piwik/core/API/Proxy.php(255): call_user_func_array() #3 /var/www/piwik/core/Context.php(29): Piwik\API\Proxy->Piwik\API\{closure}() #4 /var/www/piwik/core/API/Proxy.php(158): Piwik\Context::executeWithQueryParameters() #5 /var/www/piwik/core/API/Request.php(274): Piwik\API\Proxy->call() #6 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request/Php.php(46): Piwik\API\Request->process() #7 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request/Php.php(18): WP_Piwik\Request\Php->call() #8 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request.php(63): WP_Piwik\Request\Php->request() #9 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(1038): WP_Piwik\Request->perform() #10 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(1205): WP_Piwik->request() #11 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik/TrackingCode.php(16): WP_Piwik->updateTrackingCode() #12 /var/www/thegtricks/wp-content/plugins/wp-piwik/classes/WP_Piwik.php(296): WP_Piwik\TrackingCode->__construct() #13 /var/www/thegtricks/wp-includes/class-wp-hook.php(324): WP_Piwik->addJavascriptCode() #14 /var/www/thegtricks/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters() #15 /var/www/thegtricks/wp-includes/plugin.php(517): WP_Hook->do_action() #16 /var/www/thegtricks/wp-includes/general-template.php(3080): do_action() #17 /var/www/thegtricks/wp-content/themes/twentyfifteen-child/footer.php(45): wp_footer() #18 /var/www/thegtricks/wp-includes/template.php(810): require_once('...') #19 /var/www/thegtricks/wp-includes/template.php(745): load_template() #20 /var/www/thegtricks/wp-includes/general-template.php(92): locate_template() #21 /var/www/thegtricks/wp-content/themes/twentyfifteen/index.php(65): get_footer() #22 /var/www/thegtricks/wp-includes/template-loader.php(106): include('...') #23 /var/www/thegtricks/wp-blog-header.php(19): require_once('...') #24 /var/www/thegtricks/index.php(17): require('...') #25 {main} thrown (which lead to: Session must be started before any output has been sent to the browser; output started in /var/www/thegtricks/wp-includes/script-loader.php/2938)