PROJET AUTOBLOG


Idleman

source: Idleman

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Emmet, integrez à la vitesse du CSS

vendredi 12 septembre 2014 à 20:16

Je viens de tomber sur un petit outil fichtrement pratique que je tenais à vous faire partager !

Emmet.io est un plugin multi os/multi IDE (sublime text, eclipse, coda, notepad++ etc…) permettant de générer en temps réel votre html (indenté, avec les id, les classes etc) directement via de la syntaxe css.

Par exemple taper :

div.mainBloc>ul#mainmenu.menu>li.item#item-$*4>span{Hello}

Générera le code suivant (en live si il vous plait) :

image

Inutile de dire que pour les habitués de la syntaxe CSS, et pour n’importe qui qui possède quelques notions d’intégrations, c’est un moyen simple de générer un code propre et complet 10 fois plus rapidement qu’en temps normal.

Mais ce n’est pas tout ! L’outil propose une dizaines d’autres fonctionnalités tout aussi bien pensées accessibles par quelques raccourcis permettant tout un tas de trucs comme l’encodage en base 64 d’une image, la  récupération de la taille d’une image, le comment d’un bloc d’instruction, etc etc…

Une petite vidéo avec quelques démo sur le site de l’auteur.

En plus d’être bien pensé et ultra ergonomique, l’outil a été porté sur plus de 15 IDE populaires

image

Sans compter les 7 IDE en lignes ou les 11 IDE supplémentaires ajoutés par la communauté.

A adopter rapidement.

Raspberry PI ~ 23 : Créer une porte domotique (Partie 2)

lundi 28 juillet 2014 à 07:13

Ce post est le vingt troisième d’une liste de tutoriels sur le raspberry PI et l’arduino, cliquez ici pour accéder au sommaire ! :D

Salut bande de bras cassés syndiqués !!

Vu le temps j’espère que vous glandez sur les plages de rio (ou au minimum dans un petit bar à tapas de lacanau) mais je vais quand même tenter ma chance d’attraper un ou deux lecteurs désœuvrés pour la lecture de ce 23em tuto.

Aujourd’hui nous allons reprendre notre porte bluetooth du tuto 22 et en faire une vrai porte domotique.

Pour cela il vas nous falloir faire communiquer l’arduino de la porte et le raspberry pi de manière simple, rapide et sécurisée (on parles d’une porte, donc évitons qu’elle ne s’ouvre trop souvent ou pour de mauvaises raisons).

Une fois la porte relié à yana, tout devient possible :

Commençons par le traditionnel quart d’heure de honte (8 min en fait).

Dans la vidéo je suis un peu vague sur le “pourquoi ça marche dans un sens pas dans l’autre” il faut dire que c’est assez vague pour moi également (et aussi que je m’en fou un peu tant que j’arrive à mes fins :) ).

Le rpi accepte au maximum du 3.3v sur ses pins, or l’ardui envoi du 5v, pour faire communiquer les deux il faudrait donc normalement utiliser un convertisseur i2c (qu’on peux voir sur ma vidéo mais qui n’est pas obligatoire grâce a notre montage) mais une histoire de résistance de pull up manquante d’un côté permet de faire communiquer du rpi vers l’arduino sans qu’il n’y ai de dégâts (j’ai testé pour vous :p)

Je parle également vite fait de “channels” j’ignore si c’est le terme en vogue, en gros c’est une adresse de communication choisie (dans ce tuto 0x12) qui permet de superposer plusieurs communications sur des adresse différentes, le rpi peut ainsi communiquer avec plusieurs portes en communiquant sur le canal de chacune.

Le matériel

Le matériel est le même que pour le tuto précédent, il vous faut bien entendu votre porte (avec son atmega328 ou son arduino inclus) un rpi à brancher à votre porte et trois fils électriques standard (de préférence un bleu, un vert et un noir), c’est tout.

Le montage

Encore une fois, le branchement est similaire au tuto précédent, il vous faudra simplement relier le port I2C du raspberry PI au port I2C de l’arduino.

