Affichage des articles dont le libellé est big data. Afficher tous les articles
Affichage des articles dont le libellé est big data. Afficher tous les articles

14/03/2016

Projet, idée, problème... partager sous forme de graphe, collaborer... et bien plus encore...

[ cet article fait partie de la série RDF FACILE - Mon petit BigData ]

Si mes explications ne sont pas claires, y'a toujours Wikipedia : https://fr.wikipedia.org/wiki/Resource_Description_Framework

Parti d'un projet un peu loufoque, il est vrai d'"un robot qui range ma chambre", il m'est très vite apparu que ce projet d'envergure n'était pas simple à partager avec mon entourage, et encore moins avec des inconnus.
Pour ce projet, j'avais imaginé non pas un robot qui rangerait, mais une multitude de robots, d'objets connectés, de modules qui s'entraideraient, collaboreraient.
Ils devaient pour ce faire s'échanger des informations dont la structure devaient être libre de toute modification au cours du temps, et chacun de ces robots aurait la possibilité de compléter, corriger les informations en fonction de ses capacités à capter l'environnement.
Au fil de mes recherches, le format qui me parut le plus adapté fut le RDF et je n'ai rien trouvé de mieux depuis, mais la discussion reste ouverte ;-)
RDF
Le rdf nous permet, en effet, à partir de notions toutes simples que tout le monde peut comprendre, de partager et d'échanger, de décrire tout et n'importe quoi... J'imaginais alors que pour que mes robots puissent comprendre leur environnement, il leur fallait déjà le connaître un petit peu... Mes quelques connaissances sur le Machine Learning en plein boom me laissant supposer que ces différents modules pourraient être dotés d'ici peu d'une quelconque intelligence artificielle répondant aux besoins qui leur seraient demandés : apprentissage, adaptation au contexte, à l'utilisateur...
La première notion essentielle, le triplet, est décrite un peu plus bas, mais avant ça, nous devons parler de l'information...
L'information
Si je vous dis "Voiture", tout le monde ou presque voit à peut près ce que cela représente. Méa Culpa à ceux qui pourraient penser que je les prends pour des ânes, mais les notions que l'ont va aborder ici, même si elles sont simples, imposent d'oublier tout ce que vous savez, ou plutôt de regarder le monde sous un autre angle, avec un peu plus de recul... Et de bien considérer que chacun peut posséder une vision différente de chaque concept, selon son origine, ses habitudes, sa culture...
Si cette fois, je vous dis "La Voiture de David", vous m'accorderez que l'information est plus précise... Dans "La Voiture de David est jaune et c'est une Opel Corsa", on aura encore plus d'informations...

