28/12/2014

inserer un nouveau projet doap au serveur Fuseki

Comment insérer un nouveau projet au serveur Fuseki du projet Smag0 :

Code source (App Inventor) et fichier pour Android au bas de cet article.

Dans le cadre Sparql Update de : http://fuseki-smag0.rhcloud.com/
 (selectionner "Control Panel" puis "ds" )

En remplacant test2 par le nom de votre projet

saisir :
 PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX ex:   <http://example.org/>
PREFIX doap: <http://usefulinc.com/ns/doap#>
PREFIX smag:   <http://smag0.blogspot.fr/NS/>

INSERT DATA {
GRAPH <http://smag0.blogspot.fr/Projets>{
smag:test2 rdf:type doap:Project .

}
}


ou remplacez  "Titre Projet" "description Projet" par vos valeurs (attention, essayer de trouver un id unique, pour l'instant j'utilise le timestamp avec un "P" devant

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX ex:   <http://example.org/>
PREFIX doap: <http://usefulinc.com/ns/doap#>
PREFIX smag:   <http://smag0.blogspot.fr/ns/smag0#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>

INSERT DATA {
GRAPH <http://smag0.blogspot.fr/Projets>{
smag:id rdf:type smag:Projet .
smag:id dc:title  "Titre Projet" .
smag:id dc:description  "description Projet" .
}
}


SELECTION DES PROJETS : (dans le cadre Sparql Query)

select ?projet ?titre ?description where {
?projet <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://smag0.blogspot.fr/ns/smag0#Projet> .
?projet <http://purl.org/dc/elements/1.1/title> ?titre .
?projet <http://purl.org/dc/elements/1.1/description> ?description .
}
ORDER BY DESC(?projet)
LIMIT 100

résultat de la requete attendu


RECUPERER LES PROPRIETES DU PROJET DONT LE TITRE EST "SPHERO-CARTO"

PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX smag:   <http://smag0.blogspot.fr/ns/smag0#>

select * where {
?projet dc:title "Sphero-Carto" .
?projet ?propriete ?objet .
}

résultat attendu

idem avec Smag0 :

PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX smag:   <http://smag0.blogspot.fr/ns/smag0#>

select * where {
?projet dc:title "Smag0" .
?projet ?propriete ?objet .
}


résultat attendu



une application android créée avec App-Inventor permet d'inserer et de lire les informations RDF présentes sur ce serveur, elles sont récupérées au format JSON.

Cette démo est un premier test... juste pour la preuve du concept.
Maintenant je peux envoyer des infos sur mon serveur FUSEKI, et les récupérer sur mon smartphone Android. Utile pour envoyer des infos au système multi-agent Smag qui gère mon domicile.

ici se trouve le code source et l'apk : https://drive.google.com/folderview?id=0B0zEK4yLB5C6UUVsMWNkbDZ0WEU&usp=sharing

le fichier Projet.aia est à importer en tant que nouveau projet sur App-inventor : http://ai2.appinventor.mit.edu/

le fichier Projet.apk est prêt à l'emploi

deux fonctions sont incluses pour l'instant : Derniers projets et Ajout d'un projet (Connection internet /wifi activée nécessairement)
Parfois le serveur fuseki met du temps à démarrer. attendez 30 secondes et renouvelez en cas d'échec

!!!! première étape franchie !!! Yahou !!!!




07/12/2014

Le système multi-agent de SMAG

faut vraiment que je rédige cet article, pour faire le point sur l'avancée... si ça met trop de temps, envoyez moi un message pour me le rappeler 

04/12/2014

SpheroCarto - Utiliser Sphero pour cartographier un environnement, et le visualiser avec Processing (APDE)

Une fois n'est pas coutume, prenons le temps de faire le point sur une partie essentielle du projet.

Dans le système SMAG comme je le prévoit, les différents modules robotiques doivent être amenés à échanger les informations qu'ils possèdent, et l'une des informations primordiales pour un objet mobile, est d'abord de savoir dans quel environnement il évolue. L'hypothèse de départ étant un "robot qui range ma chambre" on devra avoir un ou plusieurs robot qui permette aux autres de percevoir l'environnement. N'importe quel appareil mobile, connecté, capable de déterminer sa position par rapport à son point de départ pourra faire l'affaire.

J'avais dans l'idée depuis un bout de temps, d'utiliser SPHERO , une balle programmable, pour tenter de créer une "cartographie" de l'environnement maison. J'en ai trouvé une d'occasion (merci au parquet trop glissant de Matthias !).

Pour rappel, dans l'idée, le système SMAG est un système multi-agent composé de multiples agents indépendants, qui remplissent un rôle. Dans ce qui nous intéresse ici, nous pouvons considérer que la cartographie de l'environnement se décompose en trois 3 composants majeurs.

On aura :
- le robot mobile (ici SPHERO)
- une interface pour commander le robot
- une interface pour visualiser les informations

Dans notre exemple, l'interface pour commander le SPHERO et celle pour visualiser les infos seront toutes les deux dans notre téléphone mais indépendantes (pour l'instant).

Pour l'interface de commande, j'ai choisi Eclipse qui a fait ses preuves en développement Android, et pour l'interface de visualisation, il m'est apparu plus easy d'utiliser Processing, qui fait de jolies interfaces très visuelles, réactives, et souples... ou plutôt APDE sa version mobile.
J'ai utilisé les versions suivantes :
- Eclipse Luna avec le plugin ADT pour (Android Developpement Tool)
- APDE (ou Processing)
- le Sphero Android SDK (avec la version actuelle : Notice: The Sphero Android SDK works with Android 2.2+ and Java Compiler Level 6.0(1.6)+ )
- et ne pas oublier, qu'il te faut évidemment un SPHERO... (Y'en a peut-être un pas trop loin de chez toi qui t'attend  sur le bon coin ???)

Hop, une fois que tu as ton SPHERO en main, les choses intéressantes commencent :

MISE EN PLACE DE L'ENVIRONNEMENT

1. Télécharge le Sphero Android SDK et décompresse -le.
2. Lance Eclipse Luna, si tu ne l'a pas encore, télécharge le, et pendant ce temps, installe l'appli APDE depuis GooglePlay.
3. Une fois Eclipse lancé, on va commencer par se la jouer feignasse... on n'est pas là pour se prendre la tête. Le composant essentiel pour établir la cartographie de l'environnement est sans aucun doute la position de notre robot SPHERO. On va donc s'appuyer sur un des exemples du Sphero Android SDK ... le LOCATOR.
Donc la feignasse, elle ouvre son Eclipse Luna, et elle crée un nouveau projet avec New / Project. Ensuite dans l'assistant (wizzard) choir un projet du type Android (si Android n'apparait pas en dessous de Général, c'est certainement que le plugin ADT n'est pas installé (voir dans Help / Eclipse MarketPlace, et prendre ADT by Google Inc))
Sous Android choisir "Android Project from existing Code" , next et là parcourir jusqu'au Sphero Android SDK téléchargé et décompressé précédemment . et allez jusqu'au dossier Locator. moi dans Browse, j'ai : C:\Users\David\Downloads\Sphero-Android-SDK-master\Sphero-Android-SDK-master\samples\Locator

Laissez faire la Magik Mystique, et Hop !
Nous volià avec une première appli Locator que l'on peut lancer avec un coup de Run dans Eclipse... Là , si vous n'avez jamais utilisé le plugin ADT, il faut configurer l'émulateur (on trouve de la doc là dessus assez facilement).

