SARAH gère le frigo

Parmi les sujets récurrents sur la communauté Google+ il y a la gestion du réfrigérateur ou des courses par SARAH. Voici un petit aperçu de ce qu’il est possible de faire.

Base de donnée

La première étape consiste à persister et retrouver des données. Plutôt que d’utiliser une usine à gaz SQL j’ai mis en place NeDB qui est une petite base NoSQL inMemory. Et qui fonctionne comme MongoDB:

[crayon]
exports.init = function(sarah){
var Datastore = require(‘./lib/nedb’);
var path = __dirname + ‘/frigo.db’;
db = new Datastore({ filename: path});
db.loadDatabase(function (err) { … });
}
[/crayon]

On se branche sur le hook init() de manière à charger la base au chargement du plugin.

[crayon]
var save = function(data){
db.update({‘name’: data.name }, data, { upsert: true },
function(){ … });
}
[/crayon]

[crayon]
var remove = function(data){
db.remove({‘name’: data.name }, {}, function(){ … });
}
[/crayon]

Ensuite les méthode save() et remove() permettent une mise à jour d’un objet de la base.

Grammaire XML

Lors de chaque mise à jour de la base il faut mettre en cache la liste des produits (pour ne pas avoir à faire un appel asynchrone)

[crayon]
var cacheProducts = function(){
db.find({ name: {$gt:’1′} }, function(err, docs){ products = docs;});
}
[/crayon]

Puis réécrire le fichier XML
[crayon]


out.action=new Object();
Sarah


ajouteout.action.add= »true »;
enlèveout.action.add= »false »;



Nutellaout.action.product= »Nutella »;

out.action._attributes.dictation= »true »;


dans les courses
à la liste des courses
aux courses

out.action._attributes.uri= »http://127.0.0.1:8080/sarah/frigo »;


[/crayon]

[crayon]
var rewriteXML = function(){
var file = __dirname + ‘/frigo.xml’;
var xml = fs.readFileSync(file,’utf8′);

var replace = ‘§ –>n’;
for(var i = 0 ; i < products.length ; i++){ replace += ' ‘+products[i].name+’out.action.product= »‘+products[i].name+' »;n’
}
replace += ‘

3 pensées sur “SARAH gère le frigo

  • 10 février 2014 à 11 h 09 min
    Permalink

    J’étais en train de faire un peu le même style de boulot ses dernier jours mais je me suis retrouvé confronter au problème de reconnaissance des garbadge….
    En gros, pour ajouter un item dans la liste il me fallait, parfois, répéter 5 ou 6 fois la phrase -__- Quand je voyais ce qui passait dans la console de debug au niveau du dictation ça n’avait rien à voir (et ça quand sarah lançait le plugin…..)
    Pourtant je suis à moins d’1 mêtre du kinecte u_u

    Répondre
    • 10 février 2014 à 11 h 19 min
      Permalink

      Ouai c’est la reco Google qui est vraiment pas top, j’ai vu que le projet que j’utilise a été porté sur GitHub donc peut être que des choses ont été améliorée

      Répondre
      • 10 février 2014 à 11 h 41 min
        Permalink

        Je jetterais un oeil à la source histoire de voir si il y a un truc que j’aurais loupé, amis dans l’état, mon plugin est en stand by, parce que pas utilisable….

        Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.