Comme je suis une grosse quiche, il se peut que j’ai inversé le sda et le scl sur le rpi, si c’est le cas, n’hésitez pas à intervertir (ça n’explosera pas dans tout les cas, au pire ça ne communiquera pas)

Pour cela suivez le schéma suivant :

Untitled Sketch 2_bb_faux

Le code du raspberry PI

Avant de mettre en place le code pour le rpi, il y a quelques manipulation à faire pour “activer”
la gestion i2c sur le rpi (désactivée par défaut, certainement pour un gain de perfs).

Ouvrez le fichier /etc/modprobe.d/raspi-blacklist.conf en édition

nano /etc/modprobe.d/raspi-blacklist.conf
commentez la ligne
blacklist i2c-bcm2708
en placant un # devant

Enregistrez et fermez ce fichier, puis ouvrez le fichier /etc/modules
nano /etc/modules
ajoutez y la ligne
i2c-dev

Fermez et enregistrez, installez ensuite l’utilitaire i2c
apt-get install i2c-tools
et enfin relancer votre rpi avec la commande
reboot

Mettez a jour votre yana, le plugin se trouve en natif dans le script

Puis dans l’interface web yana, allez dans configurations–>pluging–>activez le plugin

Le code de l’arduino

Comme d’habitude, branchez l’arduino (ou l’atmega) au pc et transférez via l’IDE arduino le code suivant sur la puce.

L’application android

L’application android est un peu excessivement merdoyante, c’est toujours la même et je n’ai pas eu le temps de la débugger,
elle est dispo ici :
http://idleman.fr/ressources/ANDROID/YanaBluetooth.apk

L’utilisation :