Moi je veux tester en direct sur mon téléphone, alors je lance le Run mais l'émulateur plante alors je l'arrête , mais je m'en f... parce que c'est pas ça qui m'intéresse... ce qui m'interesse, c'est le fichier APK qui a été créé par le lancement de la commande RUN. il se trouve dans le répertoire bin du répertoire Locator de votre workspace Eclipse (celui que l'on vous demande de confirmer à chaque démarrage)

Ce fichier APK, je le copie sur la carte sd de mon téléphone(via le câble USB). Ensuite, avec un explorateur (comme ES Explorer ) je peux parcourir ma carte et installer l'application que je viens de créer.

D'autres exemples nous seront utiles. On va donc refaire la manip avec le chemin qui s'arrête à la liste des exemple (samples) : C:\Users\David\Downloads\Sphero-Android-SDK-master\Sphero-Android-SDK-master\samples

Là on va cocher : Collision + UISample + Streming Example ( + Locator mais il doit déjà être grisé car déjà installé) + cochez l'option "Copy projects into workspace"

En fait je suis plus feignasse que feignasse, on va utiliser UISample qui est un exemple déjà tout prêt d'interface. Tu peux la tester en faisant comme tout à l'heure un RUN (as android Appli. !) En copiant le fichier présent dans <<ton workspace>>/UISample/bin/ c'est le fichier UiSample.apk

Hop, comme ça, on pourra piquer du code dans ces exemples.

Maintenant au boulot !

... non en fait, trop long de recopier tout le code, si tu veux le récupérer, il est là : https://github.com/scenaristeur/sphero-carto . Il n'est pas encore nickel, il faut que je revoie la correction de direction lors des collision, la mise en veille du tél...
A ta dispo pour corriger, ajouter de nouvelles fonctionnalités... Si tu as des idées, on en discute |-)

+ découvert récemment : un mec qui utilise App Inventor pour contrôler son Sphero. J'ai testé, il reste quelques fignolages, encore, je crois. Je vous ferais signe. Abonnez-vous pour être informé des nouveautés .

28/10/2014

parsing d'un fichier mm de Freemind avec Processing

XML xml;
XML xml_mm;
int indent=0;
ArrayList liens;
ArrayList lien;
void setup() {

  //MM VERS RDF
  xml_mm = loadXML("Smag0versrdf.mm");
  //noeud principal
  XML child_mm = xml_mm.getChild("node");
  String ID_centre = child_mm.getString("ID");
  String texte_centre = child_mm.getString("TEXT");
  // String contenu = children_mm[i].getContent();
  println("Noeud central : "+ID_centre + ", " + texte_centre + ", ");

  list_node_rec( child_mm);
}

void list_node_rec(XML _noeud) {
  //branches racines
//println (indent);
  if (_noeud.hasChildren()) {
   
    XML[] children_mm_branches = _noeud.getChildren("node");
        print(children_mm_branches.length);
   // String indentation=calcul_indentation(indent);
    for (int i = 0; i < children_mm_branches.length; i++) {
      indent++;
      XML nouveauNoeud=children_mm_branches[i];
      String ID = nouveauNoeud.getString("ID");
      String texte = nouveauNoeud.getString("TEXT");
     // liens.add(new Lien());
   //  lien.add(_noeud.getString("ID"));
    // lien.add(ID);
    // liens.add(lien);
      // String contenu = children_mm[i].getContent();
     // print(indentation);
            println("");
            print(indent);
     for (int h=0; h< indent+1; h++){

       print(" ");}
      print(ID + ", " + texte + ", ");
      list_node_rec(nouveauNoeud );
      indent--;
      //print("\n");
    }
  }
}
String calcul_indentation(int indent) {​​
  String indentationTemp="";
  for (int j=1; j<indent; j++) {
    indentationTemp+="    ";
  }

  return indentationTemp;
}


le fichier Smag0versrdf.mm peut être vu /modifié grace à l'application Freemind

Derniers test d'interface, parsing MindMap en RDF, parsing ontologie owl, et igeo avec Processing



voir en détail le fichier Freemind dans le data du "mm_vers_rdf_28-10" pour plus de détails 

01/10/2014

Android , Fuseki & RDF. Utilisation de APPINVENTOR 2 pour envoyer des triplets au serveur Fuseki

Pour rappel :
Le but est de faciliter l'échange d'information entre les différents objets connectés.
On utilise un serveur Fuseki. Le serveur fuseki permet de stocker les informations sous forme de triplets  Sujet/propriété/Objet comme par exemple  ("Voiture" "couleur" "rouge")
voir RDF / web sémantique / Jena / Fuseki ... pour plus d'infos sur le sujet.

pour résumer : RDF permet aux machines d'inférer ou de déduire des informations qui n'existent pas , à partir des relations entre les informations qui existent.

Dans le cadre du projet, nous avons besoin d'un serveur où sont partagées les informations.
Attention, les données ne sont pour l'instant pas sécurisées et tout le monde peut y mettre / remplacer, effacer tout et n'importe quoi.
Ce serveur est un peu un tableau blanc où chacun peut poser tout type d'information.

Le serveur est accessible via l'adresse : http://fuseki-smag0.rhcloud.com

pour consulter les informations qui y sont présentes, vous pouvez utiliser :
-  les formulaires en cliquant sur "Control Panel", choisissez le dataset "ds" puis cliquez sur "Select".
ensuite dans la zone de texte "Sparql Query" saisissez la requete suivante :

select * WHERE { ?s ?p ?o} LIMIT 100

puis dans Output, choisissez "xml"
cliquez ensuite sur "Get Result"

ceci vous affiche  100  informations
On trouve des infos pour faire des requetes sparql un peu partout : exemple là http://rdf.myexperiment.org/howtosparql?page=Using+the+SPARQL+Endpoint#

- ou directement :
http://fuseki-smag0.rhcloud.com/ds/query?query=select+*+WHERE+%7B%3Fs+%3Fp+%3Fo%7D&output=xml&stylesheet=%2Fxml-to-html.xsl


Depuis un bout de temps, je cherche le moyen d'envoyer des informations au format RDF sur ce serveur depuis mon smartphone Android pour pouvoir transmettre des informations au système Smag qui est sensé gérer les objets connectés que nous aurons dans nos habitations.

Plusieurs tests avec APDE, androjena, arqoid, (voir articles précédents...) mais je ne trouve pas ce qu'il faut, car l'utilisation de Jena plante les applis android

Par contre avec Appinventor j'ai un début de solution.
Le serveur Fuseki, n'acceptant que les requetes Post ou Put pour updater les informations, il a fallu décortiquer la requete http :

PREFIX dc: <http://purl.org/dc/elements/1.1/>
 PREFIX ns: <http://example.org/ns#>
 INSERT DATA {
 GRAPH <http://example/bookStore> {
  <http://example/book14>  ns:price  6 }
 }


Pour tester, modifier l'appli, vous devez télécharger ce fichier : https://drive.google.com/file/d/0B0zEK4yLB5C6cTZvN01jemQ5bHM/edit?usp=sharing

et l'importer dans Appinventor : http://ai2.appinventor.mit.edu/

Reste maintenant à récupérer les Prefix, et proposer une liste de propriétés courantes, récupération des infos, recherches dans la base... modification des infos, et vote pour chaque info, pour valider leur véracité, sécurisation des données perso.

un coup de main pour l'utilisation de Appinventor ou de ce fichier ? n'hésitez pas à laisser un message

15/09/2014

