Pourquoi diable un article sur Badawok 7.x ? Car en fait je l’utilise encore et continue de faire progresser sa branche, même si la 8 a été démarrée. D’un côté car il est en prod et qu’il faut suivre parfois les petits couacs potentiels, et puis, surtout, car je développe un nouveau site client, et donc, avec une version stable et pas en dev, comme je peux me le permettre avec Comitards.
Que dire ? Plein de trucs !
Depuis le début de la 7, une page peut prévoir des remplacements, textes pour 99% de l’utilisation mais également d’insertion de module, via les accolades ( {class:method|params|...} ). Une erreur a été corrigée au niveau de la détection des params, jamais utilisé jusqu’ici, et très fortement utilisé dans mon projet actuel. Quatre ans plus tard, une fonctionnalité voit son plein potentiel, et ça fait plaisir !
De même, une bonne surprise de conception, l’ordre des étapes de rendu permet de passer des arguments via PHP : {class:method|params|<?php echo $maVar ?>}.
Ainsi une problématique récurrente a pu trouver une nouvelle solution : la traduction de données.
Le système de langue étant dynamique, le nombre de langue varie et la maintenance de formulaires est pénible, coté front et coté code avec les checks etc. On découpe tout ça autrement.
Brutalement on imagine une table avec un seul id, mettez ce que vous voulez comme champs, excepté du texte. Coté formulaire vous ne vous occupez que de vos champs et vous insérez là où vous voulez l’appel au système de traduction ({trad:displayOne|params}) les params pouvant définir, dans un ordre définis, l’id du champs, son maxlength, etc. Je vous passe les détails.
Dynamiquement le formulaire sera complété de vos champs et ceux-ci seront pré-rempli si existant. Côté back, 2 méthodes, une de check des required et langue par défaut et une de sauvegarde multi-lingue.
Maintenance plus aisée, tant pour l’utilisateur que le développeur 🙂 !
Avec le même système d’insertion de module, et sur retour d’expérience du site terragusto.be, où la colonne de gauche devait être préparée par chaque action, ici notre menu/sous-menu principal est composé de 3 insertions, un par menu. Ainsi on ne met pas de code dans le layout non nécessaire et le rendu de manière centralisée avec les appels préparatoires qui vont bien et toujours les ACL qui vont avec.
Encore un autre usage et amélioration, la barre d’admin, d’habitude dans le layout sur condition ACL (Access Control List) et ici en centralisé avec config pour le global et la possibilité à chaque action de déclarer un menu potentiel, dont l’ACL activera ou pas l’affichage.
Enfin, un système de message d’erreur ou confirmation centralisé, inspiré de l’univers ZF. On envoie le message, on le configure pour son apparence et hop, le prochain affichage possible les affichera selon le template défini.
Cette version a encore du poil de la bête et n’a pas encore tout donné, c’est un plaisir personnel de voir son propre framework capable et fonctionnel :).
Le 13 janvier 2009 Fozzgog est arrivé, non sans mal. Et quelques années plus tard il se tût… Violet ayant fait faillite, racheté, re-faillite, abandonné et la communauté à réussi à obtenir les codes sources et le domaine nabaztag.com.
Je vous passes les détails de l’histoire, c’est long et internet en est gorgé. La question est, après autant de temps, puis-je encore le faire fonctionner comme « avant » ou presque ?
La réponse est « oui » !
En cherchant je suis tombé sur le tuto de Pierre Dandumont utilisant OpenJabNab avec l’aide de la communauté. L’article est déjà vieux et n’est plus tout à fait à jour, j’ai du bricoler un peu, d’où cet article pour en faire la mise à jour.
Je vais essentiellement reprendre ses étapes et retirer/ajouter la différence. Principalement je ne suis pas sous mac et n’utiliserais pas le service Bonjour. L’OS de base n’est plus tout à fait le même non plus.
Mon idée est de pouvoir promener mon lapin chez moi et en dehors moyennant une prise de courant. Il est quand même la mascotte de la Famille du Band Bleu 🙂
Mon matos :
Un Raspberry B (r2), alim etc.
Carte SD 4Go
Mon Nabaztag:tag, alim etc
Un routeur WI-FI
Clavier, souris, écran HDMI (ou adaptateur etc. dans mon cas)
Sur la carte SD j’ai mis une version de Raspian Jessie Lite, pour n’avoir que le nécessaire et sans interface graphique. J’ai essayé Noobs mais sur la 4Go, la mise à jour n’avait pas assez de place. Après de toute façon il ne nous faut que de la console :).
J’ai utilisé win32diskimager pour mettre l’image sur ma carte SD.
On branche et on allume. Oubliez pas que le login/pw de base sont pi/raspberry.
Config de base
Un fois connectez on va mettre les bonne conditions de départ, tapez sudo raspi-config, vous aurez un bel écran d’interface avec un tas d’options :).
Activez SSH s’il ne l’est pas, réglez votre langue et étendez le file system à toute la carte. Dans notre cas on est déjà console, pas besoin de désactiver l’interface graphique au boot. Mais vous pouvez régler la mémoire vidéo à 16Mo.
Dans les options avancées il y a aussi hostname, ne l’oubliez pas, donnez un nom à votre terrier :). Ça évite de toucher aux fichiers (hosts, hostname) manuellement par la suite.
Là normalement vous pouvez ping, mais non ! Dans cette version il y a une erreur connue. Vous devrez d’abord exécuter : sudo chmod u+s /bin/ping .
Ensuite tentez un ping vers ce que vous voulez pour vérifier votre connexion réseau.
Maintenant qu’on a du réseau on met à jour.
sudo apt-get update
sudo apt-get upgrade
Ensuite on fixe son IP. Dans mon projet de promener l’installation ça a d’autant plus d’importance.
sudo nano /etc/network/interfaces
Mon réseau est en 192.168.1.x, vous devrez adapter les configs selon votre cas. Vous devez modifier la ligne iface eth0 inet dhcp en :
On sudo reboot, on débranche clavier souris etc, on laisse juste alim et réseau. On retourne a son bureau, on s’installe confortablement, on prend putty et on se connecte :
ssh pi@192.168.1.150
Serveur DNS
Comme le dit le tuto de Pierre, le truc chiant c’est que le lapin a besoin d’un nom de domaine pour se connecter au serveur. Donc il nous faut notre propre serveur DNS local.
C’est parti pour plein de config. Perso j’ai eu du mal sur cette partie du fait des mises en pages des contenus. Pour infos je me suis basé sur mes configs de domaines, le tuto de Pierre et une doc.
On va créer notre nom de domaine : terrier.loc avec son sous domaine ojn.terrier.loc .
sudo nano /etc/bind/named.conf.local
Attention la deuxième partie est l’envers de notre réseau.
zone "terrier.loc" {
type master;
file "/etc/bind/db.terrier.loc";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1.inv";
};
Maintenant il nous faut les 2 fichiers précisés.
sudo nano /etc/bind/db.terrier.loc
$TTL 604800
@ IN SOA ojn.terrier.loc. root.terrier.loc. (
1 ; serial
604800 ; refresh
86400 ; retry
2419200 ; expire
604800 ) ; negative cache TTL
;
@ IN NS ojn.terrier.loc.
@ IN A 192.168.1.150
;
ojn IN A 192.168.1.150
;192.168.1.150 IN A 192.168.1.150
# Generated by resolvconf
domain home
nameserver 192.168.1.1
nameserver 192.168.1.150
Particularités ici, si vous avez un soucis d’accès lors de test du domaine, commenté la 1.1. Si vous rebootez elle sera décommentée.
Enfin, on active le serveur de cache pour accéder au net. On décommente la partie forwarders et on met l’ip de la passerelle.
sudo nano /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
192.168.1.1;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Redémarrez et testez, ping google.com, ping ojn.terrier.loc. Cf. ma remarque d’avant avec les ligne nameserver.
Vous pouvez également tester depuis votre poste en modifiant votre connexion réseau et en précisant le serveur DNS à 192.168.1.150.
Le serveur
On y est, on va mettre le serveur en place et on va utiliser un Apache, comme dit Pierre, il y aura pas des milliers de lapins.
Tapez l’ip de votre OJN (dans mon cas 192.168.1.150) pour y accéder. Vous devriez avoir le message « Problem with OpenJabNab ! » signe que tout va bien 🙂 Si vous avez une page d’index c’est que votre mod rewrite n’est pas activé.
Maintenant c’est compilation ! Yeah 🙂
sudo apt-get install qt4-qmake qt4-qtconfig qt4-designer qt4-dev-tools libqwt5-qt4-dev build-essential
cd /var/www/OpenJabNab/server
sudo qmake -r
sudo make
cd /var/www/OpenJabNab/http-wrapper/ojn_local/plugins/
sudo wget http://down.dandu.be/nabaz-lang-mp3-fr.tar.gz
sudo wget http://down.dandu.be/nabaz-ojn-mp3-fr.tar.gz
sudo tar xvfz nabaz-lang-mp3-fr.tar.gz
sudo tar xvfz nabaz-ojn-mp3-fr.tar.gz
Et on lance !
sudo ./bin/openjabnab
Techniquement ça devrait démarrer sans erreur. Du coup on va dans l’admin du terrier 192.168.1.150/ojn_admin.
En bas de page on peut voir les infos, ce qui montre ce qui a été chargé, preuve que ça fonctionne.
Il vous faudra créer un compte, le premier sera mit en admin automatiquement.
Le lapin
Ensuite il faut ajouter le lapin, dans account, donnez lui un nom en suivant les contraintes et entrez sa mac.
Prenez votre lapin, allumez le en appuyant sur son bouton de tête, il devient bleu. Connectez vous à son Wi-Fi et rendez-vous sur son ip 192.168.0.1.
Le lapin a du mal à se connecter en Wi-Fi (peut-être mon lapin), déjà le WPA il a du mal mais y arrive parfois (nabaztag:tag), le v1 lui ne sait faire que du WEP. Je n’ai pas envie de chipoter, j’ai un routeur, une connexion invisible, ça suffira, j’ai désactivé la sécurité. Faites en fonction de votre projet et de votre lapin !
Dans la config avancée, désactivez le DHCP, donnez lui une IP fixe (192.168.1.151) ensuite renseignez le serveur ojn.terrier.loc/vl.
On sauve, le lapin redémarre et si tout va bien ça s’allume ! Le lapin bouge les oreilles et vous sautez dans tous les sens, votre lapin se reconnecte !
Lancement automatique
J’ai essayé en vain la solution du daemon. Je n’ai peut-être pas trouvé de solution suffisamment à jour. J’ai donc utilisé la solution barbare mais fonctionnelle de Pierre :
sudo nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
sudo /var/www/OpenJabNab/server/bin/openjabnab
exit 0
Dans les possibilités de suites, car OJN ne gère pas/plus les chorégraphies ça serait de développer le plugin le permettant, tout à l’air d’être à disposition pour y arriver. Il n’y a quasi pas de doc donc ça sera empirique mais pourquoi pas essayer.
En local TTS et Taïchi fonctionnent bien. L’API pour le coucher, lever, TTS aussi. C’est déjà une bonne base pour redévelopper avec. Reste à voir si il peut le faire en autonomie.
J’ai développé une application web de gestion des évaluations du personnel. Ceux-ci impriment leur évaluation, et dans toutes grandes entreprises, il n’y a pas un type de poste mais autant que d’employé 🙂 , surtout quand ils accèdent depuis l’extérieur.
J’ai opté pour Bootstrap sur un Zend Framework 2 et une impression naturelle de la page web plutôt que de générer un PDF. Pourquoi faire 2 fois le travail quand il suffit d’un peu de CSS :).
C’est là qu’on me dit que rien ne va quand on imprime, que le nombre de pages est infini, etc. L’utilisateur dans sa splendeur 🙂 rien ne va mais tout va SAUF l’impression sous Windows 8.0 et IE10.
Après une recherche dichotomique pour isoler le méchant code, voici le meurtrieur de navigateur avec sa solution, hop tout en un.
Le page-break-inside, qui date de IE8 en terme de support, a une belle régression ici et ne s’y retrouve plus, générant ainsi une infinité de page, pète la mémoire et fin de l’histoire, ça ne sort jamais.
Il vous faudra également un petit JS trouvé sur le net qui aidera à la détection de IE10 qui ne peut plus se faire avec les commentaires conditionnés (<!–[if lt IE 9]><![endif]–>).
if (/*@cc_on!@*/false && document.documentMode === 10) {
document.documentElement.className+=' ie10';
}