Dans votre application androïde, allez dans “configuration”, mettez un code à 4 chiffres/lettres de votre choix
Vérifiez que le nom du périphérique correspond bien a celui de la carte bluetooth votre porte
Vérifiez que la carte bluetooth de votre porte (normalement “bolutek” est bien enregistrée dans vos périphériques bluetooth
(si la première fois la carte vous demande un code, c’est généralement 1234 ou 0000).

Ouvrez le plugin domodoor dans le menu des configurations, et ajoutez un utilisateur à la porte (si vous voulez ajouter un autre utilisateur a la porte, il faudra d’abord l’ajouter aux utilisateurs généraux de yana)
et attribuez le même code à 4 chiffre à l’utilisateur que celui que vous avez sur votre téléphone.

Vérifiez que votre montage est bon et qu’il est sous tension

lancez la commande :
sudo python /var/www/yana-server/plugins/domodoor/i2c.py

Testez en lançant l’application android.

Par la suite, il peux être bon de lancer automatiquement le programme /var/www/yana-server/plugins/domodoor/i2c.py en tache de fond au démarrage, pour cela vous pouvez utiliser les CRON (taches planifiées) de linux, ou encore créer un petit script dans /etc/init.d
(cf la doc d’ubuntu par exemple).

Comme je suis un type fichtrement cool je vous donne même le script pour lancer ça au démarrage

tapez

sudo nano /etc/init.d/domodoor

Dedans, ecrivez votre commande :

#!/bin/sh
python /var/www/yana-server/plugins/domodoor/i2c.py

Enregistrez/fermez (ctrl+x puis “y”)

Rendez le script executable

sudo chmod +x /etc/init.d/domodoor

Ajoutez le script au boot

sudo update-rc.d domodoor defaults 80

Le programme se lancera maintenant à chaque démarrage.

Notez bien que seul l’utilisateur “root” a le droit d’utiliser l’i2c, vous devrez donc lancer le programme i2c.py avec l’utilisateur root au démarrage.

Explications sur le fonctionnement

Lors de son lancement, le programme (en python car il existe une très bonne librairie sous ce langage pour gérer l’i2c et aussi parce que je me suis fait engueuler par les pro-python comme quoi j’était un sale sectaire de communiste droggué du PHP :D ) i2c.py lance une boucle qui, toutes les 0.5 secondes vas interroger l’arduino en lui envoyant le texte “ping”, si il reçoit un numero de badge, il lance un fichier php du plugin yana.

Le fichier php  vas verifier dans la base de donnée si le code existe pour un utilisateur, si c’est le cas il vas tracer l’entrée dans le log, puis ils retourne la réponse (code coorecte ou pas) au script python.

De son coté l’arduino interroge en temps réel le capteur blutooth,  si un téléphone se connecte au capteur et lui envois un code, l’arduino vas stoquer ce code dans une file d’attente de “badge a verifier” et retournera ce code lors du prochain “ping” du script python.

Si le script python lui retourne une commande d’ouverture, l’arduino vas ouvrir un certain temps (2/3 secondes) son pin relié au relais (qui vas donc s’ouvrir aussi) ce qui coupe l’alimentation de la gâche électrique et qui déverrouille la porte.

Les améliorations

L’essentiel des améliorations a faire maintenant se situe du coté de l’appli android, celle ci étant un peu bugguée et pas encore très pertinente.

L’idéal serait qu’elle inclue un “timer” qui se connecte au bluetooth une fois par minute, cherche sur le périphérique de la porte est disponible, et ouvre la porte automatiquement si c’est le cas.

On ouvre qu’une fois la porte afin d’éviter qu’elle s’ouvre non stop qu’on on est dans l’appart, mais on continue a checker toutes les minutes la présence de la porte.

Si la porte est indisponible pendant plus de 3 min, on part du principe qu’on est sortis de l’appart, la prochaine détection de porte l’ouvrira donc de nouveau.

Le must du must sera aussi d’ajouter une serrure RFID a la porte en cas de perte du portable ou de portable déchargé, je ferais peut être une troisième
partie la dessus un de ces 4.

eZ Server Monitor, un monitoring simple et léger pour vos machines linux

dimanche 6 juillet 2014 à 17:40

Voila un petit script sans prétention qui mérite d’être cité tant il est simple d’utilisation comme de mise en place (je vous l’accord le nom ne donne pourtant pas cette impression).

Ez server monitor est un script développé pour deux version : bash ou web (php) permettant comme son nom l’indique de monitorer à l’aide d’une jolie dashboard, les points importants de votre machine linux.

esm-web_dashboard-complete.min_

Mémoire, services, users, disques, processeur, réseau… tout y passe l’interface web est plutôt agréable à l’œil, et l’interface bash n’est finalement pas aussi dégueu qu’on pourrait s’y attendre voir même fichtrement lisible.

esm-sh_dashboard-complete

Une belle solution à tester sur un rpi par exemple…

Esm web : http://www.ezservermonitor.com/esm-web/features

Esm  bashhttp://www.ezservermonitor.com/esm-sh/features

 

Bonne fin de week end Sourire

 

Fenix, un gestionnaire de serveur web pour les noobs

dimanche 15 juin 2014 à 11:37

Nginx, Apache, Lighttpd … ces mots ne vous disent rien ?  Vous ne voulez pas mettre le nez la dedans ?

Mais sans installer/héberger/configurer tous ces serveur http vous souhaitez tout de même partager vos fichiers simplement sur le web ?

Alors vous serez conquis par Fenix : un programme simple, multi OS, permettant de créer en deux clic un serveur web sur le dossier de votre choix, de lui attribuer un port et de le gérer via une petite interface stylée.

Typiquement : vous lancez le programme, cliquez sur webserver –> new –> donnez un nom, un port, et un dossier local à publier et c’est bon Rire

image

Une fois votre serveur ajouté (et démarré) tapez votre adresse ip dans un navigateur suivis du port que vous avez choisis et hop !

image

Alors oui ce programme n’est pas une révolution, mais c’est une bonne base pour un gestionnaire de partage simplifié des dossiers/fichiers avec vos potes/familles.

Le gros avantage du soft étant qu’il est développé avec nodejs, les sources sont donc modifiable en javascript/html/jade etc…

Il est possible de modifier l’interface, les fonctionnalités et tout le reste étant donné que c’est plus ou moins un site web wrappé dans un conteneur bureautique (nodeWebkit donc nous parlerons prochainement dans nos tuto nodeJs).

notez que si vous voulez publier ces infos en dehors de votre réseau il faudra utiliser votre ip public (ou ip WAN) que vous pouvez trouver via des sites comme http://www.mon-ip.com/

Il faudra également débloquer le port que vous utiliserez pour votre serveur sur votre panel de box internet.

Bien a vous,

Idle

Snippet #25 ~ PHP: Intégrez une base de donnée dans votre fichier unique d’exécution

mercredi 4 juin 2014 à 01:54

Voila un ptit snippet que vous n’aurez l’occasion d’expérimenter que dans de très rares cas de figures mais qui révèle une particularité significatif du PHP, à savoir sa capacité à se réécrire lui même.

En effet le PHP étant un langage interprété la source du script peut être réécrite en cours d’exécution sans que cela pose le moindre problème.

C’est ce petit exercice que je vous propose avec ce snippet qui permet d’utiliser le fichier PHP en tant que sa propre base de données.

C’est à dire que la bas est stockée dans le fichier lui même sous forme compressée.

Dans cette exemple on utilise simplement le snippet pour lire sa base de donnée intégrée, l’afficher, et y sauvegarder un nouveau “hello world”
à chaque exécution de la page.

utilisation :
db() : retourne la base de donnée sous la forme d’un tableau php (lecture)
db($array) : remplis la base de donnée a partir d’un nouveau tableau php (écriture)

La base de données est stockée physiquement sous forme compressée dans la variable $database.

Les avantages :
- Ce type de snippet est très utilisé dans les scripts dit “mono fichiers” a savoir qui contiennent tout leurs code logiciel dans un seul fichier, ceci permet de rendre le script plus simple à installer/migrer.
- La base étant compressée à l’aide de gzinflate/deflate, elle peut contenir un grand nombre d’informations sans prendre trop de poids
- La base étant transportée sous forme de json est de tableau PHP, sa structure est dynamique (donc plus souple, mais c’est autant un inconvénient qu’un avantage si vous ne mettez pas en place certains garde fous).

Les inconvénients :
- il est nécessaire de garder la syntaxe exacte “$database = ”;” (avec les mêmes espaces etc…)
- La base étant compressée à l’aide de gzinflate/deflate, certains caractères spéciaux vont apparaitre dans la variables $database qui risquent de vous empêcher les copier/coller et/ou les modifications de fichiers avec certains encodages

<?php

//On ouvre la base de donnée sous forme de tableau
$db = db();
//on ajoute quelques données et on affiche la base
@$db['entries'][] = 'hello world '.count(@$db['entries']);
var_dump($db);
//on enregistre la base
db($db);

//A partir d'ici, ne touchez à rien ou tout explose.

//Base de donnée json compressée
$database = '';
//fonction de gestion de base de donnée intégrée
function db($d=false){
    $s = file_get_contents(__FILE__);
    if(!$d){
        preg_match_all('/\$database = \'(.*?)\';/s', $s, $result, PREG_PATTERN_ORDER);
        return $result[1][0]==''?array():json_decode(gzinflate($result[1][0]),true);
    }else{
        file_put_contents(__FILE__,preg_replace('/\$database = \'(.*?)\';/s', '$database = \''.gzdeflate(json_encode($d)).'\';', $s));
    }
}
?>

D’une manière générale cette façon de stocker les données ‘en intégré’ est déconseillée, il est préférable d’utiliser un vrai sgbd clairement distinct du code d’exécution.

Cependant dans le cas de programmes ayant besoin d’être léger en poids et en nombre, portable, et qui ne nécessitent pas de stocker un
trop grand nombre de données, ce petit snippet peut faire l’affaire.