serveur Fuseki accessible depuis un smartphone Android grâce à Apde

Développé sur mon staraddict 4 avec Apde ( voir sur Google play). Les librairies que j'ai pu trouver ne sont pas compatibles avec Android ou Apde , j'ai donc utilisé http de apache ( androjena, rdfonthego, microjena)
Nota : le code est brut et pas nettoyé, avec tous les essais.
Nota 2 : pour insérer une information, modifiez la requête update , par exemple la ligne commençant par : " update+="smag:Robokaze"

Nota 3: pour en savoir plus sur Rdf et la manière de stocker les informations :
https://plus.google.com/114521704339515532783/posts/jcwovt7vTsZ


Pour enregistrer des infos sur le serveur :



import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;



import android.view.inputmethod.InputMethodManager;

import android.content.Context;

//public class RequestParamExample {
//public static void main(String[] args) {

// }
String message;
String update;
 HttpClient httpclient;


void setup(){
  background(0);

  try {
  update="PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ";
update+="PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>" ;
update+="PREFIX smag:   <http://smag0.blogspot.fr/NS/>";
update+="PREFIX zoo:   <http://example.org/zoo/>";
update+="PREFIX owl: <http://www.w3.org/2002/07/owl#>";
update+="PREFIX ex: <http://example.org/>";

update+="INSERT DATA {";
update+="GRAPH <http://smag0.blogspot.fr/GraphTest>{";

update+="smag:Robokaze    rdf:type         smag:Site .";
update+="smag:Robokaze   smag:objectif         'un site de vente revente piece detachees , pour robots, et objets connectes' .";
update+="ex:cat     rdfs:subClassOf  ex:animal .";
update+="zoo:host   rdfs:range       ex:animal .";
update+="ex:zoo1    zoo:host         ex:cat2 .";
update+="ex:cat3    owl:sameAs       ex:cat2 .";

update+="}}";

 // message="";
 //String message;
  //HttpParameterPost();



message=new String("Votre ecran peut vous apparaitre tout noir,\n a la premiere connexion au serveur, \n merci de patienter quelques dizaines de secondes au plus \n");

//private static void HttpParameterPost() {
  httpclient = new DefaultHttpClient();
 
    HttpPost httpPost=new HttpPost("http://fuseki-smag0.rhcloud.com/ds/update?");
  // HttpPost httpPost = new HttpPost("http://192.168.1.52:3030/ds/update?");
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
  //  nameValuePairs.add(new BasicNameValuePair("update", "INSERT {<bola> <bolb> <bolc>} WHERE {?s ?p ?o}" ));
   nameValuePairs.add(new BasicNameValuePair("update", update));
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    System.out.println("executing request " + httpPost.getRequestLine());
    HttpResponse response = httpclient.execute(httpPost);
    HttpEntity resEntity = response.getEntity();
    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    if (resEntity != null) {
      System.out.println("Response content length: " + resEntity.getContentLength());
      System.out.println("Chunked?: " + resEntity.isChunked());
      String responseBody = EntityUtils.toString(resEntity);
      System.out.println("Data: " + responseBody);
     message+= "Response content length: " + resEntity.getContentLength()+"\n";
      message+="Chunked?: " + resEntity.isChunked()+"\n";
    //  String responseBody = EntityUtils.toString(resEntity);
      message+="Data: " + responseBody+"\n";
  // message="45" ;
    }
   // EntityUtils.consume(resEntity);
  }
  catch (Exception e) {
    System.out.println(e);
   message+=e;
  }
  finally {
    // When HttpClient instance is no longer needed,
    // shut down the connection manager to ensure
    // immediate deallocation of all system resources
    httpclient.getConnectionManager().shutdown();
  }
}



void draw(){
  text(message,100,100);

}





 void showVirtualKeyboard()

{

  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

  imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);



}

 void hideVirtualKeyboard()

{

  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

  imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

}




pour lire des infos sur le serveur : 


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.util.Scanner;

//arqoid

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.reasoner.Reasoner;
import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;
import com.hp.hpl.jena.reasoner.rulesys.Rule;
//import com.hp.hpl.jena.update.*;
import com.hp.hpl.jena.sparql.core.Prologue;



String err="";
String url="";
//UpdateRequest update;
DefaultHttpClient httpClient;
HttpEntity   entity;
HttpResponse response;
String reponse;
PImage img;
String url_img="";
HttpEntity   entity_img;
HttpResponse response_img;
String reponse_img;


void setup() {
  background(0);
  String req_insert_prefix="PREFIX+ns:+<http://example.org/ns#>";
  req_insert_prefix+="PREFIX dc: <http://purl.org/dc/elements/1.1/>";
  req_insert_prefix+="PREFIX d: <http://example.com/ns/data#>";
  req_insert_prefix+="PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>";

  String req_insert="INSERT DATA";
  req_insert+="{ GRAPH <http://example/bookStore> { ";
  req_insert+="<http://example/bidule>  ns:price  42 ." ;
  //req_insert+="d:i1 rdfs:label \"one\" .";
  //d:i2 rdfs:label "two" .
  req_insert+=" }}";

  //url="http://fuseki-smag0.rhcloud.com/ds/update?update="+req_insert_prefix+req_insert;
  //text(url,20,200);
  //

  //insert();
  //img = loadImage("image.jpg");
  img=loadImage("http://3.bp.blogspot.com/-MbiBWE4xcD0/Ux90q1F1RsI/AAAAAAAAAS8/hRpHBM5E4PE/s1600/Rover_5421698457340622361.JPG" ) ;
 // img=loadImage("http://88.142.232.252:8090/?action=stream");
  /*
try{
   img=loadImage("http://88.142.232.252:8090/?action=stream");

 
   }
 
   catch( Exception e ) {
   e.printStackTrace();
   err+=e.toString();
   text(e.toString(), 100, 200);
   }
   */
  //String url="http://127.0.0.1:8080" ;
//String url="http://88.142.232.252:3030/ds/query?query=construct+where+%7B%3Fs+%3Fp+%3Fo%7D";
 String url="http://fuseki-smag0.rhcloud.com/ds/query?query=construct+where+%7B%3Fs+%3Fp+%3Fo%7D";
  //  String url="http://fuseki-smag0.rhcloud.com/ds/query?query=select+*+where+%7B%3Fs+%3Fp+%3Fo%7D";
  //  String url = "https://www.google.fr/search?q=test";
  //  https://www.google.fr/search?site=&source=hp&ei=PQX2U5qfMdPY0QXP_IGYAg&q=test&oq=test&gs_l=mobile-gws-hp.3..35i39j0l4.2250.2976.0.3886.6.5.1.1.1.0.168.532.0j4.4.0....0...1c.1.51.mobile-gws-hp..1.5.457.3.BSrYBhzULXU
  text(" Recuperation des informations depuis :",100,100);
  text(url,100,120);

    try {
        httpClient = new DefaultHttpClient();
        HttpGet          httpGet   = new HttpGet( url );
    //  ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(2);
    //    nameValuePairs.add(new BasicNameValuePair("q", "value1"));
    //   nameValuePairs.add(new BasicNameValuePair("param2", "value2"));
    //   httpGet.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        // println( "executing request: " + httpPost.getRequestLine() );
       response = httpClient.execute( httpGet );
   
       entity   = response.getEntity();

     if ( entity != null ) {
   
      //   String reponse;
      //  entity.writeTo( reponse );
      // String reponse=new String(entity.getContent());
       reponse = new Scanner(entity.getContent(), "UTF-8").useDelimiter("\\A").next();
    }
      //  if ( entity != null ) entity.consumeContent();

        // When HttpClient instance is no longer needed,
     // shut down the connection manager to ensure
       // immediate deallocation of all system resources
    //   httpClient.getConnectionManager().shutdown();
                // When HttpClient instance is no longer needed,
     // shut down the connection manager to ensure
       // immediate deallocation of all system resources
    //    httpClient.getConnectionManager().shutdown();
       
  }
 

    catch( Exception e ) {
    e.printStackTrace();
    err+=e.toString();
    text(e.toString(), 100, 100);
  }

      // When HttpClient instance is no longer needed,
   // shut down the connection manager to ensure
     // immediate deallocation of all system resources
   httpClient.getConnectionManager().shutdown();
     
    //   exit();
}
void draw() {
  background(0);
  text("Smag", displayWidth-50, 10);
  text(url, 20, 200);
  text(err, 10, 100);
  // text(update.toString(),50,100);

        if ( entity != null ) {

    text("----------------------------------------", 10, 10);
    text( response.getStatusLine().toString(), 10, 20);
    text("----------------------------------------", 10, 30);
   
      //   String reponse;
    //  entity.writeTo( reponse );
    // String reponse=new String(entity.getContent());
    //   try{ String reponse = new Scanner(entity.getContent(), "UTF-8").useDelimiter("\\A").next();

    text(reponse, 10, 100);
    //   }
    //    catch( Exception e ) {
    //  e.printStackTrace();
    //  err=e.toString();
    // text(e.toString(), 100, 100);
    //}

    // Displays the image at its actual size at point (0,0)
    // image(img, 0, 0);
    // Displays the image at point (0, height/2) at half of its size
    image(img, 0, displayHeight-100, img.width/2, img.height/2);
  }
}