Dans un premier temps, et pour se rapprocher de ce que tout le monde connait, ce que nous allons devoir faire (tant que le Natural Langage Processing n'est pas intégré au site), c'est de découper cette information... c'est un peu comme un tableau à deux lignes, avec dans la première ligne, les champs et dans la deuxième les valeurs.

champ 1 champ 2 champ 3 champ 4 ... ...
Ce que nous voulons décrire valeur 1 valeur 2 valeur 3 valeur 4 ... ...

Par exemple, pour décrire ma voiture, je pourrais utiliser le tableau suivant :
marque modèle couleur vitesse maxi propriétaire position actuelle
Voiture de David Opel Corsa Jaune 128 000 David Lyon

Comme vous avez pu le constater, les propriétés (champs dans le tableau) sont très libres et nous laissent le loisir de décrire tout et n'importe quoi... J'utilise ici le terme "propriété", et ceux qui sont allés voir la page Wikipédia sur le RDF aurons constaté qu'il est mentionné "prédicat"... Et bien les deux sont équivalents... et oui, faudra vous y faire...
Bon allez, je n'y tiens plus... passons au triplet...
Le Triplet
Repartons de l'exemple que nous avons pris précédemment : "La Voiture de David est jaune et c'est une Opel Corsa".
Nous avons découpé les informations de manière atomique dans le tableau à deux lignes... et bien ce tableau que n'importe qui est capable de reproduire, pour décrire n'importe quel concept, objet, procédure..., nous donne tout naturellement les triplets que nous attendions...
Le triplet se matérialise sous la forme de trois éléments :
  • un sujet : c'est la chose que l'on va décrire,
  • un objet : c'est une chose avec laquelle notre sujet est lié,
  • une propriété (ou prédicat) : c'est la nature de la relation entre le sujet et l'objet.

Ainsi notre tableau précédent nous donne les triplets suivants :
(Voiture de David, marque, Opel)
(Voiture de David, modèle, Corsa)
(Voiture de David, couleur, Jaune)
(Voiture de David, vitesse maxi, 128 000) --> enfin seulement dans les bonnes descentes...
(Voiture de David, propriétaire, David)
(Voiture de David, position actuelle, Lyon)
A quoi ça sert ? me direz-vous ? Ouais super... j'ai perdu 10 minutes à lire un truc qui ne sert à rien...
Meuh non, va voir plus bas !
Le Graphe
Bien maintenant que nous avons nos triplets, envoyons-les dans un "graphMaker" tel que http://smag0.meteor.com,

avec quelques exemples de fichiers rdf /ttl /owl (http://smag-smag0.rhcloud.com/dca/ontologies/)


On obtient alors le début d'un graphe : 


Mais les choses deviennent intéressantes lorsque l'on rajoute de nouveaux triplets :

(Voiture de David, type, Voiture)
(David, type, Personne)
(Lyon, type, Ville)
(Voiture, subclassOf, Vehicule)
(David, habite, Lyon)
(Paris, type, Ville)
(Madrid, type, Ville)
(Paris, capitale de, France)
(France, type, Pays)
(Soleil, couleur, Jaune)
(Lyon, sameAs, http://fr.dbpedia.org/page/Lyon)
...
Oulà ! STOP !, c'est quoi cette dernière ligne ??? !!! ce dernier "triplet", comme ils disent ???
Attention ! Là, on rentre dans le vif du sujet
Sur cette dernière ligne (Lyon, sameAs, http://fr.dbpedia.org/page/Lyon), qui et toujours un triplet, y'a un max de nouvelles notions, mais j'imagine que si vous avez tenu jusque là, vous êtes prêt à affronter la suite :
  • sameAs : la propriété "sameAs", comme vous pourrez le constater, si le RDF continue de vous intéresser, nous permet de spécifier que le sujet (Lyon) et l'objet (http://fr.dbpedia.org/page/Lyon) du triplet représentent la même chose.
    Et c'est là, la plus grande qualité du RDF, "it's a kind of magic", c'est là que la magie "s'opère"... C'est là que s'ouvre une infinité de possibilité...
    Vous pouviez déjà grâce au RDF tout décrire, vous pouvez maintenant connecter votre graphe à d'autres graphes, d'autres bases de données RDF crées par d'autres... comme celle de DBPedia, qui reprend les informations contenues dans Wikipedia, et vous les propose au format RDF : allez jeter un œil sur la page en question : http://fr.dbpedia.org/page/Lyon et vous verrez d'autres propriétés apparaître, comme la population, la superficie, les monuments... ainsi que des liens vers d'autres bases de données ou des endpoint sparql
  • http://fr.dbpedia.org/page/Lyon : à décrire...
  • prefix
  • sparql
La suite ?
Bandes d'impatients, commencez par jeter un oeil sur dreamcatcher -> http://dreamcatcher-smag1.rhcloud.com/#!/outils (patientez 30 secondes que le serveur redémarre l'appli)



 vous y trouverez l'aide pour vous balader dans les graphes..., sinon en attendant la suite, vous pouvez également interpeller le fautif, lui posez vos questions, ou faire part de vos attentes, vos idées sur Twitter : @DFaveris
d'autres infos techniques se trouvent sur http://smag0.blogspot.fr

Un bon tendeur...
ça tient bien, tiens, ça tombe bien !

13/03/2016

bigdata facile - une application Android pour visualiser, les informations sur un serveur bigdata perso

[ cet article fait partie de la série RDF FACILE - Mon petit BigData ]

Le but de ce post est de faciliter la construction d'une petite appli pour mettre à jour, consulter, visualiser les informations d'un serveur Fuseki (serveur RDF/Sparql), et de créer ainsi, notre petit #bigdata à nous ;-).

La première étape est d'avoir accès à un serveur Fuseki/Sparql. Pour ce faire, vous pouvez suivre les instructions décrites ici : http://smag0.blogspot.fr/2016/03/un-serveur-fuseki-rdf-bigdata-sur.html ou utiliser celui qui y est mentionné ( serveur de test : http://rdf-smag0.rhcloud.com/ )

Pour créer l'appli, on va utiliser ce qu'il y a de plus simple --> Pas la peine de se prendre la tête...


Créez un compte sur App inventor, et commencez un nouveau projet. ( Les flémards peuvent aussi piquer le code ici : http://ai2.appinventor.mit.edu/?galleryId=4993525195735040).

Si vous n'avez jamais pratiqué App Inventor, faites-vous la main avec les tutos, ou posez-vos questions en commentaire de ce post, on trouvera bien quelqu'un pour vous répondre...
Mais d'abord commençons par faire le point sur ce qui va nous être utile :
  1. une requête pour aller interroger le serveur : http://rdf-smag0.rhcloud.com/ds/query?query=select+*+where+%7B%3Fs%3Fp%3Fo%7D&output=json . Je sais, c'est un peu brut pour ceux qui ne connaissent pas le rdf, et les requêtes Sparql, mais ce n'est pas le sujet de cet article...
Entrons dans le vif du sujet
Lorsque vous ouvrez un nouveau projet sur App inventor, le premier écran est Screen1, on va en créer deux autres grâce au bouton "ajouter écran" (en admettant que vous ayez passé votre interface de App Inventor en français... si si, c'est possible, en haut à droite ).
Nos deux nouveaux écrans pourraient par exemple s'appeler "Visualisation" et "Saisie".
Sur l'écran Screen1, créez deux boutons pour accéder aux écrans que l'on vient de créer, et affectez leur le code pour ouvrir les écrans respectifs.
( Pour la bascule Designer / Bloc, utilisez les deux boutons "Designer" & "Blocs", juste au dessus du panneau "Propriétés" )




Avec les blocs : 




Attaquons-nous pour commencer à l'écran "Visualisation".
Pour voir ce que notre serveur a dans le ventre, on va ajouter un composant "WEB", on le trouve dans "Connectivité" de la "Palette". C'est lui qui se chargera de la requete.
Ajoutez aussi un bouton pour le retour sur l'écran d'accueil,  une "zone de texte" avec les propriétés Height et Width en "remplir parent", et "Nuance" en "Attente résultat", c'est là que l'on affichera le retour de la requête, dans un premier temps.


Et en backstage : 



Dans le mode "Blocs", Ajouter une variable , nommez-la "requeteTest" et donnez-lui la valeur : http://rdf-smag0.rhcloud.com/ds/query?query=select+*+where+%7B%3Fs%3Fp%3Fo%7D&output=json 
Complétez les blocs de codes comme l'image ci dessus : 

Quand "Visualisation initialise, faire " / mettre Web1.Url à obtenir global requestTest, appeler Web1.Obtenir

Quand Web1.Texte reçu, faire / Mettre TextBox1.Texte à / obtenir Contenu de réponse

et le code pour le retour sur la page d'accueil : 

Quand Bouton1Click, faire / Fermer l'écran

Vous pouvez déjà tester votre appli , le mieux , c'est avec le AI Compagnon, dans le menu "Connecté", mais c'est pas encore au point, repassez sur l'interface en anglais, orsque vous souhaitez tester votre application --> attention, verifiez que "contenu de réponse s'est bien traduit en "Content réponse" .

Si tout va bien, vous devriez voir appraitre dans la zone de texte, un truc qui ressemble à : 



{
  "head": {
    "vars": [ "s" , "p" , "o" ]
  } ,
  "results": {
    "bindings": [
      {
        "s": { "type": "uri" , "value": "http://example.org/dog1" } ,
        "p": { "type": "uri" , "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" } ,
        "o": { "type": "uri" , "value": "http://example.org/animal" }
      } ,
      {
        "s": { "type": "uri" , "value": "http://example.org/cat1" } ,
        "p": { "type": "uri" , "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" } ,
        "o": { "type": "uri" , "value": "http://example.org/cat" }
      } ,
      {
        "s": { "type": "uri" , "value": "http://example.org/cat" } ,
        "p": { "type": "uri" , "value": "http://www.w3.org/2000/01/rdf-schema#subClassOf" } ,
        "o": { "type": "uri" , "value": "http://example.org/animal" }
      } ,
      {
        "s": { "type": "uri" , "value": "http://example.org/zoo/host" } ,
        "p": { "type": "uri" , "value": "http://www.w3.org/2000/01/rdf-schema#range" } ,
        "o": { "type": "uri" , "value": "http://example.org/animal" }
      } ,
      {
        "s": { "type": "uri" , "value": "http://example.org/zoo1" } ,
        "p": { "type": "uri" , "value": "http://example.org/zoo/host" } ,
        "o": { "type": "uri" , "value": "http://example.org/cat2" }
      } ,
      {
        "s": { "type": "uri" , "value": "http://example.org/cat3" } ,
        "p": { "type": "uri" , "value": "http://www.w3.org/2002/07/owl#sameAs" } ,
        "o": { "type": "uri" , "value": "http://example.org/cat2" }
      }
    ]
  }
}


c'est le résultat de notre requete au format JSON !!! 
Yahou, Wahou, on a récupéré nos infos...
Et maintenant ???

Maintenant, nous plusieurs pistes :
1. modifier la requête pour qu'elle ne renvoie que les résultat qui nous intéressent, Thérèse.
2. traiter et mettre en forme ces données pour les afficher selon notre besoin,
3. créer la page de saisie pour insérer de nouvelles données sur notre serveur

Laquelle de ces trois pistes souhaitez-vous pour le prochain article ? 



[ cet article fait partie de la série RDF FACILE - Mon petit BigData ]



11/03/2016

Un serveur fuseki RDF bigdata sur openshift

[ cet article fait partie de la série RDF FACILE - Mon petit BigData ]


serveur de test : http://rdf-smag0.rhcloud.com/
- choisissez "Control Panel",
-  puis le Dataset "/ds",
- cliquez sur select,
-  un formulaire apparait, ou vous pouvez insérer des données (SPARQL Update) ou executer une requete (SPARQL Query))

repo github : https://github.com/scenaristeur/smag0-fuseki-rdf-openshift
(des problèmes de socket lorsque l'on tente d'utiliser la dernière version de Fuseki, donc on reste pour l'instant avec l'ancienne)


test pour insérer des données :


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 {
GRAPH <http://example/bookStore>
{
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 .
}
}



--> remplacez  le bloc  :
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 .

par les triplets que vous souhaitez ajouter



test pour récupérer des données : 

select * where {?s ?p ?o}

ce qui nous donne pour une requete GET , et des données de retour au format JSON,
 par exemple pour une appli
 avec APP INVENTOR ou PROCESSING,
ou encore depuis une page web en javascript  l'url :

http://rdf-smag0.rhcloud.com/ds/query?query=select+*+where+%7B%3Fs+%3Fp+%3Fo%7D&output=json

Par exemple, on peut utiliser App Inventor pour récupérer les données : http://smag0.blogspot.fr/2016/03/bigdata-facile-une-application-android.html

ensuite, complétez-là pour mettre à jour les données du serveur :
http://smag0.blogspot.fr/2016/03/big-data-facile-une-application-pour.html


[ cet article fait partie de la série RDF FACILE - Mon petit BigData ]



26/02/2016

Dreamcatcher V3 integration dans Meteor

in English, at the bottom of this post ;-)

La version hébergée sur Météor n'est plus, préférez la version "Autonome Collaboratif "







Nous en sommes maintenant à la V3 de Dreamcatcher : les plus curieux peuvent déjà y jeter un oeil : http://smag0.meteor.com/

  1.  v1 : http://smag-smag0.rhcloud.com/DreamCatcher/
    1. explications : http://smag0.blogspot.fr/2015/08/dreamcatcher-lattrape-reves.html
    2. Fonctionnalités :
      1. test de la bibliothèque de la bibliothèque traer pour processingjs pour gérer un environnement physique de répulsion, attraction des noeuds, deplacement à la souris, zoom avec les flèches (voir notice/help)
      2. test de drag&drop
      3. test d'integration, export de fichier rdf , n3
      4. sauvegarde de graphe avec touche "s" chargement des données depuis un serveur Fuseki, un sparql endpoint, via une requete sparl ou un service web hebergé ailleurs avec Java/Jena
      5. Creation de sessions pour travailler à plusieurs sur un graphe
    3. utilisationhttp://smag-smag0.rhcloud.com/DreamCatcher/help.html
  2. v2 : http://smag-smag0.rhcloud.com/DreamCatcher1/
    1. explications : http://smag0.blogspot.fr/2015/12/dreamcatcher-ou-comment-partager-des.html
    2. Fonctionnalités : une evolution de la V1, avec prise en charge de la 3D, grâce à P5JS, test égalment avec three.js 
    3. utilisation
      1. cliquer sur "charger Demo" puis sur afficher texte
      2. les curseurs permettent de zoomer, déplacer la caméra
  3. v3 ; http://smag0.meteor.com/
    1. explications : http://smag0.blogspot.fr/2016/02/dreamcatcher-v3-integration-dans-meteor.html
    2. besoin; besoin d'une identification, authentification pour partager, donner des droits sur les graphes, les sessions
    3. dépôt github : https://github.com/scenaristeur/dreamcatcher-smag0
    4. utilisation
      1. en arrivant sur la page d'accueil, on peut s'authentifier, ou créer son compte, 
      2. ensuite on peut créer un post ou participer aux post existants
        1. creer un post : rien de plus simple (attention aux lien, s'il existe déjà, ça empeche de créer le post)
        2. ajouter un triplet ou statement à un post existant, en insérant un sujet, une propriete, et un objet, et en validant. ce triplet/statement devrait s'insérer dans le graphe en haut de page . si aucun graphe n'apparait : revenez sur la page d'accueil, puis actualisez, ( tous les fichiers ne semblent pas encore chargés si on atterit directement sur un post)



version anglaise : 

Dreamcatcher V3 integration in Meteor
We are now in V3 Dreamcatcher: the curious can already have a look: http://smag0.meteor.com/

 v1: http://smag-smag0.rhcloud.com/DreamCatcher/
explanations http://smag0.blogspot.fr/2015/08/dreamcatcher-lattrape-reves.html
features:
test library for the library traer processing.js to manage a physical environment repulsion, attraction knots, displacement mouse, zoom with the mouse (see manual / help)
drag & drop test
integration testing, rdf file export, n3
Backup graph with "s" key data loading from a Fuseki server, endpoint sparql, via a request sparl or a hosted web service elsewhere with Java / Jena
Creation of sessions to work together on a graph
Use: http://smag-smag0.rhcloud.com/DreamCatcher/help.html
v2: http://smag-smag0.rhcloud.com/DreamCatcher1/
explanations http://smag0.blogspot.fr/2015/12/dreamcatcher-ou-comment-partager-des.html
Features: an evolution of the V1, with support of 3D, thanks to P5JS, égalment test Three.js
use :
click "Load Demo" and then display text
sliders allow you to zoom, move the camera
v3; http://smag0.meteor.com/
explanations http://smag0.blogspot.fr/2016/02/dreamcatcher-v3-integration-dans-meteor.html
need; require identification, authentication to share, give rights on graphs, sessions
use :
arriving on the home page, you can authenticate or create an account,
then you can create a post or participate in existing post
create a post: nothing simpler (watch link, if it exists, it prevents creating the post)
add a triplet or statement to an existing post, inserting a subject, a property and an object, and validating. this triplet / statement should be part of the graph to the top. if no graph will appear: return to the home page and then refresh, (all files do not yet appear directly responsible if it lands on a post)