void insert() {

  // update = UpdateFactory.create("");
  //  UpdateProcessRemote riStore = (UpdateProcessRemote) UpdateExecutionFactory.createRemote(update, "http://myendpointuri");
  // riStore.execute();
}

// The following short JSON file called "data.json" is parsed // in the code below. It must be in the project's "data" folder. // // { // "id": 0, // "species": "Panthera leo", // "name": "Lion" // } JSONObject json; void setup() { json = loadJSONObject("data.json"); int id = json.getInt("id"); String species = json.getString("species"); String name = json.getString("name"); println(id + ", " + species + ", " + name); } // Sketch prints: // 0, Panthera leo, Lion

01/09/2014

Explorer les données d'un serveur fuseki/rdf

Dans Chrome Web Store, ajouter l'application " OpenLinkDataExplorer", lancer l'appli
ensuite dans la ligne  "Data Source URI", saisissez l'adresse de requete de votre serveur Fuseki sous la forme :
http://fuseki-smag0.rhcloud.com/ds/query?query=select+*+where%7B%3FP+%3FS+%3FO%7D

22/08/2014

SWIP: Semantic Web In the Pocket

http://swip.inrialpes.fr/

insertion d'information dans un serveur sparql fuseki avec Processing u avec curl

import com.hp.hpl.jena.update.UpdateRequest;
import com.hp.hpl.jena.update.*;


UpdateRequest ur = new UpdateRequest();
UpdateProcessor up;
String  service ="http://127.0.0.1:3030/ds/update";

void setup(){
  ur.add("INSERT {<bola> <bolb> <bolc>} WHERE {?s ?p ?o}");
  up=UpdateExecutionFactory.createRemote(ur,service);
  up.execute();
 
}

void draw(){
 
}


AVEC CURL:

curl --data 'update=PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex:   <http://example.org/>
PREFIX zoo:   <http://example.org/zoo/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

INSERT DATA {

ex:dog1    rdf:type         ex:animal .
ex:cat1    rdf:type         ex:cat .
ex:cat     rdfs:subClassOf  ex:animal .
zoo:host   rdfs:range       ex:animal .
ex:zoo1    zoo:host         ex:cat2 .
ex:cat3    owl:sameAs       ex:cat2 .

}' http://192.168.1.52:3030/ds/update




sources:
http://answers.semanticweb.com/questions/20541/fuseki-update-sparql-query-error
https://baach.de/Members/jhb/getting-started-with-jena-fuseki-and-owl-reasoning

Re: remote sparql insert from jena

http://mail-archives.apache.org/mod_mbox/jena-users/201209.mbox/%3COFAB6B5A21.2EBF2448-ONC1257A7E.007AEBC5-C1257A7E.007BB147@netage.nl%3E

06/08/2014

Un autre probleme

[ ] 1 créer une meta appli qui recense et résout les problèmes avec sma et rdf/owl
[ ] Pb1 v Trouver une place dans ce quartier. Requis : voiture, conducteur, position, pcduino, caméra, carte. Caméra branchée sur chaque voiture, filme le flux d'images dans la ville, et detecte  les places libres ( analyse opencv). Position des Places libres inventoriées dans base centralisée ( serveur fuseki ) . redescente des places avoisinantes sur les applis mobiles smag qui sont en mode recherche de place avec carte et itinéraire

Partagée depuis Google Keep

03/07/2014

exemples d'informations à intégrer au serveur fuseki. fichier txt crée grace à sl4a et php4android

ranger|voiture|salon|cuisine
range|patate|cuisine|cellier
aller chercher|ma guitare|dans le salon|
manger a versaille ce midi
creer une plateforme d'enregistrement de concert
:utilisateur je :action cherche :objet "un logement" :ou "entre 8ème et Genay" "+ 10 km" :nb_personnes (:bag 6| 8) : loyer (<600 | < 1000)
tondre la pelouse
le chateau des robots ou plutot l'universite des robots. se renseigner sur ce qu'est cette grosse baraque a cote du boulot
nom de l'appli : mon big data
ou mon little data little D
apprentissage progressif : premiere semaine, mettre des marqueurs sur les portes pour mieux les reperer. images crytéees sotckées sur serveur ou dabs l'environnement local . traitement fourni par un service web. pour elaborer cartographie, panorama 360 . orientation en lui indiquant le nord avec un marqueur ou positionnement du batiment sur un carte. permet de designer les murs et ouvertures dans une piece. comme diagnostic dpe: mur avec entree,A , mur à gauche B, mur en face C... et premiere ouverture sur ce mur C1, deuxieme: C2...
service de traduction d'application anglaise en rdf puis en francais et autres langues
range|guitare|lit|fenetre
le glaciet place sathonay est-il ouvert ? sera -t il ouvert ce soir à 20h? j'aimerais reserver une table pour deux. y'a t'il de la glace au café ? à la rose ? au blinis ?
Récupérer plus d'infos sur la grève SNCF pour se faire un avis
Récupérer Plus d'informations sur la grève des intermittents
loi de transition energetique
mille feuille territorial
ou puis je acheter un bon roti à st just ?
decortiquer les 3 reformes votées le 18/6
gerer le cas d'un utilisateur qui propose une resdource. qui recherche une ressource
pochettino
confrerie de traduction de doc, livres, theses en anglais + autres langues
trier cette liste d'info du plus recent au plud ancien comme bang shee postit, virer les blancs. ajouter système de confidentialité. de partagr et de vote d'appreciation, de degré d'accord
ressource à recenser: miel de fin de saison ( ssscience et vie , alsace, sirop m&m's)
mon tel diffuse en bluetooth/ wifi ma carte de visite avec mes projets, mes affinités, mes loisirs, en fonction du contexte: soirée bar, journée de boulot, dans le bus. infos stockées en rdf.
nlp (natural langage processing) pour interpreter les intentions des utilisateurs et les transformer en rdf. rdf reasonning avec jena. machine learning ( apprentissage) avec OpenCv. reconnaissance visages pour personnalisation , objets et portes pour trouver son chemin d'une piece à l'autre avec OpenCv.
test date|1403278317
test|gf|gcd|gf
testid:ts 1403295658:deviceId 351895057157404
texte avec time et id :ts 1403295732 :deviceId 351895057157404
par une meilleure transmission /; stockage de l'information, permettre à chacun de prendre ses deux jours de congé par semaine comme il le souhaite. au sein des entreprises, mais aussi au sein des ecoles. des acces aux cours plus ouverts sur le monde, avec skype de ceux qui sont en voyage. moins de monde sur la route, moins de bouchons matin et soir. moins de stress pour tt le monde :ts 1403337760 :deviceId 351895057157404
un camping car ou camion atelier fablab ou une flotte de camions qui sillonne la france pour informer sur les objets connectés. former sur pcduino / processing / enseigner python / ruby, aux enfants / ados / adultes subventionné par conseil general, gd lyon, dans les ecoles, centres de loisirs, le soir pour adulte. fablab ambulant. comme l'atelier mobile de local motors :ts 1403358012 :deviceId 351895057157404
creer un journal en ligne / papier : le favington post. diffusant les nouvelles du futur : un camion fablab se renverse sur l'A7, defaillance du systeme de navigation due aux interferences, le systeme est en revision . inauguration du chateau des robots, u nouveau service public de recherche de solution / atelier vient d'ouvrir lyon 5 eme :ts 1403509726 :deviceId 351895057157404
suivre de pres l'evolution de la reforme de l'evaluation à l'ecole :ts 1403588203 :deviceId 351895057157404
:info test de saisie d'une info en turtlext ( turtle extend ou turtle entendu) :ts 1403595311 :deviceId 351895057157404
:info turtlext : une extension du langage turtle qui consiste à inserer les notions les unes a la suite des autres en faisant preceder ces notions par ":nom_de_notion" et d'un espace :ts 1403595531 :deviceId 351895057157404
:info attention : pas d'espace entre les 2 points et le nom de notion. par contre dans le corps du texte, bien veiller à mettre un espace devant et un après pour que le texte qui suit ne soit pas considéré comme une nouvelle notion . faire gaffe aux smileys :-) :ts 1403595799 :deviceId 351895057157404
:info ces infos sont ensuite transmises à un serveur fuseki qui les traite ( nlp, les interprete, essai de trouver des liens avec les infos déjà existantes et les stocke, effectue les raisonnements necessaires , trie par perspicatité, detecte doublons et conflits et les stocke :ts 1403596159 :deviceId 351895057157404
:info a vendre " :objet voiture :annee 1995 :couleur jaune :kilometrage environ 200 000 km :prix 1000 € :portes 3 :places 5 :lieu Lyon :telephone utiliser l'iddevice ou 0671578914 :etat contrôle technique ok" :ts 1403606734 :deviceId 351895057157404
:info etre informé en temps reel des informations liees à celkes qui m'interessent ou que je diffuse par notification sur mon smartphone. possibilité de filtrer, de qualifier les infos comme étant de la publicité , du spam, des intox,de noter son degré d'accord, d'appreciation pour affiner l'information reçue, avec possibilité de rechercher toutes les infos :ts 1403607272 :deviceId 351895057157404
:info Transmaster pour transmettre les informations à ses collègues lors d'un départ à la retraite ou d'un changement de service :ts 1403675373 :deviceId 351895057157404
:info transmastet utilisable ensuite pour le transfert de competence vers les robots :ts 1403675406 :deviceId 351895057157404
:info france intet le 25/6/14. la france dans 10 ans . petizani. chez fayard :ts 1403677377 :deviceId 351895057157404
:info reconcilier les citoyens avec les administrations. confiance dans les structures qui gouvernent :ts 1403677538 :deviceId 351895057157404
:info france strategie, jean pisani ferry :ts 1403677957 :deviceId 351895057157404
:info pouvoir reserver une place de parking proche de telle adresse. appli mobile proposée par les villes , soutien par région( soucis de polution qd on tourne pour trouver une place) meilleure gestion du parc de stationnement. proposer tarif reduit pour parking sous terrain vides afin d'optimiser. ds la rue affichage des places reservées et à quelle heure ou par l'appli. panneau : attention cette rue comporte des places de parking reservées pour les utiliser veuiller consulter leur disponibilité sur la borne ou grace à l'application :ts 1403679643 :deviceId 351895057157404
:info une fois les infos enregistrées en turtlext les transmettre au serveur fuseki pour traitement en veillant à la confidentialité , puis traitement pour transformation en rdf sur le serveur ou traitement en local si confidentialité nécessaire non assurée par le serveur :ts 1403688406 :deviceId 351895057157404
:info signaler une fuite sur un tuyau d'eau servant pour des travaux rue villon. inciter les gens à faire preuve de civisme lorsqu'ils s'approprie le bien commun. doit-on verbaliser . est ce de la delation. :ts 1403695514 :deviceId 351895057157404
:info test localise :ts 1403797652 :deviceId 351895057157404
:info test :ts 1403798696 :deviceId 351895057157404
:info test :ts 1403799059 :deviceId 351895057157404
:info test :ts 1403800530 :deviceId 351895057157404
:info un robot qui gere l'equilibre du velo+ eventuellement pedalage , freinage pour permetttr à Michel S. d'ExtraSp. de faire la rando Bordeaux Paris. ou en gyroscope :ts 1403846435 :deviceId 351895057157404
:info maison connectée : homekit(apple) , wink hub, nest ( developper.nest.com) :ts 1403856622 :deviceId 351895057157404
:info test :ts 1403866862 :deviceId 351895057157404 :glien
:info test :ts 1403866894 :deviceId 351895057157404 :glien
:info tedt :ts 1403878520 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.7474329,4.8634261
:info bidule :ts 1403878599 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.7477706,4.8632763
:info trst :ts 1403881177 :deviceId 351895057157404 :glien
:info gh :ts 1403881213 :deviceId 351895057157404 :glien
:info test :ts 1403967931 :deviceId 351895057157404 :glien
:info blatest :ts 1403967970 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.755152,4.8188729
:info vu dans un journal, l'interview d'un chanteur utilisant des robots comme musiciens!. le rythme et la sonorité du morceau sont le fruit d'un apprentissage de la part des robots par réglages successifs comme le thermostat Nest. :ts 1404032464 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.9513485,4.7222175
:info difficile de lutter contre la betise, on peut juste la laisser croitre jusqu'à ce qu'elle s'épuise, tout en essayant de limiter les dommages co-lateraux :ts 1404105956 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.7506693,4.8597579
:info think tank imaginove " introduction aux jouets connectés" :ts 1404128470 :deviceId 351895057157404 :glien
:info think tank imaginove intro jouets connectés :ts 1404128562 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.75708299,4.89853413
:info creer un personnage smag qui puisse representer le systeme :ts 1404129754 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.7553546,4.8967926
:info meuble a vendre. en cas de demenagement. les gens peuvent demander à ce que le service vienne chercher son meuble pour le vendre. 10% du prix de commission + 1€ par jour de stockage. au bout d'un certain délai, le prix baisse d'un euro / jour. le service peut réparer, décorer, customiser, renover le meuble avec l'accord du vendeur. :ts 1404213427 :deviceId 351895057157404 :glien
:info pourquoi j'ai eté embauché pour chapoter le projet des drones suiveurs ? eh bien je suppose que c'est parce que j'étais garde du corps d'un couple japonnais à lyon qui se balladait tjrs en coupé mercedes et que je devais les suivres à la culotte lors de tous leurs deplacements :ts 1404226164 :deviceId 351895057157404 :glien
:info intégrer à testGui3 ( Processing pc de co) la possibilité de parser un fichier tel que celui-ci et de l'ajouter à un serveur fuseki proposant la confidentialité. ou parsing géré par le serveur fuseki :ts 1404245201 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.755182,4.8188387
:info histoire motard : et pourquoi je ne bosse plus poir eux ? parce que mr était trop naïf et mme trop petillante. non pas qu'ekle soit trop volage, mr aussi l'etait :ts 1404281296 :deviceId 351895057157404 :glien
:info distributeur / recycleur aquacell :ts 1404297999 :deviceId 351895057157404 :glien
:info les infos doivent etre stockées dans mon telephone et securisées / avec sauvegarde securisée, puis partagées en fonction de leur scope . scope : perso, groupe, boulot, amis, voisins, collègues, famille directe, famille etendue, :ts 1404298778 :deviceId 351895057157404 :glien
:info Contrairement à toute attente le sydteme Smag a permis progressivement à plusieurs personnes de se libérer. libérer des complexes, des préjugés. Au départ bati pour garantir une confidentialité , on s'est rendu compte que les personnes honnetes qui "n'avait rien à cacher" , ne cachaient effectivement rien et avaient décidé de liberer toutes les informations les concernant. Certe, il ne recherchaient ni l'anonymat ni la discretion, mais ils furent tellement nombreux à se liberer en même temps, que personne n'eu le courage d'inspecter ces données pour espionner ces gens. qu'importe, il y avait si peu d'info supplémentaire qui nebpouvait être déduite des autres infos . :ts 1404367176 :deviceId 351895057157404 :glien http://maps.google.com/maps?q=45.7551849,4.8188502
:info 3 tutos a faire : acces à un endpoint sparql , serveur fuseki depuis processing, création d'un système multiagents avec janus ( sarl ? ) et processing , utilisation de g4p avec processing en français :ts 1404411336 :deviceId 351895057157404 :glien

exemples d'informations à intégrer au serveur fuseki. fichier txt crée grace à sl4a et php4android

21/06/2014

infos a inserer a openshift

ranger|voiture|salon|cuisine
range|patate|cuisine|cellier
aller chercher|ma guitare|dans le salon|
manger a versaille ce midi
creer une plateforme d'enregistrement de concert
:utilisateur je :action cherche :objet "un logement" :ou "entre 8ème et Genay" "+ 10 km" :nb_personnes (:bag 6| 8) : loyer (<600 | < 1000)
tondre la pelouse
le chateau des robots ou plutot l'universite des robots. se renseigner sur ce qu'est cette grosse baraque a cote du boulot
nom de l'appli : mon big data
ou mon little data little D
apprentissage progressif : premiere semaine, mettre des marqueurs sur les portes pour mieux les reperer. images crytéees sotckées sur serveur ou dabs l'environnement local . traitement fourni par un service web. pour elaborer cartographie, panorama 360 . orientation en lui indiquant le nord avec un marqueur ou positionnement du batiment sur un carte. permet de designer les murs et ouvertures dans une piece. comme diagnostic dpe: mur avec entree,A , mur à gauche B, mur en face C... et premiere ouverture sur ce mur C1, deuxieme: C2...
service de traduction d'application anglaise en rdf puis en francais et autres langues
range|guitare|lit|fenetre
le glaciet place sathonay est-il ouvert ? sera -t il ouvert ce soir à 20h? j'aimerais reserver une table pour deux. y'a t'il de la glace au café ? à la rose ? au blinis ?
Récupérer plus d'infos sur la grève SNCF pour se faire un avis
Récupérer Plus d'informations sur la grève des intermittents
loi de transition energetique
mille feuille territorial
ou puis je acheter un bon roti à st just ?
decortiquer les 3 reformes votées le 18/6
gerer le cas d'un utilisateur qui propose une resdource. qui recherche une ressource
pochettino
confrerie de traduction de doc, livres, theses en anglais + autres langues
trier cette liste d'info du plus recent au plud ancien comme bang shee postit, virer les blancs. ajouter système de confidentialité. de partagr et de vote d'appreciation, de degré d'accord
ressource à recenser: miel de fin de saison ( ssscience et vie , alsace, sirop m&m's)
mon tel diffuse en bluetooth/ wifi ma carte de visite avec mes projets, mes affinités, mes loisirs, en fonction du contexte: soirée bar, journée de boulot, dans le bus. infos stockées en rdf.
nlp (natural langage processing) pour interpreter les intentions des utilisateurs et les transformer en rdf. rdf reasonning avec jena. machine learning ( apprentissage) avec OpenCv. reconnaissance visages pour personnalisation , objets et portes pour trouver son chemin d'une piece à l'autre avec OpenCv.
test date|1403278317
test|gf|gcd|gf
testid:ts 1403295658:deviceId 351895057157404
texte avec time et id :ts 1403295732 :deviceId 351895057157404
par une meilleure transmission /; stockage de l'information, permettre à chacun de prendre ses deux jours de congé par semaine comme il le souhaite. au sein des entreprises, mais aussi au sein des ecoles. des acces aux cours plus ouverts sur le monde, avec skype de ceux qui sont en voyage. moins de monde sur la route, moins de bouchons matin et soir. moins de stress pour tt le monde :ts 1403337760 :deviceId 351895057157404
un camping car ou camion atelier fablab ou une flotte de camions qui sillonne la france pour informer sur les objets connectés. former sur pcduino / processing / enseigner python / ruby, aux enfants / ados / adultes subventionné par conseil general, gd lyon, dans les ecoles, centres de loisirs, le soir pour adulte. fablab ambulant. comme l'atelier mobile de local motors :ts 1403358012 :deviceId 351895057157404

19/05/2014

Re: livre-rdf-introduction


Pas facile d'ecrire un livre en CHOUET.

Le CHOUET cette nouvelle langue que le gouvernement veux nous imposer, par traduction primitive du langage OWL, une extension du langage RDF(Resource Deqcription Framework) afin d'être compris par les machines .

C'est certainement plus facile pour les jeunes, ceux de la génération Y et après, ceux qui ont l'habitude de communiquer par sms, par phrases courtes ou même par abréviations.

Ce langage sms qui généralement provoque chez leurs parents l'incrédulité et l'incompréhension la plus totale...

On croyait que ça s'arreterait rapidement... On avait passé le cap des premiers LOL et autres MDR. On croyait que c'était juste une mode entre "d'jeuns" comme le verlan que l'on avait infligé nous même à nos parents... On avait même accepté à l'époque de passer pour des "boulos" puisque les "has-been" étaient démodés depuis belle lurette . On était surpris par les dernieres tendances "hypster", qui d'après ce que j'en comprenais à l'époque ne se voulait d'aucune mode mais ressemblait un peu à toutes les autres sans accepter d'en avoir l'air...
Mais là... on atteignait les sommets :  le "français" était en phase de réécriture. Exit la grammaire et la conjugaison comme nous les avions apprises à l'école primaire...

Faute à qui ? au différents mooc sensés fournir gratuitement des cours à chacun permettant ainsi de se spécialiser dans un domaine précis sans aucune nécessité de maitriser les " matières généralistes" ...

On aurait dû s'en douter depuis longtemps... déjà quand Microsoft, Google et les autres se sont mis d'accord  pour adhérer aux normes du schemas.org. Deux dinosaures comme ça qui s'intéressent à une techno... ce n'est pas sans signification... Et le W3C en première ligne... ce n'est pas rien non plus !

Comment ça marche le CHOUET ?

Le pire c'est qu'il n'y a rien de plus simple et que l'on peut TOUT décrire, puisque RDF est un métalangage, on peut même s'appuyer sur les description faites par les autres pour éclaircir et préciser nos intentions. Par exemple, si je veux décrire une personne, je pourrais m'appuyer sur l'URI : https://schema.org/Person qui définit déjà un certain nombre de propriétés afférentes à une personne, comme par exemple "birthDate" qui correspondra à la date de naissance de cette personne et sera défini à cette adresse : https://schema.org/birthDate.

Ces URI (ou adresses uniques) peuvent être utilisées pour donner plus d'informations sur le contenu des pages web comme le préconise schemas.org, mais également pour décrire, partager, fusionner, et inférer sur des données disparates ou venant d'horizon ou de points de vue différents. Ces données peuvent être regroupées sous forme d'ontologies ( une ontologie représentant le vocabulaire d'un domaine et les relations entre ses concepts)

D'autres ont également senti le vent tourner et s'y sont mis à l'époque GoodRelations, par exemple pour le e-commerce s'appuyant eux -mêmes sur d'autres ontologies comme ou vocabulaires comme FOAF.

Comment utiliser le CHOUET ?

Comment je m'y suis mis ? tout bêtement... un enfant qui peut prononcer trois mots l'utilise déjà...

06/05/2014

serveur Fuseki sur le pcduino

ça fait un bout que je suis pas passé.. M'enfin !!!
La livraison du pcDuino a pas mal tardé, ensuite les vacances...

Mais j'ai tout bien reçu (voir les articles précedents).
Quelques tests faits : installer vnc, librairie pyduino, brancher une caméra, une Led, (mon-club-elec.fr) , test des servos moteurs, et moteurs de déplacement (linksprite.com)...

Mais l'étape d'aujourd'hui concerne la mise en place d'un serveur fuseki afin de gérer la base de connaissance du robot

Fuseki :
sur le pcduino, decompresser le repertoire fuseki

Lancer fuseki au démarrage (modif du fichier autostart):
sudo geany /etc/xdg/lxsession/Lubuntu/autostart

ajouter une des deux  lignes suivante en fonction du mode de démarrage préféré :
- pour fuseki en mode non persistant pour faire des tests (en mémoire):
@/home/ubuntu/fuseki/fuseki-server --update --mem /ds

- pour fuseki en mode persistant pour que les données restent :
/home/ubuntu/fuseki/fuseki-server --update --loc=/home/ubuntu/fuseki/DEFAUT /ds
!!! pensez à créer le repertoire DEFAUT dans le repertoire fuseki et bien mettre un espace devant /ds qui défini le nom du dataset

(voir la doc de fuseki pour les différents modes de démarrage)


Le serveur Fuseki est accessible à l'adresse http://localhost:3030
on peut y uploader les fichiers de tests proposés sur le tutoriel Jena Sparql

aide pour construire les requetes Jena / Sparql : http://www.slideshare.net/rajighawi/java-and-sparql (diapo 5/26)

on peut même y accéder en mode distant, avec Processing et Jena
(modifier l'adresse : remplacez 10.42.0.1 par l'adresse de votre pcduino):


import java.io.Reader;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.ResultSet;
import javax.xml.transform.Result;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.ontology.OntModelSpec;


void setup() {
  /*
  http://host/dataset/query -- the SPARQL query endpoint.
   http://host/dataset/update -- the SPARQL Update language endpoint.
   http://host/dataset/data -- the SPARQL Graph Store Protocol endpoint.
   http://host/dataset/upload -- the file upload endpoint.
   */
  String endpoint = "http://10.42.0.1:3030/ds/query";
  String requete = "SELECT * WHERE {?S ?P ?O}";
  //String requeteJS = "SELECT ?x WHERE { ?x <http://www.w3.org/2001/vcard-rdf/3.0#FN> 'John Smith' }";
  // select-query
  QueryExecution qe = QueryExecutionFactory.sparqlService(endpoint, requete);
  //qe.setInitialBinding( );
  println (qe);
  ResultSet result = qe.execSelect();

  ////////////////////////:::::::::::::
 // Pour afficher les resultats deux solutions ResultSetFormatter.out(System.out, result); ou While / has next
   ResultSetFormatter.out(System.out, result);
  /*while (result.hasNext ()) {
    QuerySolution querySolution = result.next();
    println(querySolution);
  }*/
  //////////////////////////:::::::

  int numb = result.getRowNumber();
  println (numb);

  
}

void draw() {
}



ce sketch processing permet de visualiser les infos présentes sur le serveur Fuseki du pcduino. Pour une requête plus précise et notamment obtenir un graphe/model à la place d'un ResultSet, on devra utiliser Construst plutôt que Select qui retourne un tableau itérateur des solutions. http://jena.apache.org/tutorials/sparql_results.html

voir aussi les tutoriels Jena en français : http://jena.apache.org/tutorials/index.html

pour reinitialiser le serveur fuseki (effacer toutes les données) :
s-update --service http://localhost:3030/ds/update 'CLEARDEFAULT'






10/04/2014

Découverte et tutoriel de l'utilisation de Polarsys

Polarsys est basé sur Eclipse, développé par OBEO et semble , à première vue, proposer un outil de développement de systèmes embarqué, basé sur UML ou plutôt SysML , et devrait permettre le développement de systèmes complexes. Polarsys utilise pour ce faire le plugin Papyrus :
plus d'infos sur Polarsys : http://polarsys.org/ .

D'après la présentation, c'est un outil de développement OpenSource centré sur l'utilisateur, l'utilisateur devrait même pouvoir faire remonter, contribuer... c'est exactement ce qu'il nous faut pour Smag...
Présentation ici : http://wiki.eclipse.org/images/f/f9/Polarsys-Presentation_ERTSS-final.pdf

Voyons si Polarsys tiens ses promesses ...

Va-t-il nous permettre de modeliser le projet Smag0 ? Testons ce nouvel outil !

Sur le site de Polarsys, télécharger la version adaptée à votre OS, dézippez, lancez l'executable Polarsys.
Pour pouvoir tester, j'ai tenté de suivre la vidéo de présentation (dans About / Videos, sur le site de Polarsys , ou ici : http://www.youtube.com/watch?v=cslBl9cS3TM) .

Première chose : une fois Polarsys lancé, modifiez la perspective : Window / Show Perspective / Other / Papyrus.

Ensuite, le cadre Model Explorer semble vide... je teste d'installer les modules complémentaires de Papyrus ( dans  le menu Help/ Install Papyrus Additionnal Components. Une autre demande d'installation ( SVN est apparue lors de la création du premier projet, j'ai installé la dernière version de SVN . )

La doc de Polarsys ne semble pas très fournie, 
Voir aussi, la doc  de Papyrus hébergée par Eclipse : http://www.eclipse.org/papyrus/

31/03/2014

Creer une requête distante avec Jena sur un serveur Fuseki

source : https://www.cambridgesemantics.com/fr/semantic-university/sparql-by-example, slide 50depuis le répertoire jena/bat
GET -H "Accept: text/turtle" http://dbpedia.org/sparql

une requete directement dans la zone requete de fuseki :
SELECT *
 WHERE { ?subject ?p ?object }
ou avec les namespace :
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX example: <http://example.org/ns#>
SELECT *
 WHERE { ?subject ?p ?object }
dans un navigateur : 
http://fuseki-smag0.rhcloud.com/ds/query?query=%0D%0ASELECT+*%0D%0A%09WHERE+%7B+%3Fsubject+%3Fp+%3Fobject+%7D&output=text&stylesheet=
sous DOS : 
GET -H "Accept: text/turtle" http://fuseki-smag0.rhcloud.com/ds/query?query=%0D%0ASELECT+*%0D%0A%09WHERE+%7B+%3Fsubject+%3Fp+%3Fobject+%7D

27/03/2014

Réclamations, Doutes, Demandes

On est partis pour... Ok, si je considère... allez... que dans 20 ans tout sera connecté dans ma maison et branché sur internet et commandable par mon smartphone (ou autre...)
Un paquet de questions se posent ...
Parce qu'un projet comme ça pose beaucoup de problème : éthique, sécurité, confidentialité, ...

Si vous avez des doutes, des peurs, des requêtes, des oppositions, quand au projet, ... c'est normal, j'ai aussi souvent peur de ce que je ne connais pas ...

On va tenter de  trouver des solutions à ces questions :
- Les robots vont-ils donner plus de chômage ?
- Vais-je perdre mon boulot ? 
- Qui est responsable d'un robot qui commettrait un délit ?
- Comment être sûr que mes informations personnelles ne sont pas diffusées sur le Net ?
- Comment désactiver un robot qui se trouverait dans ma maison ... et que j'y ferais des trucs que je n'ai pas envie qu'il voie ?
- Comment être certain que le robot dont j'ai besoin sera disponible au moment où j'en aurai besoin ? 
- Où vont-ils se ranger dans ma maison ?
- Comment le robot qui me fera le café va t-il savoir que le matin je mets deux sucres dans mon café et que le soir je n'en met qu'un ?
... et toutes les autres questions que vous pourriez-vous poser...

 Je vous invite au "Café des prudents, sceptiques & des opposants" : le café PSO, la discussion y est libre et plus elle sera virulente, plus on pourra approfondir les sujets et trouver des solutions.
Et juste à côté du café PSO, on va ouvrir le café SPO... le "Café des Sujets, Propriétés, & Objets", ce café parlera plus de technique et de la manière dont l'information peut être stockée : sous forme de triplet avec  :
un sujet, une propriété, un objet.
pour faire simple : 
<voiture> <couleur><rouge>
<david><age><37>
<pcduino Rover><type><robot>
...

d'autres cafés sont en train d'ouvrir leurs portes... Tenez... par exemple, je vois là-bas M. GéoTrouvetout... c'est lui qui tient le "café DIMB & DUMB" , le café des DIYeurs, des inventeurs, des makers et des bricoleurs, il y a également Mr Holon qui tient le "café SMA" , le café des Agents et des Multi-agents..., et d'autres encore... des boutiques, aussi où les inventeurs et fabricants exposent leurs projets... que du beau monde... il y a même un espace réservé pour l'utilisation du projet Smag0 par les enfants...

Vous trouverez également LA MAISON DES DEFIS : c'est l'endroit où l'on réalise les trucs qui ne sont normalement pas réalisables...
Et la place reste ouverte... n'importe qui peut se poser sur un banc et lancer un sujet de conversation, une idée, un problème...


Pour afficher le groupe de discussion en pleine page, suivez ce lien

Le systeme multi-agent sous forme de holon

Trouvé ce texte de Descartes dans une des thèses :http://sebastian.rodriguez.free.fr/files/ThesisSRodriguez_print.pdf )
Les hommes sont les proies d'une si aveugle curiosité qu'ils conduisent souvent leur esprit par des chemins inconnus, et sans aucune raison d'espérer, mais seulement pour courir leur chance d'y trouver par hasard ce qu'ils cherchent ; comme quelqu'un qui brûlerait d'un désir si brutal de découvrir un trésor, qu'il ne cesserait de courir les rues ça et là, cherchant si par hasard il n'en trouverait pas un qu'un voyageur aurait perdu. C'est ainsi que travaillent presque tous les chimistes, la plupart des géomètres, et plus d'un philosophe ; et certes je ne nie point que parfois ils ne vagabondent avec assez de bonne fortune pour trouver quelque vérité ; je n'admets pas pour autant qu'ils en soient plus habiles, mais seulement plus chanceux. Il vaut cependant bien mieux ne jamais songer à chercher la vérité sur quelque objet que ce soit, que le faire sans méthode : car il est très certain que ces recherches désordonnées et ces méditations obscures troublent la lumière naturelle et aveuglent l'esprit ; et tous ceux qui s'habituent ainsi à marcher dans les ténèbres affaiblissent tant leur vue que par la suite ils ne peuvent plus supporter la lumière du jour ; l'expérience aussi le confirme, puisque nous voyons très souvent ceux qui ne se sont jamais souciés d'étudier porter des jugements bien plus solides et bien plus clairs sur ce qui se présente à eux, que ceux qui ont passé tout leur temps dans les écoles. DESCARTES

Les systèmes multi-agents : 

Qu'est ce qu'un système multi-agent ?
http://www.lirmm.fr/~ferber/publications/LesSMA_Ferber.pdf

Les méthodes de conception de systèmes multi-agent :

Diamond : http://tel.archives-ouvertes.fr/docs/00/18/90/46/PDF/These_Jean-Paul_Jamont_2005.pdf
Aspecs :  http://www.aspecs.org/Home ou en   Pdf

Un agent particulier, le holon : 

Holons dans les systèmes multi-agents[modifier | modifier le code]

Les systèmes multi-agents sont des systèmes composés d'entités logicielles autonomes. Ils sont capables de simuler un système ou de résoudre des problèmes. L'holon peut être vu comme une sorte d'agent récursif : un agent composé d'agents qui, a un niveau donné, a son propre comportement comme un conséquence partielle des comportements de ses composants5. Janus Multiagent Platform est un exemple de plate-forme logicielle capable de faire tourner des holons.
( source Wikipedia :
http://fr.wikipedia.org/wiki/Holon_(philosophie)#Holons_dans_les_syst.C3.A8mes_multi-agents )


Exemlpe de systèmes multi-agent :
Janus Project (Java) : http://www.janus-project.org/Home
Spade (Python) :
Jade (Java) :
Quelque chose en ruby, où autre ? faites-le nous savoir qu'on rajoute l'info .
Dans jade, spade, Janus, les agents respectent les normes de la FIPA pour les communications .
Les systèmes multi-agents ont l'air un peu veillots...
Pour se renseigner sur la programmation des agents :
https://www.google.fr/search?q=programmation+agent+java&oq=java+programmation+ag&aqs=chrome.1.69i57j0.8663j0j4&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8
Un autre type d'agent directement natif dans java (à voir si ça correspond?) : http://blog.xebia.fr/2008/05/02/java-agent-instrumentez-vos-classes/

Pour en savoir plus : 

https://www.google.fr/search?q=holon&oq=holon&aqs=chrome..69i57j0l5.1180j0j4&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8#q=holon+multi-agent