Bloc - note informatique
© 2003-2008 Jean-Marc Vanel
e-mail: Envoyer vos commentaires - IRC channel #websemantique #eulergui - Ma page d'accueil - Table des matières
Dernière mise à jour:
Il y a aussi mon bloc-note non
informatique . 01 39 55 58 16
Parfois je dis les choses ici en Français, et parfois là-bas en Anglais.
This is my blog; sometimes I say things in english
there, and sometimes in French here.
Utilisation de l'Intelligence Artificielle pour le développement logiciel : le nouveau paradigme
Le projet Déductions - présentation
j'ai un CD Fedora 15 qui marche parfaitement sur mon ordi de bureau, mais sur un portable HP 4310s , le démarrage reste scotché sur le message HP "press the escape key for startup menu" ;
<jmvanel> bien sûr je suis allé voir le BIOS plusieurs fois ...
<jmvanel> et le CD n'arrête pas de tourner ...
<jmvanel> ça peut durer un nuit ...
Je considère l'utilisation de Drools Fusion:
http://docs.jboss.org/drools/release/5.2.0.CR1/drools-fusion-docs/html_single/index.html#d0e23
Questions Jason
Jason est un projet séduisant, avec ses nombreux exemples et son environnement jEdit.
J'apprécie que cela s'inscrive dans une recherche mûre, avec des démonstrations de preuve. Mais ça n'en fait pas automatiquement un outil
Cela dit, voici des Questions et remarques:
est-ce commode ?
( conformément au Plan qui est d'écrire le maximum de choses dans un langage logique )
D'une façon générale, le partage des rôles entre le langage ActionSpeak et le langage Java ne me parait pas clair.
ne pourrait-on faire comme en Mercury ?
c'est implicite comme les variable globales en C/Java etc ; donc pas propre;
ne pourrait-on faire autrement avec Jason ?
Je refléchis à un mécanisme pour "rétracter" les appels Java; par exemple un ajout dans une collection peut être rétracté par un appel correspondant à remove.
Mais a--t-on besoin de ça ; puisque la mémoire RETE implémente déjà l'assertion et la rétractation logique.
On pourrait utiliser ceci pour tirer les conséquences hors de la mémoire RETE :
3.3.3.2.2. Live Querries
http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e1436
Il serait intéresant de verbaliser les plans ActionSpeak(L) .
http://fr.wikipedia.org/wiki/Gestion_des_connaissances
je vais lire, mais je me positionne en opposition à ce courant .
beaucoup de voeux pieux, pas assez de formalisation de la connaissance, ni de liaison avec le génie logiciel;
en partique cela aboutit à créer des bases de documents bureautiques plus ou moins bien indexées
il y a maintenant des wiki sémantiques
Nous, c'est à dire la société, croulons sous la complexité. Confrontés à une relative urgence, même des raisonnements simples ne sont pas à l'oeuvre dans les médias et les autorités.
Regardez l'affaire des colibacilles allemands. Cela a déjà coûté des millions en légumes invendus (qui paiera exactement on ne sait pas, mais ce n'est pas le sujet).
Or tout cela était facile à prévoir. Cependant personne dans les médias n'a expliqué comment se prémunir par des mesures simples: lavage, cuisson. Par conséquent, le public n'achète pas, par principe de précaution.
Tout se passe comme si la complexité engendrait une irresponsabilité généralisée, puisqu'on ne sait pas à quelle institution chaque problème revient.
Mais j'en viens à mon sujet: On est presque à un niveau où un système expert peut prévoir les conséquences, et peut-être même suggérer des remèdes. Ici pas besoin de modèle probabiliste, un modèle logique avec un producteur et un consommateur doit s suffire.
Une esquisse des règles :
<jmvanel> Il y a du monde ce soir ! je cherche toujours des testeurs pour EulerGUI ;
<jmvanel> l'utilisabilité a augmenté : cache N3 , fixes
<jmvanel> on peut par exemple ouvrir un ensemble de documents et les (re)voir en N3 même si l'Internet est coupé .
http://www.semweb.pro/
http://linuxfr.org/users/montaigne/journaux/des-paradigmes-alternatifs
Je travaille sur une présentation "connaissances_DL_CNL_règles" .
En préambule:
Qu'est ce que la connaissance?
Cela recouvre plusieurs choses:
1. - l'expertise : exemple "un béton contient des granulats et un ciment"
2. - les algorithmes et formules : exemple "formule pour le vieillisement d'un béton"
3. - les données : exemple "base de données sur les ciments disponibles"
4. - documents bureautiques classés par sujets et multi-critères
Notre sujet sera : 1-2-3.
Plan proposé
Avec Ubuntu 10.10, J'ai voulu faciliter la vie de mon épouse en ouvrant directement la session sur son compte; mais la barre de menu gnome a disparu, et de plus je ne sais pas comment avoir la main au démarrage pour changer ce réglage ...
Pour avoir la main quand la barre de menu gnome a disparu, il suffit de taper Alt-F2 pour avoir un lanceur qui perlet lancer un shell (interpréteur de commandes) ou n'importe quoi .
Pour la barre de menu gnome qui a disparu avec Ubuntu 10.10 , j'ai détruit ~/.gconf* et ~/.gnome2* .
Depuis une semaine, j'ai un ralentissement dans les réponses de la souris et du clavier. J'ai essayé de désinstaller compiz.
Bonsoir ; que faire quand , avec 11.04 , les bordures des fenêtres disparaissent ?
<Spaceeman> siffler ?
<jmvanel> est-ce un bug connu ?
<Spaceeman> Peut-être...
<Spaceeman> http://forum.ubuntu-fr.org/viewtopic.php?id=195769
<jmvanel> metacity --replace
: ça le fait !!!!
<jmvanel> merci Spaceeman
<jmvanel> un bug qui a la vie dure !
Warning: the required module sbs is not currently installed
on your system. If it is built into the kernel then it's OK.
Otherwise, check http://www.lm-sensors.org/wiki/Devices for
driver availability.
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
it87
max6650
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)yes
Successful!
Monitoring programs won't work until the needed modules are
loaded. You may want to run 'service module-init-tools start'
to load them.
Unloading i2c-dev... OK
Unloading cpuid... OK
jmv-desktop: ~/src/eulergui_new/ % gvim /etc/modules
j'y suis arrivé ! après avoir passé sensors-detect
, avec
yes sur tout , il a fallu parcourir http://www.lm-sensors.org/wiki/Devices pour
trouver le module adapté à mon chip , l'ajouter dans /etc/modules , et un
coup de sudo service module-init-tools start .
du coup je vois que j'ai temp3 à 89 , et fan2 et 3 à zéro .
Il est temps de faire de la maintenance !!!
Bonjour
J'ai un problème avec une vieille appli. , Amaya ( dernière version 2009 ) , avec Ubuntu 11.04 . La barre de menus n'est plus là avec Gnome ( "Ubuntu classique" ) , mais apparaît avec Unity quand la souris passe dans le bandeau .
Ma question c'est : y aurait-il sous Gnome avec Ubuntu 11.04 un moyen de lancer ce genre d'application pour faire apparaître la barre de menu ?
j'ai fait
UBUNTU_MENUPROXY= amaya &
ça marche !!!
cf http://www.webupd8.org/2011/03/disable-appmenu-global-menu-in-ubuntu.html
On se dit naïvement que si la JVM surveille les graphes de données pour faire du ramasse miettes, elle pourrait aussi surveiller les graphes de dépendence entre threads. Il y a moins de threads à surveiller que d'objets :) .
http://jduchess.org/duchess-france/blog/rejoignez-nous-a-lavant-jug-de-mai/
J'ai en ce moment une boucle infinie, avec le cache N3 Internet.
Je me dis qu'il faut distinguer soigneusement les méthodes qui font juste le travail inconditionnellement ( privées ou protected ) , et celles qui décident s'il faut faire le travail ou renvoyer un cache ( publiques ) ?
CalendarEntry <|--- Visit, TelephoneCall, Encounter
EmployeeTitle, Company <|--- ITServices
properties : followUp
Contact <|--- Partner, Customer, Technical, Advisor (possible or actual), Candidate
Expectancy <|--- Contract, Partnership
Offer <|--- Training, Coaching, KnowledgeEngineering, Development
If no followUp after 3 days, propose an action.
If a new mail to the same person if not a followup of a preceding mail, propose to set the followup relation.
cf plaquette Déductions
cf site JMV
coût des changements de technologie, de fonctionalité.
Le paradoxe de l'IA : elle revient à la mode via les robots, mais dans le développement logiciel, on freine .
Pourquoi ? Les informaticiens se prennent eux mêmes au piège de la complexité qu'il créent.
Les utilisations possibles du cadriciel:
remplacer UML + MDA par OWL + règles: utiliser directement les règles métier dans l'application sans passer par la case génération de code
Idées fortes:
spécifications
Je me bats avec des tests !
Il n'y avait pas des tests où on crée dynamiquement des projets dans l'IHM ...
En gros, ça marche , mais ça interagit vilainement avec le cache de bases de règles ;
étant donné que le projet non sauvé s'appelle toujours euler_project.xml.n3p ,
il est caché toujours sous ce nom :-(
La solution c'est de jamais mettre en cache un projet non sauvé et donc non nommé .
Inscrit au DDD User Group Paris
https://groups.google.com/group/dddugparis?hl=fr
Inscrit:
difference / resemblance with CHR
- declarations nécessaires en CHR
- RDF == prédicats binaires
- statut variables différent
- simplication, propagation explicits en CHR
- théories claires en CHR
processeur chaînage avant (Drools) et arrière (Euler)
Il serait bon d'avoir des vocabulaires RDF pour les choses communes en gestion: clients ,commandes, factures, livraisons, fournitures, tâches, ...
tout ce qui tourne autour de IndexedParserNodeData
<lcpvrr> c'est carrémént ultra moche
<lcpvrr> plus moyen de faire tourner plusieurs parsers en //
<lcpvrr> pas thread safe
http://web-and-philosophy.org/atelier-philosophie-et-ingenierie-ic-2011/
http://www.systematic-paris-region.org/fr/membres/deductions
http://www.semanticdesktop.org/ontologies/nmo/
http://fr.wikipedia.org/wiki/Liste_des_versions_d%27Ubuntu#Ubuntu_10.10_.28Maverick_Meerkat.29
un article sur maven3
la mise à jour est sensée etre simple
http://java.dzone.com/articles/upgrading-maven-3
la doc est là : https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html
http://www.startinparis.com/
http://www.startinparis.com/2011/02/start-in-paris/demi-finalistes-sip-7-votes/
Inscrit:
3e anniversaire du Paris JUG (28/02/2011)
Le thème cette année sera Siffler en travaillant
Nous sommes un apporteur de technologies; cela peut se concrétiser par des prestations pour des clients communs: un partenariat technologique, des formations, etc.
http://fr.wikipedia.org/wiki/Distance_de_Levenshtein
http://groups.google.com/group/deductions-fr/browse_thread/thread/c44219e0c94a9852
Extraits:
Le nouveau mapping N3-Java , voir:
https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/refactoring/eulergui/examples/
Du point de vue des règles N3 mélangeant triplets métier et triplets Java, le principe ne change pas, mais dans les détails la compatibilité avec les règles existantes pour formulaires Swingne peut pas être maintenue.
Les appels de méthodes Java se font en direct, et non pas après une (re)traduction globale de la WorkingMemory en JavaScript.
5. séparer les données en différents fichiers dans un projet
EulerGUI: ontologie, règles métiers, règles applicatives;
je propose de créer cela dans deux répertoires wines/ et contacts/ ici :
https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/refact...
chaque répertoire contiendra:
model.n3 , rules-bizz.n3 , rules-app.n3 , contraints.n3 , java.n3 ;
project.n3p.n3 ; src/main/java/
Voici un exemple d'utilisation de app:log. On suppose qu'on est dans le membre de droite d'une règle (le conséquent); ainsi une variable comme ?CONTACT qui n'existe pas dans le membre de gauche de la règle (l'antécédent) correspond à une création d'un nouvel identifiant.
@prefix app: <http://eulergui.sf.net/ontology/application.owl.n3#>. :myApp app:log [ "Ajout d'un nouveau contact"@fr ?CONTACT ]. ?CONTACT a :Contact. |
Voici un exemple d'utilisation pour app:statistics , qui affiche le nombre de contacts dans la base de connaissance :
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#> . { _:d e:findall( ?CONTACT { ?CONTACT a :Contact } ?CONTACTS ). ?CONTACTS math:memberCount ?NB_CONTACT. } => { ?S a app:statistics. ?S rdfs:label "Nombre de contacts: "@fr . ?S app:information ?NB_CONTACT . }. |
Le rdfs:label agit comme une clé qui va permettre à une régle d'infrastructure de mettre à jour les app:statistics.
Quand aux opérations CRUD, elles se font grâce aux prédicats décrits ici :
Je propose de modéliser de manière déclarative une interaction utilisateur avec les concepts de transaction et de champ. Une transaction est une liste de champs. Un champ de saisie est une entrée de donnée de la part de l'utilisateur. Un champ est associé à un sujet et à une propriété au sens OWL / RDF.
Il y a quatre sortes de champs pour les deux sortes de propriétés au sens OWL ( propriétés "objet" et propriétés "datatype" ): champ ajout, champ modification, champ destruction, et champ création. On entend par là , ajout, modification, ou destruction d'un triplet RDF, et création d'un d'un nouvel identifiant avec son type. Les champs modification et destruction comportent en plus un objet au sens RDF.
Par exemple un champ ajout correspond à l'ajout d'un identifiant d'article dans une commande commerciale. Un champ création correspond à la création d'un compte bancaire nouveau pour faire ensuite des virements dessus.
Quand on crée une transaction via une règle, on a toutes les possibilités du language N3 pour ajouter des conditions supplémentaires. Par exemple pour l'ajout d'un identifiant d'article dans une commande commerciale, on peut se restreindre à des catégories correspondant aux intérêts de d'utilisateur, ou à ses commandes passées.
Il ne reste plus qu'à créer des implémentations pour ce language pour l'interaction utilisateur, grâce à des règles mixtes métier - Java. On peut envisager plusieurs implémentations: Swing, GWT, SWT, dialogue en ligne de commande, etc.
Pour commencer, il faut écrire ce petit vocabulaire en N3. On va le mettre dans le projet Déductions dans owl/user_interaction.owl.n3
Ayant quelques règles métiers et applicatives, on peut aller plus loin, et ajouter des règles mélangeant triplets métiers et appels Java. L'exemple simple (sans règles) est:
java_gen.n3p<http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/ex...>
Un exemple avec règles est :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/branches/refactor...
Après, pour appeler l'API EulerGUI, ça se passe comme ça :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/ht...
Il ne reste plus qu'à écrire un petit main() qui lance la base de connaissance, la peuple avec un ou quelques objets Java, et s'arrange pour que chaque fois que l'utilisateur ou le monde extérieur agit, alors fireAllRules() est appelé.
Je pense que ça sera plus simple , et tout aussi instructif, de commencer par une application en ligne de commande, ou bien une application mixte, où l'affichage est graphique, et les commandes en ligne de commande.
http://fr.wikipedia.org/wiki/Ch%C3%A2telet_%28m%C3%A9tro_de_Paris%29
http://www.delicious.com/oesxyl
http://www.slideshare.net/onlyjiny/inference-on-the-semantic-web
http://www.webducate.net/qfd/qfd.html
http://en.wikipedia.org/wiki/Quality_function_deployment
http://cmap.ihmc.us/Publications/ResearchPapers/TheoryCmaps/TheoryUnderlyingConceptMaps.htm
http://librdf.org/rasqal/
Links for RZ: Linux package management
http://www.mandrivalinux-online.org/articles/articles-25-85+acceder-a-la-documentation-des-logiciels-avec-doc4.php
http://www.slideshare.net/slauriere/mandriva-smart-desktop-scribo-colab
UPMI Unified Package Metadata Initiative http://code.google.com/p/upmi/
"informatique humaniste" en ce sens qu'il faut mettre en avant ce que est humain dans un projet: les besoins, spécifications, modèles et règles de gestion, et la technique technicienne est une intendance qui suit, grâce justement à des règles de gestion spécifiques aux choix technologiques.
Tous mes vœux de santé et de succès pour cette année 2011 !
En 2010 j'ai fondé la société de services Déductions (SARL enregistrée au RCS de Versailles).
Sa mission est d'aider les entreprises à formaliser et valoriser les spécifications, modèles et règles de gestion.
Pour cela nous nous appuyons sur les techniques Langage Naturel formel, Web Sémantique, moteurs à base de règles, Logiciel Libre.
Stages EulerGUI
http://groups.google.com/group/deductions-fr/browse_thread/thread/c44219e0c94a9852
De la bonne manière de poser les questions
http://www.gnurou.org/writing/smartquestionsfr
http://jduchess.org/duchess-france/blog/brms-les-produits-existants-ilog-et-drools-paris-jug-partie-2/
Les règles métier, c'est la matière brute pour un système d'information géré rationellement. Cela recouvre les règles de gestion telles que "si le client remplit telles conditions, alors il a tel bonus". Mais il y a plus !
Grâce au technologies du Web Sémantique du World Wide Web Consortium (W3C) il existe un cadre unifié dans lequel acueillir ce qui autrefois était disparate:
Que pensez vous d'une premisse qui est vraie quand un fait est rétracté, cette fonctionalité m'arrangerait pour mon pb de findall
l'assertion du fait X mettrait à jour la liste par ajout, et la retractation de X la mettrait à jour par suppression. dans tous les cas l'anceinne liste et supprimé et une nouvelle mise à jour créé
ceci est basé sur une notion de liste immuable
cela rentre aussi dans la logique programmation fonctionnelle
?X value ?V result valueList ?L : always true, existing ?L else ?L is nil by default, do not implies conclusion ?LV listFirst ?V : always true ?LV listRest nil : always true ?LL listFirst ?L : always true ?LL listRest ?LL2 : always true ?LL2 listFirst ?LV : always true ?LL2 listRest nil : always true ?LL listAppend ?LR # list append builtin => result valueList ?LR : replace all previous ( result valueList *) retracted ?X value ?V result valueList ?L : always true, existing ?L else ?L is nil by default, do not implies conclusion ?LV listFirst ?V : always true ?LV listRest nil : always true ?LV listRemove ?LR # list append builtin => result valueList ?LR : replace all previous ( result valueList *) result list ?L ?L mathSum ?S # sum buitin => result sum ?S
7 mois écoulé depuis la précédente release !
c presque comme un bébé !
Parinux conférence : SEEKS, la recherche libre collaborative
mar., 14 décembre, 19:15 – 20:45
http://reasoner4j.sourceforge.net/
Regardé les les salons sur :
http://chat.jabberfr.org/
Le lien xmpp:programmation@chat.jabberfr.org?join
ne marche pas
dans empathy, mais j'ai pu me connecter avec ces 2 identifiants:
programmation - chat.jabberfr.org
http://doc.ubuntu-fr.org/jabber
http://prevert.upmf-grenoble.fr/Prog/Java/CoursJava/expressionsRegulieres.html
BTS (AB) travaille dans l'équipe rdb2rdf du W3C.
Voir "Stagiaires pour les projets Déductions et EulerGUI"
Quelle est la procédure à suivre quand le réseau SFR a un problème ???
J'ai besoin de ce site pour travailler !!!
Il faut que SFR fasse quelque chose, manifestement leurs tables de routage ont des trous .
Il n'y a jamais eu ce genre de problème avant .
Ici on voit que ça se perd dans la nature :
% traceroute www.sourceforge.net
traceroute to www.sourceforge.net (216.34.181.60), 30 hops max, 60 byte packets
1 boxsfr.sfr (192.168.1.1) 0.763 ms 1.226 ms 1.686 ms
2 * * *
3 1.241.70-86.rev.gaoland.net (86.70.241.1) 44.674 ms 46.476 ms 48.121 ms
4 1.246.103-84.rev.gaoland.net (84.103.246.1) 49.582 ms 50.883 ms 52.353 ms
5 206.178.96-84.rev.gaoland.net (84.96.178.206) 54.426 ms 56.461 ms 57.526 ms
6 214.178.96-84.rev.gaoland.net (84.96.178.214) 59.378 ms * *
7 * * V4070.th21-co-1.n9uf.net (62.39.148.97) 41.672 ms
8 * * *
9 * * *
Publié sur
http://www.justneuf.com/forum/topic/120994-un-site-americain-inaccessible-sourceforgenet/
Cet am je suis obligé de revoir les bases de comment j'utilise Drools ...
En fait , fausse alerte!
3.3.3.1.1. Insertion
Unité d'exécution [AWT-EventQueue-0] (Suspendue) EqualityKeyComparator.hashCodeOf(Object) ligne : 50 ObjectHashMap.get(Object) ligne : 100 TruthMaintenanceSystem.get(Object) ligne : 153 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) ligne : 1008 ReteooStatefulSession(AbstractWorkingMemory).insert(Object) ligne : 917 N3SourcetoDrools.setRuleBase(RuleBase) ligne : 875 N3toDroolsUpdater.setRuleBase(RuleBase) ligne : 160 Project.compiledRulebaseLoadedFromCache(String) ligne : 635 Project.translateN32Drools(boolean) ligne : 772 Project.prepareDrools(boolean) ligne : 753 Project.doRunDrools(boolean) ligne : 709 Project.runDroolsTriples(boolean) ligne : 667 RunDroolsAction.actionPerformed(ActionEvent) ligne : 48 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) ligne : 1995
NON
NON
OUI
et la compilation Drools était en fait avec logicalInsert() est aussi SANS négation du conséquent dans l'antécédent
( j'avais fait ainsi car la combinaison logicalInsert() avec négation du conséquent dans l'antécédent avait créé des boucles infinies )
Le problème maintenant SANS négation du conséquent dans l'antécédent est qu'il faudrait revoir toutes les règles pour bien interdire toutes les instanciantions multiples non désirées.
d'ailleurs avec le cas person_import3.n3p , même après correction dans generic_gui_projection-rules.n3 règle 16 :
# ?_SUBCLASS rdfs:subClassOf ?CLASS . () e:findall ( ?_SUBCLASS { ?_SUBCLASS rdfs:subClassOf ?CLASS } ?LIST ) . ?LIST math:memberCount ?COUNT . ?COUNT math:greaterThan 0 .
n'a pas moins de 8 de fenêtres "Person GUI" et 7 fenêtres "Generated by Déductions Framework", dont plusieurs avec des champs dupliqués;
en fait c'était dû à une erreur stupide : les règles étaient insérées 2 fois dans la base de règles.
OUI
LogicalOverride : discard
dans getTranslator().copyN3factsToDrools();
appelé par Project.prepare() lors de restore()
A CONFIRMER
A CONFIRMER
> En recherche de partenaires SSII, dans le scénario où je suis
> sous-traitant, j'aide le client final à définir son modèle et ses
> règles métier, en OWL + règles SWRL , et je peux générer les modèles
> dans un format qui convient ( EMF, classes POJO, XML, ... ) .
>
> Vis à vis de mes prospects, PME innovantes qui écrivent des logiciels
> spécifiques, avec la même pile technologique, je les aide à mettre en
> place un fond de modèles métier maison, des transformeurs adaptés à
> leurs plateformes familières, et un environnement de développement
> dédié.
[ Collé grâce à TinyMCE, qui transforme du HTML en XHTML ]
Le contexte est qu'on a un cadriciel (framework) basé sur le langage N3,
plus des extensions.
Maintenant Il s'agit d'exprimer d'une manière déclarative des règles
métiers comme :
- M1 est le maximum d'un ensemble de nombres défini par une expression
logique;
- S1 est la somme d'un ensemble de nombres défini par une expression
logique;
- etc pour d'autres fonction génériques accumulatrices: minimum , comptage,
On a les prédicats en N3 pour ça, respectivement :
- e:findall calqué sur Prolog pour créer un ensemble défini par une
expression logique
- e:max
- math:sum
- e:min, math:memberCount
Par exemple:
{ ?V a :Vehicule.
_:d findall ( ?R { ?V :hasWheels ?W } ?LIST ).
?LIST math:memberCount 2 .
} => {
?V a :Bicycle .
}.
A noter que <=> n'est pas dans la syntaxe N3 .
Mais, même si on ajoute l'implication inverse, et qu'on ensemence la Base de
Connaissance avec:
:myBicycle a :Bicycle .
il n'y a pas moyen de récupérer les 2 roues anonymes qui doivent exister.
Du moins pas avec les processeurs N3 que nous avons.
C'est plutôt un travail pour les raisonneurs en Logique de Description.
Et encore, il n'est pas sûr que Hermit ou Pellet aient les API pour lister ce
qui doit exister.
Aussi, je vois bien qu'on a vite fait de tomber sur un infini potentiel, comme
avec ceci:
"Tout homme a un parent qui est un homme."
Quels sont les cas d'utilisation de ça ?
- un programme qui dessine le vélo
- un programme de gestion d'approvisionnement ("procurement") qui aide à
lister ce qui existe et à commander ce qui manque
- variante plus générale : générer un formulaire de saisie qui pilote la
saisie des propriétés des objets logiquement existants
- etc
Ce qui est sûr , c'est que les variantes de ls résolution classique à la
Robinson 1965, comme dans prover9, sont mal adaptées à exhiber les
existentiels.
La "logique cohérente" [1] parait bien; elle est utilisée dans les processeur
N3 Euler de Jos De Roo.
Il semble que DLV ait un formalisme intéressant, à la Prolog :
http://www.dlvsystem.com/dlvsystem/html/DLV_User_Manual.html#AEN814
Ce n'est pas Open Source, mais ça parait intéressant.
CONCLUSION
En fait, N3 n'est pas idéal comme langage de représentation des
connaissances, mais ça peut aller.
Le problème, c'est surtout d'avoir d'autres moteurs que RETE ( Drools ) , ou
semi-logique pas très documenté comme Euler [2] . Et on peut toujours
traduire N3 en d'autres langages comme on le fait déjà pour Drools.
Je vais demander sur la liste ATTEMPTO ( ATTEMPTO Controled English ) ce qu'il
y a comme possibilité pour exprimer maximum, sommation, etc.
Un langage comme CHR qui simplifie les contraintes pourrait être utilisé pour
trier les objets qui existent logiquement (les 2 roues), et ceux qui sont
explicitement affirmés. En fait (communication personnelle de de P. Van Weert
de JCHR), Drools semble avoir les mêmes possibilités que CHR.
Il n'empêche qu'on besoin de plus de moteurs d'inférence :
- prenant en compte les existentiels et fournissant les associations des variables
- ayant une phase en chainage arrière pour accéder aux bases de données au
cours ou avant l'inférence
Voilà , les pistes sont bienvenues !
------------------------------
http://folli.loria.fr/cds/2006/courses/Bezem.Nivelle.IntroductionToAutomatedReasoning.pdf
19.460524] EDAC amd64: This node reports that Memory ECC is currently
disabled, set F3x44[22] (0000:00:18.3).
[ 19.460533] EDAC amd64: ECC disabled in the BIOS or no ECC
capability, module will not load.
[ 19.460535] Either enable ECC checking or force module loading by
setting 'ecc_enable_override'.
[ 19.460536] (Note that use of the override may cause unknown side
effects.)
[ 19.460553] amd64_edac: probe of 0000:00:18.2 failed with error
-22
...q
[ 20.310198] r8169: eth0: link up
[ 20.862505] hda-intel: azx_get_response timeout, switching to polling
mode: last cmd=0x000f0000
[ 21.872499] hda-intel: Codec #0 probe error; disabling
it...
[ 22.922509] hda_intel: azx_get_response timeout, switching to
single_cmd mode: last cmd=0x000f0000
[ 24.559914] hda-intel: Invalid position buffer, using LPIB read
method instead.
[ 24.559950] hda-intel: IRQ timing workaround is activated for card
#2. Suggest a bigger bdl_pos_adj.
D'après Miké,
pour le raisonnement équationnel, l'état de l'art c'est toujours ceci
www.lsi.upc.edu/~albert/papers/handbook.ps.gz
c est un peu dur à lire (meme pour les spécialistes)
ces techniques sont utilisées pour raisonner sur les ontologies dans
peut être ailleurs aussi .
http://www.openstreetmap.org/?lat=48.84745&lon=2.13466&zoom=15&layers=M
Un truc important dont je n'ai pas parlé , à part de construire des
applications générées, est de sortir 100% de la logique métier de la partie
codée en impératif (Java/Scala/Python etc) . La logique métier est beaucoup
mieux exprimée en Logique de Description (OWL) augmentée de règles logiques.
Une des raisons est que l'appartenance à une classe ne doit pas être figée
comme en Java et compagnie, mais doit changer durant le cycle de vie de l'objet
(exemple: une personne chômeur devient employé quand elle a un travail). Une
autre raison est qu'ainsi la séparation est nette entre la logique métier et
le code d'infrastructure qui manipule des objets informatiques ( IHM,stockage,
réseau ). Il y a aussi les raisons mises en avant par les tenants des moteurs
de règles: les règles sont plus faciles à gérer en collaboration ou
directement par les experts métier.
MIT CSAIL s'intéressent à N3
ludique (Ehrenfeucht, Fraïssé)
équationel de Nash ?
Sénizergues, Aguion
la thèse de MR: méthode de superposition pour raisonnement équationnel avec égalité
besoin de pointeurs sur l'état de l'art en inférence FOL, algorithmique
Essai de requêtes fédérées avec ARQ 2.8.6 : ça ne semble pas marcher.
com.hp.hpl.jena.query.QueryParseException: Lexical error at line 9, column 10. Encountered: " " (32), after : "SERVICE"
MONTRER
FAIT
A FAIRE
SELECT ?c ?p WHERE { ?c ?p 'Boston'@en }
SELECT ?c ?p WHERE { ?c ?p "Lyon"@en }
SELECT * WHERE { :Lyon ?p ?v }
http://www.loria.fr/~rusi/
Je découvre des choses en préparant la formation :
Regardez comment l'URI pour Boston http://dbpedia.org/resource/Boston , lancée dans un navigateur, vous redirige vers une page montrant toutes les propriétés de Boston : http://dbpedia.org/page/Boston .
On peut aussi en bas de la page télécharger les données en N3, ce qui équivaut à la requête
?S dbpedia:Boston ?V .
Et l'URLN3 est http://dbpedia.org/data/Boston.n3
http://dbpedia.org/About
http://www.w3.org/2003/Talks/0520-www-tf1-a1-primer/slide3-0.html
http://www.w3.org/2000/10/swap/Primer
http://peccatte.karefil.com/software/Metadata.htm#RDF
http://www.inrialpes.fr/exmo/teaching/swc/
NLM
http://dtd.nlm.nih.gov/faq.html
http://www.nlm.nih.gov/bsd/sample_records_avail.html
voir
Resources formation Web Sémantique
Notes formation web sémantique
Notes formation web sémantique
LES OBJECTIFS :
Acquérir une vue d'ensemble sur les techniques et la vision du Web Sémantique.
Le web sémantique consiste à décrire les ressources du web, et en fait n'importe quelles données et concepts, avec des langages formels qui permettent la mise en œuvre de raisonnements sûrs (car basés sur des mécanismes d'inférence logique) à des fins d'indexation, interrogation, etc. Pour aboutir à ce Web Sémantique l'organisme de standardisation des langages du web, le W3C (World Wide Web Consortium), propose les nouvelles technologies RDF, SPARQL, OWL, etc.
Suivant les connaissances des stagiaires, on insistera davantage sur la comparaison avec certaines autres formes de modélisation et de stockage: SQL, UML et langages Orientés Objet, XML.
LES PARTICIPANTS :
Administrateurs de données, chefs de projet, Web designers et toute personne concernée par le Web Sémantique.
LES PRE-REQUIS :
Connaissances des concepts fondamentaux du Web
LA DUREE :
2 jours
LES MOYENS :
Formation en vos locaux, sur votre matériel. Accès à Internet; Java 6 installé.
LE PROGRAMME :
• Introduction au Web Sémantique: les choses ont des propriétés
• Rappel sur les URI
• RDF, un langage simple pour le Web Sémantique : graphe d'objets, formats N3, Turtle, et N-Triples
• le langage de requêtes SPARQL, les bases de données RDF disponibles sur le Web (Linked Data, Web of Data)
• RDF Schema, notion de vocabulaire (taxonomies de classes et de propriétés servant à décrire les ressources du web),
• inférence logique avec RDF Schema
• publier ses données avec le Web Sémantique
• OWL, un langage de modélisation pour le web sémantique : Logique de Description, inférences (satisfiabilité, subsomption,...)
• trouver données et ontologies sur le Web
• ontologies les plus utilisées
• langages et moteurs de règles
Figurez vous que je suis allé trop loin dans le sens de réutiliser des trucs, en l'occurence jEdit ;
J'ai cherché qq'chose pour surveiller des fichiers sur disque même s'il ne sont pas ouverts dans jEdit ;
He bien d'abord il n'y a rien dans jEdit, et ensuite c'était plutôt simple à implémenter ( j'avais déjà fait la surveillance d'un URL ) , il n'y avait plus qu'à lancer un Thread avec un sleep raisonnable qui lance un évènement n3Changed qui existait déjà dans EulerGUI, et voilà !
+ simple, + de fonctionalités !
Soirée Moteurs de Règles (09/11/2010)
http://www.parisjug.org/xwiki/bin/view/Meeting/20101109
requeter-le-contenu-de-wikipedia-avec-sparql
Ceci marche :
select distinct ?Concept where {[] a ?Concept}
mais pas ceci :
42000 Error The estimated execution time 4453 (sec) exceeds the limit of 1500 (sec).
SPARQL query:
SELECT DISTINCT ?p WHERE { [] ?p ?o}
On voudrait pouvoir écrire des transformation de graphes directement en Anglais Contrôlé, puis les exécuter en passant par N3.
Si l' entrée ou sortie est en XML, on peut utiliser Gloze pour la conversion XML <--> RDF.
snapshot --> instantané
backtracking --> retour arrière
D'après les Québécois : http://granddictionaire.com/
EulerGUI: feuille de route
autres tâches
J'ai commencé une société de services basée à Versailles, Déductions.
Nous proposons des services et des outils de développement visant à
automatiser les développements logiciels par une approche déclarative
fondée sur les règles et modèles métiers, ainsi que sur une
manipulation sémantique des resources logicielles existantes.
Nous construisons une pile technologique Open Source originale, basée
sur RDF/N3, OWL, Drools (moteur RETE Open Source), Langages Naturels
Contrôlés.
Il existe de nombreuses autres techniques que nous étudions, comme
CHR, Grammatical Framework, le langage Mercury.
Notre approche est de développer aussi peu que possible, d'intégrer
les meilleurs ingrédients, de façon aussi déclarative et indépendante
de toute plate-forme que possible, dans le respect de saines pratiques
de génie logiciel.
Nous sommes à la recherche :
- de jeunes scientifiques et développeurs; j'espère que vous avez des
anciens élèves à me recommander
- de conseillers scientifiques
- de collaboration via des thèses ou stages
- de collaboration pédagogique, par l'utilisation de notre
environnement graphique EulerGUI Open Source pour le Web Sémantique et
les règles
Il peut y avoir un partenariat et échange d'expériences.
Le développement logiciel c'est un métier que les chercheurs ne
connaissent pas forcément, nous pouvons les assister pour les bonnes
pratiques de développement, notamment sur les aspects architecture,
tests, processus de développement, modèles de conception, outils et
bibliothèques, gestion de communauté Open Source, choix de composants
logiciels Open Source.
D'autre part, avoir des utilisateurs industriels en production peut
être précieux pour des chercheurs: retour d'expérience, rapports de
bugs, idées de fonctionalités. Dans ce domaine, une petite entreprise
de logiciel comme la notre sera toujours plus motivée pour
l'innovation que des grandes entreprises bien établies sur leur
technologies.
Première chose, nous devons améliorer la conception actuelle et la mise en œuvre du moteur Java + N3, basé sur Drools, avec N3 comme langage de règles, ce qui est une combinaison unique de Web sémantique, moteur de règles, et de la plate-forme Java.Dans l'implémentation existante, le traducteur N3 vers Drools est une architecture simpliste qui crache des chaînes au fil de l'eau. Il nous faut quelque chose comme une technique de compilation pilotée par des règles. Et nous aimerions également générer des règles Jena, du code Mercury, Scala, des règles CHR, etc. J'ai pensé à utiliser des règles de transformation en N3 pour le N3 en entrée, et GF (GrammaticalFramework) pour la sortie de la chaîne finale.
Deuxième chose, nous devons concevoir et mettre en œuvre un moteur en
chaînage arrière pour l'interrogation des bases de données SPARQL en
présence de règles métier en N3. Il va générer une grosse requête SPARQL
par accumulation récursive des critères, substitution des variables liées,
changement de nom des variables si nécessaire. Je pense que pour ce point 2,
les capacités de CHR pour gérer les variables libres peuvent être
utilisées.
Un autre approche pour gérer des gros volumes de données consiste à coupler le moteur RETE Drools avec une solution de persistance Java native, comme JoaFIP.
Un autre thème concerne la génération des interfaces utilisateur à
partir des spécifications de haut niveau, comprenant des ontologies
OWL, des règles métiers en N3 ou SWRL, et d'autres spécifications
déclaratives pour l'interaction utilisateur.
Lié à cela, une base de règles embarquée permettrait d'exploiter
l'historique des actions de l'utilisateur pour déduire ses intentions,
et proposer des actions appropriées ( paradigme du bon serviteur ).
Enfin, nous voulons appliquer les techniques d'inférence pour une
manipulation sémantique des ressources logicielles existantes: deviner
les séquences d'appel à partir d'exemples de code, annoter
sémantiquement les bibliothèques, classes et méthodes, générer code de
jointure à partir des annotations sémantiques ( Modularité
intelligente ) .
Tout est à peu près d'équerre avec cette révision :
COMMITED revision 1895.
- Enhance IOManager.getLocalCache() : in all cases except local N3
source, initializes the Local Cache File object; only for non local N3 source fills the Local Cache File
- change accordingly class XMLExport
BUILD SUCCESSFUL
[INFO] Total time: 22 minutes 39 seconds
Je vais mettre en ligne un snapshot d'ici 1/2h.
Maintenant on va pouvoir avancer sur la réactualisation de tout ce qu'il faut quand une source N3 est modifiée par un éditeur interne ou externe sur un fichier RDF ou OWL (typiquement Protégé) ou XML, ou
même un éditeur externe sur un fichier N3 .
Ce qui marche pour l'instant, c'est, quand un éditeur interne jEdit est ouvert sur un fichier OWL+SWRL, et que ce fichier est modifié sur le disque, l'évènement dans jEdit est transmis, et via N3Source.update(), les traductions N3 et SWRL sont mises à jour.
L'évènement dans jEdit est transmis via une nouvelle méthode dans ProjectListener :
public void n3SourceChanged( Project project, N3Source n3 );
Ce qu'il faudrait, c'est que ça marche sans qu'un éditeur interne jEdit soit ouvert.
==> envoyé un mail à la liste <jedit-devel@lists.sourceforge.net>
Je voudrais aussi, de préférence avant la release :
elle sert pour les tooltips dans l'éditeur;
à terme on utilisera des KB Drools dédiées
rdf,rdfs,owl,xmi,ecore,mof,emof,uml
Il faudrait aussi:
Envoyé à la liste "Déductions et EulerGUI en Français"
On a besoin de la bonne sémantique pour les sources N3, en adéquation avec les besoins applicatifs.
Ce n'est pas tout à fait le cas actuellement.
Initialement il n'y avait que des fichiers N3.
Maintenant les aspects suivants doivent être pris en compte:
Lors de l'ouverture du projet, ou lors de réactualisations (update) :
Les besoins applicatifs, c'est de pouvoir montrer dans l'éditeur:
On aussi besoin :
L'API de N3Source:
/** @return name of an N3 File, either the original source, or
else a download or a translation from other format; */
public String getFileName()
/** @return a File corresponding to the Original Source, never
translated, but downloaded if the source is a non-file URL */
File getOriginalSource()
/** The "location" is the absolute location where the original data
stream is available. */
public URL getLocation()
NOTES:
Qu'en dites vous ?
En fait on n'a pas besoin de getOriginalSource() , c'est getLocation() qui joue ce role.
Dans le cas d'une source non locale non N3, getLocalN3() renvoyait une copie de la Source originelle. On a supprimé ça dans IOManager.getLocalCache().
En fait, dans ce cas d'une source non locale, on n'a pas besoin d'une copie de la Source originelle. En effet, les différents outils peuvent se débrouiller avec un URL: editeur jEdit, moteurs d'inférence, traducteurs de SPARQL vers N3.
Cela a créé des problèmes dans les tests :
eulergui.gui.TestEulerGUITooltip
eulergui.gui.TestImportSwrl
deductions.runtime.TestRulesForUserEvents
eulergui.gui.TestGenericGuiGenerationInsertLogical
n3_project.helpers.TestDroolsQuery
eulergui.gui.TestSwingGeneration
eulergui.gui.TestFacebookSearch
eulergui.gui.TestGenericGuiGeneration
eulergui.gui.TestEulerGUIOutputs
J'ai alors rétabli ceci ligne 167 dans IOManager.getLocalCache() :
copy(location.openStream(), new FileOutputStream(localCacheFile));
Comme le montre le test TestEulerGUITooltip, dans le cas d'une source N3 non locale, le cache renvoyé par getLocalCache() est utilisé.
Dans le cas d'une source RDF, SPARQL ou XML, le cache renvoyé par getLocalCache() contient comme il faut la traduction locale en N3. Dans le cas d'une source XML, le cache renvoyé par getLocalCache() contient aussi la traduction locale en N3. Mais au moins en un endroit, une copie de la Source originelle était attendue, comme le montre le test TestEulerGUIOutputs (corrigé dans XMLExport ).
A+B = C*D
Cette solution exploite l'aspect déclaratif de Prolog:
solution :- chiffre(A), chiffre(B), chiffre(C), chiffre(D), resolu(A,B,C,D) . chiffre(X) :- member( X, [1,2,3,4,5,6,7,8,9] ). resolu(A,B,C,D) :- 0 is A*B -C-D, 0 is A+B -C*D, write([A,B,C,D]). |
Le calcul se fait très rapidement:
?- solution. [1, 5, 2, 3] true ; [1, 5, 3, 2] true ; [2, 2, 2, 2] true ; [2, 3, 1, 5] true ; [2, 3, 5, 1] true ; [3, 2, 1, 5] true ; [3, 2, 5, 1] true ; [5, 1, 2, 3] true ; [5, 1, 3, 2] true ; false.
Antelink a lancé depuis quelques semaines un miroir Maven en France à l'adresse suivante : http://maven.antelink.com/index.html
Je suis toujours en alerte si vous rencontrez des problèmes autour de l'utilisation du miroir donc n'hésitez pas à faire remonter les dysfonctionnements ou les améliorations que nos équipes pourraient apporter.
Pour info, l'article publié annonçant le lancement du miroir Maven : http://www.antelink.com/blog/entry/new_maven_mirror_in_france
bases de données ==> modèle relationnel
réutiliser en combinaison les ontologies classiques, les étendre au besoin
Je teste les outils FOL .
J'essaye de démontrer que , si tous les humans ont un parent, alors ils ont un grand-parent ...
Pas si simple ...
lcpvrr@gmail.com: et cela sans tenir compte de l'évolution génétique
J'utilise 2 outils, Prover9 et Mace4; le 1er essaye de démontrer, le deuxième trouve un contre-exemple quand c'est faux .
- 19:52 -
Les règles sont :
parent(x,p) & parent(p,gp) & x!=gp
-> grandparent(x, gp).
parent(x,p) -> x!=p .
grandparent(x,p) -> x!=p .
parent(x,p) -> - parent(p,x).
- parent(x,x).
human(x) -> exists p ( parent(x,p) & human(p) ).
La chose à prouver est :
human(x) -> exists gp grandparent(x,gp).
( - désigne la négation ) ) He bien il me trouve un contre-exemple :
parent(0,1). parent(1,2). parent(2,0).
lcpvrr@gmail.com: et oui il faut exclure addam et ève !
lcpvrr@gmail.com: étrange
mais logique !
- 19:57 -
c'est un exemple où 0 n'a pas de grandparent; ce serait 2, mais on voit bien que cette famille n'est pas normale.
pour le problème de parent je vois deux choses :
- il doit exister au moins un humain sans parent, parent de tous les autres (mon allusion adam et eve)
- il y a aussi une notion de génération, un humain ne peut être parent d'un humain de la génération d'avant
- 09:58 -
J'ai essayé le point 2, en définissant un prédicat ancestor comme la cloture transitive de parent ,
puis en posant - ancestor(x,x).
Mais en fait il me manquait les bonnes parenthèses après all x ...
maintenant ceci marche parfaitement :
all x all p all gp (
parent(x,p) & parent(p,gp)
-> grandparent(x, gp)
).
all x (
human(x) -> exists p ( parent(x,p) & human(p) ) ).
avec le but
human(x) -> exists gp grandparent(x,gp).
Prover9 est un bon outil; il y a une petite IHM ; c'est même installable via Ubuntu .
Le côté fastidieux du développement.
développeur outils intelligent mieux qu'eclipse
déclaratif
décider alternatives
arbre binaire
Red Black Tree
RAD - W4
ergonome
transformation de modèle
http://www.philippe-fournier-viger.com/description_logics/introduction_logiques_de_description.php
Voir "Plan de développement à moyen terme"
En suivant http://fr.wikipedia.org/wiki/RDFa , je me suis amusé à ajouter du RDFa dans mon blog Anglais; ce n'était pas possible ici parce que ça n'est pas du XHTML . Amaya aide un peu, parce qu'il "comprend" la DTD xhtml-rdfa-1.dtd .
laboratoire web sémantique
http://www.lri.fr/theme.de.recherche.php?thm=46
http://www.lri.fr/seminaires_en.php
Ceci est actuellement rare, mais certaines entreprises comme Mission Critical IT ont un objectif similaire, bien que non Open-Source.
cours Web Sémantique
https://moodle.polymtl.ca/course/view.php?id=30
http://leszed.ed-productions.com/tout-sur-le-web-semantique-l-accessibilite-et-sur-le-pdf/
http://www.inrialpes.fr/exmo/teaching/swc/
thésaurus
Vu dans strategie-d-architecture/architecture-et-concepts-du-web-semantique chez clever-age.com
QUELLE ARCHITECTURE POUR LE WEB SÉMANTIQUE
Au-delà de la simple émission de méta-données au sein de pages, de nouveaux genres d’agents logiciels apparaissent sur Internet. Quels services vont-ils apporter ? Comment vont-ils collaborer ?
Une architecture distribuée ?
La notion d’agent
Présentation de l’architecture globale
Présentation des composantes logicielles nécessaires à l’utilisation et à la "participation" au Web Sémantique
Crawler, Index, Méta-base, Service, Raisonneur...
Présentation des techniques employées par chacune de ces briques
Identification des différences, s’il y en a, avec les méthodes traditionnelles
Ce dont nous disposons actuellement ?
ONTOLOGIES ET FONDATIONS LOGIQUES
Faits explicites et implicites
LE FAIT ET SON CONTEXTE
Annotations embarquées ou entrepôts de métadonnées ?
Qui est l’énonceur d’un fait ? De quand date cette information ?... Notion de réification
Le problème de la personnalité et de l’ambiguïté en résultant
Un réseau basé sur la confiance
L’utilisation des signatures digitales
CRÉER SON ONTOLOGIE
Pouvoir raisonner sur les informations collectées est des plus importants. Les relier à nos informations l’est tout autant. Quelles sont les difficultés pour créer les ontologies métiers nécessaires à nos entreprises ?
La méthodologie de modélisation d’une ontologie. Le périmètre d’une ontologie
Classe et instance ? La séparation des aspects appliquée à la conception d’ontologies
Quels outils pour créer une ontologie ?
Quels outils pour annoter des ressources ?
udevadm trigger is not permitted while udev is unconfigured
sudo update-initramfs -u -k all
http://wiki.linux-aide.org/index.php?n=Logiciels.Radios
Pour un champ création associé à une propriétés "objet" au sens OWL, il y a une problématique particulière. Veut-on se lier à un identifiant existant (du bon type), ou peut-on créer un nouvel identifiant
Déductions et EulerGUI en Français : 16 membres !
Applications exemples
Une des choses qui manquent dans le projet ce sont des applications métier construites avec le cadriciel (framework).
Voici quelques conseils pour en construire :
http://groups.google.com/group/deductions-fr/browse_thread/thread/c44219e0c94a9852#
http://www.inf.unibz.it/~calvanese/
http://www.rr-conference.org/RR2010/
FOAF+SSL Simple Login Page
Not Logged In
SSL Client Certificate: detected!
Client Certificate Public Key detected! (HEX):
Modulus : D95D687F953153D5E9872119D0A6F20D33B8524D61A9DB0DC62AEC4C0112CA9825AD08C9ABD706AAE1E7B1B6F81135695BB2E5F13A2C6A0C2681B788FE76711670418139D4C895B5EE2018D7D5A52E86E071DFC6B4C860EBFBA6DAA83E55902CD1B48BD918AAA589832865C673979736E4B1DCC40C2BE86979D53C7ED9A87B7899CA19C6B4F8983B4B2095354A9DE90AEADFFC7CB19DEC416DC645D45DCE1308BF752D326DA09F932E292A2D37DF2DD5194E382F6C2892B4337877821BF001786371583A785FB947790ED4D5E6D5E186CA53ABE114C4ED4ABDB86DBE3CE31C3D649F5EF3C618ED845BFA4558091708D05B81438A956728D04936D04F2D8DFB05
Exponent : 65537
Subject Alt Name (FOAF Profile): detected!: http://foaf.me/jmvanel#me
FOAF Remote Public Key found in http://foaf.me/jmvanel#me:
Modulus : C264F8EDBC2162E49B779F82AA52DFE4C3AA44E3CD42660D41CE1F5BAA7FDABB8EF7CA9E43F845B666FF238770CADBE36C87B729BCF4EE50B38D3317DF36ADF1934ABBD62B56A7E672F500C8DE4280A29102447729DE332E4F62C3CEDE04075E509F4B3C4B555C310C5E35EA049CA641E7F737AB8569D1F4384B51A9580F461C9CA481DB9E44B7039F4647237D4A87B02923582FEF06EE41ACF67E66439B219223D0F755BCFF7F17D434438E42099D14488DD61F764F31A41D8E6A3806D594D9833CDEDA146774ECBB9868BD92509A8BC34D041EA94E107A6FF649B8297D3A303662DB47001278A21688C1FF9D1C1755D7D2098A080A4BDC8367A8687C1BD7B3
Exponent : 65537
http://code.google.com/p/chromium/wiki/LinuxCertManagement
Reto Bachmann , projet Clerezza
http://java.dzone.com/articles/clerezza-apache-project
http://wiki.apache.org/incubator/ClerezzaProposal
A FAIRE
Kaarel, l'auteur de ACE View est rentré de son tour du monde.
Il a mis à jour ACE View par rapport à Protégé 4.1
Hier à PHILOWEB 2010, j'ai rencontré Reto Bachmann, un développeur d'un projet de CMS RDF, Clerezza ;
Il pourrait utiliser EG comme moteur de règles.
Il pourra aussi me conseiller sur OSGi, qu'il utilise avec Maven.
A FAIRE
questions à Conan sur noyau Drools
Envoyé un courriel sur la liste "Déductions et EulerGUI en Français":
Pas encore ouvert:
http://www.parisjug.org/xwiki/bin/view/Meeting/20101012
J'organise un buffet à 19h30 à Versailles avec les développeurs Franciliens intéressés par le projet Déduction .
Il y aura une courte présentation sur l'état des lieux et les perspectives, suivi d'une discussion.
Je propose ces dates:
- 11 octobre, 14, 18, 20
Voici ce qu'on a dit le 15 :
I think this bug should be marked as Critical as it's definitely impossible for a non-geek person to solve it on his(er) own which makes their computer completely unusable until an Ubuntu expert with a boot CD is found.
Les experts (et moi) sont dessus; ça va s'arranger !
https://bugs.launchpad.net/ubuntu/+source/devmapper/+bug/358654
J'apprends en parallèle Mercury et Scala.
Je veux aussi progresser en CHR et apprendre GF (grammatical Framework);
J'ai fait un galop d'essai avec Groovy, grâce à un Canadien Mathieu qui a écrit une dizaine de lignes pour récupérer un mot de passe Subversion sur son dépot local :
http://blog.mycila.com/2010/04/subversion-password-recovery.html
J'ai passé une partie du we à arranger la branche refactoring pour une release .
Complété le "Plan de développement à moyen terme" pour EulerGUI.
A FAIRE
Une chose utilie est de formaliser les règles métier ...
J'ai pris un un eclipse 3.6 tout neuf.
- problème de listener avec fichiers OWL ou N3 :
En ouvrant avec le bouton à la chouette, examples/car_ace.owl , à partir d'un projet non vide par exemple examples/koala.n3p), les sources N3 apparaissent en double dans l'IHM.
Par contre, à partir d'un projet vide ça marche bien
Même chose en ouvrant un fichier N3.
PAS REPRODUIT!
- le panneau texte inférieur après lancement d'un moteur d'inférence : remplissage OK (simple JTextXXX), mais pas d'ascenseur
- deux menus aide quand on ouvre un projet à partir de Fichier / ouvrir projet (local)
assert x > 0 : "x doit être supérieur à 0";
Rien que les règles métiers serait une source d'affaires suffisante, comme le montre Silvie.
Il y a aussi une place à prendre comme conseil en outils avancés: moteurs d'inférences, outils linguistiques, ...
Il y a beaucoup de jeunes diplomés en IA qui ne trouvent pas de travail dans leur domaine.
Il faudrait un Swoogle pour les règles en CNL.
Industriels à l'affut des nouveautés.
Finance
reporting : outil avec langage naturel
requêteur et transformeur pour le source Java
Compétence langage de règles
application à la génération de code Java à partir de règles métier
Compétence OO Java
CHR
CNL
pour générer des formats variés à partir de N3
First-Order Reasoning for Attempto Controlled English
PENG Light meets the Event Calculus
L'incantation pour synchroniser du portable vers le fixe :
d=jmv@192.168.1.165:/home/jmv
rsync -avz $d/jmvanel.free.fr/{notes-informatiques.html,computer-notes_2008.html,Block-note.html,\ images,presentations,ontology,hypervert,ramatuelle} \ ~/jmvanel.free.fr/ rsync -avz $d/bizz ~/bizz rsync -avz $d/ ~/{journal.txt,donnees.txt} rsync -avz $d/administratif/ ~/administratif/ rsync -avz $d/presentations/ ~/presentations
Je pars demain en Sicile :
CNL 2010
http://staff.um.edu.mt/mros1/cnl2010/
http://www.wikicfp.com/cfp/servlet/event.showcfp?eventid=9489©ownerid=320
GOING OUT
From Paris Beauvais(BVA) to Trapani(Sicily)(TPS)
Sat, 11/September/2010 Flight 8642 Depart BVA at 0950 and arrive TPS at 1215
COMING BACK
From Trapani(Sicily)(TPS) to Paris Beauvais (BVA)
Thu, 16/September/2010 Flight 8641 Depart TPS at 0700 and arrive BVA at 0925
Dans ApplicationKB , ça ne peut pas marcher:
public void saveAsN3(File n3OutputFile, URL projetURI) throws IOException {
List<ITriple> l = tripleStore.searchBySubject(projetURI.toString());
Car dans la KB on a:
<file:/monfic.n3> * * .
et on y cherche :
<file:/mon_nouveau_fic.n3> * * .
Il faudrait insérer dans la KB
<> * * .
au lieu de
<file:/monfic.n3> * * .
<> signifie le document courant
TODO [Euler-2010-09-03]
moteurs Prolog en Java: demander à Bart Demoen
Y a-t-il des outils Libres pour la reconnaissance de la parole?
Est-ce qu'une rule base Drools est clonable? Si oui , on peut cloner la KB Swing en cache, ajouter les quelques règles métiers, les faits, et lancer le formulaire. On peut même faire ça systématiquement au lancement de Droools. Cela revient à pré-remplir le projet avec la KB Swing.
Formations Déductions
A FAIRE: mail à Pat Chappel, JY Brunel, Michel VDB, Josef Dworzecki
FAIT mail à Jos, François Fages,
Dans ApplicationKB , ça ne peut pas marcher:
public void saveAsN3(File n3OutputFile, URL projetURI) throws IOException {
List<ITriple> l = tripleStore.searchBySubject(projetURI.toString());
NOT fixed: Save As
Le problème est que XMLEncoder fait un clone du Java bean avant de sauver pour de bon. Donc lors du clonage de ProjectLegacy le membre project est perdu.
Cette architecture avec ProjectLegacy pour la compatibilité ascendante est fragile.
Il aurait fallu tout simplement renommer la classe Project originelle, et créer une classe Java bean Project simple (sans délégation cachée) pour sauvergarde/restitution sous le nom originel. Ainsi on n'aurait pas eu les changements dans le XML.
Je laisse ça de côté jusqu'à mon retour dans une semaine.
Thread [AWT-EventQueue-0] (Suspended (exception MalformedURLException)) URL.<init>(URL, String, URLStreamHandler) line: 567 URL.<init>(URL, String) line: 464 Project.addN3Query(N3Source) line: 357 Project.setN3Query(N3Source) line: 347 ProjectLegacy.setN3Query(N3Source) line: 73 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Trampoline.invoke(Method, Object, Object[]) line: 37 GeneratedMethodAccessor5.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodUtil.invoke(Method, Object, Object[]) line: 244 Statement.invokeInternal() line: 239 Statement.access$000(Statement) line: 39 Statement$2.run() line: 140 AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method] Statement.invoke() line: 137 Statement.execute() line: 128 XMLEncoder(Encoder).writeStatement(Statement) line: 253 XMLEncoder.writeStatement(Statement) line: 331 DefaultPersistenceDelegate.invokeStatement(Object, String, Object[], Encoder) line: 235 DefaultPersistenceDelegate.doProperty(Class, PropertyDescriptor, Object, Object, Encoder) line: 229 DefaultPersistenceDelegate.initBean(Class, Object, Object, Encoder) line: 247 DefaultPersistenceDelegate.initialize(Class<?>, Object, Object, Encoder) line: 395 DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 100 XMLEncoder(Encoder).writeObject(Object) line: 54 XMLEncoder.writeObject(Object) line: 257 XMLEncoder(Encoder).writeExpression(Expression) line: 279 XMLEncoder.writeExpression(Expression) line: 372 DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 97 XMLEncoder(Encoder).writeObject(Object) line: 54 XMLEncoder.writeObject(Object) line: 257 XMLEncoder(Encoder).writeObject1(Object) line: 206 XMLEncoder(Encoder).cloneStatement(Statement) line: 219 XMLEncoder(Encoder).writeStatement(Statement) line: 250 XMLEncoder.writeStatement(Statement) line: 331 XMLEncoder.writeObject(Object) line: 260 Project.save(Project) line: 1091 Project.saveAs(Project, File) line: 1113 ProjectFileManagement$4.actionPerformed(ActionEvent) line: 131 JMenu$1(AbstractButton).fireActionPerformed(ActionEvent) line: 1995 AbstractButton$Handler.actionPerformed(ActionEvent) line: 2318 DefaultButtonModel.fireActionPerformed(ActionEvent) line: 387 DefaultButtonModel.setPressed(boolean) line: 242 JMenu$1(AbstractButton).doClick(int) line: 357 BasicMenuItemUI.doClick(MenuSelectionManager) line: 1223 BasicMenuItemUI$Handler.mouseReleased(MouseEvent) line: 1264 JMenu$1(Component).processMouseEvent(MouseEvent) line: 6267 JMenu$1(JComponent).processMouseEvent(MouseEvent) line: 3267 JMenu$1(Component).processEvent(AWTEvent) line: 6032 JMenu$1(Container).processEvent(AWTEvent) line: 2041 JMenu$1(Component).dispatchEventImpl(AWTEvent) line: 4630 JMenu$1(Container).dispatchEventImpl(AWTEvent) line: 2099 JMenu$1(Component).dispatchEvent(AWTEvent) line: 4460 LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4577 LightweightDispatcher.processMouseEvent(MouseEvent) line: 4238 LightweightDispatcher.dispatchEvent(AWTEvent) line: 4168 ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2085 ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2478 ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4460 EventQueue.dispatchEvent(AWTEvent) line: 599 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
http://www.paris-web.fr/
http://www2010.org/www/
http://www.iw3c2.org/conferences/
2012
WWW2012: The Twenty-first International WWW Conference
Date: April 16 - 20, 2012
Venue: Lyon, France
2011
WWW2011: The Twentieth International WWW Conference
Date: March 28 - April 1, 2011
Program Chairs: Krithi Ramamritham, Sowmyanarayanan Sadagopan
Venue: Hyderabad, India
semtech http://semtech2010.semanticuniverse.com/ http://www.eswc2011.org/
eswc http://www.eswc2010.org/
boite jena andy seaborne http://www.epimorphics.com/web/
http://www.talis.com/platform/
A FAIRE : voir
project.setIndexer( new ProjectsIndexer() );
très lent
travailler et fabriquer au pays.
Audi
Nous ne voulons pas nous substituer à vos experts du métier ni à vos informaticiens, mais les aider à travailler mieux ensemble.
Dans le meilleur des cas, vos modèles métier sont inscrits dans des classes métiers et Java ou autre langage. Même dans ce meilleur cas, une modélisation en logique de de description et règles est plus expressive.
Quel est l'intérêt d'une implémentation joafip de JPA? He bien le mode automatique où la mémoire est libérée au fur et à mesure. Et pour moi comme pour tout le monde , c'est bien de pouvoir essayer plusieurs stockages sans changer l'appli.
Pour la libération automatique de la mémoire il faut utiliser une ExclusiveDataAcessSession de joafip, avec auto save activé, mais ce n'est pas transactionnel.
Mais je ne pense pas que Drools utilise de rollback .
http://www.freelance-info.fr/
En parallèle de ce que fait Luc avec JPA, Je regarde les bases de données OO + JPA .
Au passage je tombe sur ce solide projet universitaire allemand :
ConceptBase - A Database System for Metamodeling and Method Engineering
DataNucleus parait un cadriciel flexible autour de JPA, permettant un stockage sur tout ce qui bouge :).
En fait le point de départ a été la liste de logiciels ici : wikipedia.org Java_Persistence_API
Dans DataNucleus ils mentionnent NeoDatis ODB et db4o .
Après avoir compilé tout avec :
gcc -O2 *.c -rdynamic -ldl -o malice
on peut lancer le moteur d'inférence:
% ./malice YOU CAN ALWAYS TYPE F FOR CHOOSING ANOTHER FAMILY OR P FOR CHOOSING ANOTHER PROBLEM OR . FOR STOPPING THE SESSION. IF YOU TYPE ? AFTER THE NAME OF A FAMILY, I ALSO LIST ITS FORMULATION. IF YOU TYPE ? AFTER THE NAME OF A PROBLEM, I ALSO LIST ITS DATA. CHOOSE A PROBLEM FAMILY AMONG: [&EULER,&KRYPT,&INSANITY,&KRYPTUN,&KRMUL, &SUDOKU,&ROOKSTOUR,&ARROWS,&GOLOMBRULER,&LANGFORDSNUMBER,&AUTOREF,&KAKURO, &LOGIGRAPH,&QGROUP,&CUBETOTAL,&ALLINTERVAL,&STEINER,&SOCCERTABLE] ! &EULER CHOOSE A PARTICULAR PROBLEM OF THE &EULER FAMILY AMONG: [`QUATRE`,`CINQ`, `SIX`,`SEPT`,`HUIT`,`DIX`,`GISIX`,`GISEPT`,`GIHUIT`,`GIDIX`,`INCHUIT`, `INCDIX`,`CINQUANTEUN`,`CHUIT`,`HUITF`,`CENTUN`,`NEUFT`] ! SIX ... 21.3.F{32}=28 ET[F{32}#19,F{32}#21] 22.F{28}=32* 17.3.F{35}=24 ET[F{35}#27,F{35}#22] 18.F{24}=35* I USED MY EFFICIENT METHOD, I FOUND 9862 SOLUTIONS IN 15 SECONDS FOR THE &EULER SIX PROBLEM, AND I DEVELOPED A TREE WITH 13547 LEAVES.
Commentaires:
Les plus:
Autres remarques:
J'ai une partie de la réponse dans cette thèse de 2001 , Intégration de Mécanismes de Réécriture dans un Système de Satisfaction de Contraintes, présentée par Anne LIRET
3.3.2 Comparaison avec les approches I.A.
Les concepts de CHR sont plus généraux que ceux d’Alice.
Apparement MALICE garde trace du source en language ALICE qui a servi à le générer.
Décés de Jean-Louis LAURIÈRE, l'auteur d'ALICE en 1975 avec une thèse dirigée par J. Pitrat:
Ce qui est remarquable dans la page des publications de Pitrat, c'est qu'il n'a pratiquement pas de publications dans des journaux hors de son université. Apparemment il a consacré tout son temps aux thèses.
Cette petite note donne un point de vue nuancé sur lui :
http://tunes.org/wiki/jacques_20pitrat.html
Maintenant mon expertise Ant s'est tranférée sur écrire un pom.xml aproprié à ce qu'on veut, et ensuite je fais mvn eclipse:eclipse ,
ce qui crée le projet eclipse.
Par exemple là vous pourriez déclarer une dépendance à openjpa, c'est à peu près tout
cf http://mvnrepository.com/artifact/org.apache.geronimo.plugins/openjpa/2.2
vous mettez ce tag <dependency> dans un pom.xml vierge , et vogue ( pas la galère ). Le pom.xml vierge c'est juste ça :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > <dependencies> </dependencies> </project>
et après vous faites :
mvn eclipse:eclipse -Declipse.downloadSources=true
et par la même occasion vous téléchargez tous les sources récursivement , accessibles dans eclipse
A FAIRE sur mon portable, pour les vacances:
Tâches prévues:
l'incantation pour synchroniser du fixe vers le portable :
d=jmv@192.168.1.68:/home/jmv rsync -avz ~/doc $d/doc rsync -avz ~/doc-pub $d/doc-pub rsync -avz \ ~/jmvanel.free.fr/{notes-informatiques.html,computer-notes_2008.html,Block-note.html,\ images,presentations,ontology,hypervert,ramatuelle} \ $d/jmvanel.free.fr/ rsync -avz ~/bizz $d/ rsync -avz ~/{journal.txt,donnees.txt} $d/ rsync -avz ~/administratif/ $d/administratif/ rsync -avz ~/presentations/ $d/presentations/ |
Avec mon application EulerGUI, j'ai un téléchargement de + de 30Mo , et j'envisage d' ajouter encore des dépendances ; je pense à embarquer un noyau Maven pour charger les dépendances au fur et à mesure des besoins, comme Maven lui-même. Je devine qu'il faut, au démarrage de chaque fonctionnalité, un appel pour charger si nécessaire les dépendances de cette fonctionnalité. A part ça, y a -t-il d'autres choses à développer ?
groupe Déductions et EulerGUI en Français : 13 membres
http://web-and-philosophy.org/programme/fr/
J'étais sur le point de développer un cache; je pense maintenant utiliser un cache Internet comme Smart Cache (en Java) ou Squid.
Les projets EulerGUI, et l'application elle-même, comprennent des ressources (modèles et règles) qui viennent d'Internet, et que je mets à jour de temps à autre; cela permet de distribuer des projets et une application qui évoluent sans ré-installer ou re-télécharger. Donc un cache Internet permettrait d'accélérer l'ouverture de l'application et des projets.
Après des essais de codage à la main, je vois que la complexité des
en-têtes HTTP (par exemple Last-Modified
n'est pas toujours
présent) fait que c'est un projet à part entière. Et heureusement Smart
Cache le fait en 200 ko et quelques. Je vais donc essayer Smart Cache dans un
processus indépendant, et configurer EulerGUI pour utiliser le proxy Smart
Cache (voir How do I set the proxy to be used by the JVM ). Et si ça
convient, je pourrais l'intégrer à EulerGUI. A noter que Smart Cache ne
semble pas exister sur Maven : query=Smart+Cache.
Mais ce n'est qu'une partie du plan, car je dois aussi cacher les règles une fois compilées par Drools (la compilation prend typiquement 1 à 5 s ). Je pense alors cacher les règles une fois compilées par un autre cache genre OSCache, ou alors développer un cache très simple. OSCache existe sur Maven : opensymphony/oscache/2.4 .
J'ai regardé JPA dernièrement, à cause de Luc, développeur de EulerGUI, et surtout de JoaFip, une persistance Java native. Je lui ai conseillé d'implémenter JPA, pour pouvoir toucher plus de monde.
Je suis en train d'étendre le traducteur Drools pour gérer les objets Java d'une façon compatible à la fois avec Drools et N3, et si possible en gardant la même syntaxe et sémantique N3.
J'ai trouvé une incantation Maven pour tout installer EulerGUI en une ligne :
mvn scm:bootstrap \
-DconnectionUrl=scm:svn:http://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui \
-Dgoals=install
J'ai commencé à jouer avec Mercury sous l'influence de Michel Van Den Buschen, le fondateur de Mission-Critical IT. Ils ont toute une infrastructure basée sur Mercury , OWL et SWRL:
http://www.missioncriticalit.com/pdfs/rules-challenge-2009.pdf
Ca ressemble à ce que je fais avec OWL, Drools, Java et la logique N3.
Hélas ils ne sont pas Open Source.
Il ont un moteur en chaînage arrière.
En OSS, il y a Prova : http://www.prova.ws/index.html?page=documentation.php
Il faut que je l'essaye.
Encore un exemple! C'est tellement fréquent que tout le monde le tolère. Ici c'est sur http://france.meteofrance.com/ :
16°C (Ressentie 16°C)
Pour ceux qui n'auraient pas compris, la température ressentie ne nous intéresse que si elle est différente de celle mesurée.
Des systèmes_de_gestion_de_contenu, il y en a tant !
http://fr.wikipedia.org/wiki/Liste_de_systèmes_de_gestion_de_contenu
Un CMS basé sur RDF ?
http://www.lespetitescases.net/un-cms-base-sur-rdf-y
http://rhizome.liminalzone.org/
Rhizome est un Système de gestion de contenu de type wiki et système de distribution qui expose l'ensemble du site - contenu, la structure et métadonnées en tant que RDF modifiable.
Celui-ci est basé sur Fuxi et Python:
http://copia.posterous.com/semanticdb-a-cms-methodology-for-the-enterpri
En fait ce que je voudrais c'est un système qui utilise une base SPARQL: donc la recherche est:
"Content management" system +SPARQL java
Je suis tombé sur cet article qui met en perspective JPA et RDF :
http://www.semanticuniverse.com/articles-empire-where-rdf-sparql-meet-java-persistence-api.html
Empire est une implémentation de l'API de Java Persistence (JPA) pour RDF et le Web sémantique. Au lieu d'une autre mise en oeuvre à l'aide de bases de données relationnelles, Empire met en œuvre JPA pour RDF et SPARQL,
http://www.jpox.org/docs/1_2/jpa_orm/cascading.html
http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html
Avec Drools, suite à l'introduction de insertLogical, et aux bons conseils sur l'IRC Drools, je simplifie la traduction N3 ==> Drools.
La génération de formulaires ne marche pas encore avec insertLogical, mais j'ai bon espoir.
Et à ce moment, le formulaire pourra disparaitre automatiquement si l'object est détruit :) .
L'esprit du projet Déductions - un programme d'étude
publié sur le groupe deductions-fr
webperf-user-group/evenements/21-juillet-2010
mercredi 21 juillet sur Paris pour une soirée d'échanges à propos des performances web. Il s'agit d'une réunion informelle où tout le monde est le bienvenu quel que soit son rôle ou sa connaissance du sujet.
A partir de 19h un apéritif vous attend pour accueillir tout le monde. Vous aurez l'occasion de rencontrer et discuter avec d'autres passionnés ou professionnels de la performance web.
Je me demande si ça a un avantage de faire un générateur Scala pour Mercury. Puisque Scala est un langage fonctionnel, cela peut réduire le fossé sémantique. D'autre part,
Puisque sur la liste on me dit qu'on a fait un moteur SWRL en chaînage arrière en deux jours, je devrais pouvoir faire quelque chose aussi.
Je pense faire d'abord une version Prolog, puis mercurifier cela.
Je peux aussi bien écrire un processeur N3 que SWRL. Je pourrais réutiliser la syntaxe DCG de Euler/Eye et/ou son PCL (Prolog Coherent Logic). Dans le deux cas N3 et SWRL, il faudra ces types: ruleBase, rule ...
:- module ruleBase. :- interface. :- import_module term. :- import_module list. :- type ruleBase == list(rule1). :- type rule1 ---> rule(antecedent :: rulePart, consequent :: rulePart). :- type rulePart ---> term ; list(term). % ??
Ca compile; "rule" semble être un mot-clé. Réutiliser term est peut-être un peu trop général.
mmc --make ruleBase.mh
Maintenant il y a deux options: ou compiler toutes les règles, ou les interpréter.
Il y a un mot-clé call aussi en Mercury, comme en Prolog:
http://www.mercury.csse.unimelb.edu.au/information/doc-release/mercury_ref/Goals.html#Goals
En fait il faut lire tout le chapitre 8 Higher-order programming.
On peut s'inspirer de "A Couple of Meta-interpreters in Prolog" par Markus Triska.
Autrement, pour me faire la main, je vais prendre un exemple Prolog, comme les relations familiales de "The Art of Prolog", puis mercurifier cela.
Comment vérifier la logique d'une base de règles comme swing-rules3 ?
Comment traiter :
:objetJavaNonEncoreDeclare javam:m1 "arg" .
Il faut explorer les ontologies traitant des formulaires et de l'interaction homme-machine.
Plus j'y pense, plus je vois que Mercury, aussi confidentiel soit-il, est le bon langage tous usages: à la fois OO, fonctionnel strict, logique strict, liaison avec Java et C.
J'ai posé une question à la liste sur comment importer du code Prolog
patrimonial. Il y a 3 problèmes: les coupures, les assert et retract, et la
génération des déclarations pred, func, mode
. Pour les coupures
"vertes" , il suffirait que le compilateur Mercury les accepte au niveau
syntaxique.
Pour les coupures "rouges", il faudrait faire quelque chose à la main. Je me demande si il est faisable de les détecter automatiquement, au moins dans certains cas. Ou alors s'il existe des standards pour déclarer une coupure "rouge".
Pour la génération des déclarations pred, mode , l'idée est que , puisque le compilateur Mercury peut détecter une incohérence entre la déclaration à la main et l'implémentation du corps, il peut aussi bien proposer une déclaration cohérente avec l'implémentation du corps.
Une idée serait de développer un plugin eclipse qui intègre le compilateur compilé en Java.
Il faudrait demander sur la liste SWI des exemples de moteurs d'inférence simples en Prolog pur: FOL, RETE, etc.
Je pourrais proposer au groupe Scala un exposé sur Mercury.
ça commencerait par un "rappel" sur le Prolog pur, par exemple la famille.
On parlerait peut-être du tabling.
Ensuite on montrerait l'équivalence avec Scala pour les aspects fonctionnels.
On prendrait une présentation standard de Scala, et on traduirait en Mercury.
http://hal.archives-ouvertes.fr/index.php
http://groups.google.fr/group/fr.comp.lang.java/browse_thread/thread/9bedbc70a4d7df57#
Guide pratique sur l'intelligence artificielle et la vie artificielle sous GNU/linux
Version française du GNU/Linux AI and Alife HOWTO
John Eikenberry
http://www.resoo.org/docs/HOWTO_fr/AI-Alife-HOWTO/index.html
blog de Aurélien Pelletier : Jrules : ajouté un commentaire
Une règle isolée a un sens
Le moteur enchaîne les règles, pas le programmeur
+ efficace que la programmation classique
Capture bien l'expertise métier
Traduisible depuis et vers le langage naturel
Les « systèmes experts « ont fait leurs preuves
Agoranov est un incubateur public qui a pour mission de faciliter la création d’entreprises innovantes liées à la recherche publique.
Agoranov accompagne des projets innovants dans six principaux clusters : Éco-Innovations, Ingénierie & Services, Logiciels d’Entreprises, Médias & Interactions, Réseaux & Internet et Sciences de la Vie.
Agoranov reçoit le soutien du ministère de la Recherche, du FSE, de la Région Ile de France, de la DRIRE et de la Ville de Paris.
http://www.agoranov.com/
Un article intéressant sur AppEngine de Google, en tant qu'hébergeur d'applications Java:
http://bodysplash.fr/tag/Domain%20Driven%20Design
agendadulibre.org/ year=2010 month=6 region= Ile de France
http://www.pubbs.net/201004/web/39221-implementing-owl2-rl-with-a-rete-rule-engine.html
PLM, avionique, grand comptes
Frameworks difficiles à maîtriser
A FAIRE : scénario sans prononcer le mot ontologie.
Questions et réponses de MK:
MK: outil de dév. pour la prise de décision; ex. centre d'appel, juriste (choisir contrat)
ventes de services
intégrateur: créer un outil de prise de décision
SSII
Atom Feed
François Bancillon
data.gov en France
Projets linguistiques: languageware
UIMA, Gate, link-grammar
INRIA projet MISMUSE, Alain Michard
automate finis StateWalker
http://www.philippe-fournier-viger.com/description_logics/introduction_logiques_de_description.php
http://www.philippe-fournier-viger.com/logiciels.php
J'ai trouvé un exemple avec le processeur Euler. Jos a implémenté la logique floue (fuzzy logic) suivant la méthode de Elpiniki Papageorgiou .
Voir l'exemple médical:
http://eulersharp.sourceforge.net/2003/03swap/example002P.n3
Les règles:
http://eulersharp.sourceforge.net/2003/03swap/fl-rules.n3
Pour faire tourner ça avec Euler en ligne de commande :
eye --nope --plugin http://eulersharp.sourceforge.net/2006/02swap/fcm-plugin.yap http://eulersharp.sourceforge.net/2003/03swap/example002P.n3 http://eulersharp.sourceforge.net/2003/03swap/fl-rules.n3 --query http://eulersharp.sourceforge.net/2003/03swap/example003Q.n3
(possible aussi avec EulerGUI, modulo une erreur corrigée dans le dernier snapshot).
L'ennui, c'est que ça n'est pas connecté avec ATTEMPTO. Mais si ce modèle probabiliste convient, c'est disponible et opérationnel. Il faudrait alors écrire en logique N3 les règles probabilistes. Le reste pourrait être entré avec ATTEMPTO, et les deux pourraient se mélanger.
Je peaufine ma conf. sur OWL + ACE
http://jmvanel.free.fr/presentations/pres-owl-anglais-controle.odp
Suite à un mail de Michel, je m'intéresse aux moteurs en chaînage arrière; en l'occurence Prova, qui vient juste de sortir une version le 10.
Jean-Marc Vanel, développeur principal de EulerGUI, organise une présentation gratuite sur le thème des ontologies OWL et de l'utilisation de l'Anglais Contrôlé, avec démonstration d'outils libres, le lundi 14 juin de 19h à 20h30 à Paris 9ème.
Si vous êtes intéressés par la modélisation (UML, SQL, EMF, DSL, etc ...) , le développement piloté par les modèles (MDA - MDE ), le Web Sémantique, l'intelligence Artificielle et la Logique Formelle, les moteurs à base de règles (Drools, JRules) cette soirée vous plaira.
Autres dates: 22, 29 juin.
Pour s'inscrire, envoyer un courriel à jeanmarc.vanel@gmail.com , avec inscription dans le titre, et la date choisie.
Plus de détails sur l'évènement :
http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
Quel lecteur de musique prendra en compte un serveur Apache qui expose une arborescence de répertoires contenant des fichiers de musique ?
http://www.premier-samedi.org/?p=499
http://www.ossgtp.org/xwiki/bin/view/Main/TousLesMembres
Jean-Marc Vanel, développeur principal de EulerGUI, organise une présentation gratuite sur le thème des ontologies OWL et des langages de règles, avec démonstration d'outils libres, le mercredi 9 juin de 19h à 20h30 à Paris 9ème .
La conférence JUG d'Alexandre Bertails sur le Web Sémantique avait porté sur l'aspect base de données (essentielles dans l'écosystème qui se crée actuellement). Ici on parlera de comment et pourquoi on peut décrire finement les concepts métiers. Cela s'appelle la Logique de Description, qui est le fruit de 30 ans de recherche en représentation des connaissances.
Si vous êtes intéressés par la modélisation (UML, SQL, EMF, DSL, etc ...) , le développement piloté par les modèles (MDA - MDE ), le Web Sémantique, l'intelligence Artificielle et la Logique Formelle, les moteurs à base de règles (Drools, JRules) cette soirée vous plaira.
Pour ceux qui sont déjà venus à mes précédentes présentations, on parlera moins des Logiciels Libres que nous développons (qui ont néanmoins gagné en maturité), et plus des technologies sous-jacentes. Il s'avère qu'on peut passer par un langage humain mais formel (Anglais seulement pour l'instant) pour spécifier des modèles métiers. Cela aide beaucoup à comprendre les formalismes du Web Sémantique (OWL), et les autres.
Autres dates: 14, 22, 29 juin.
Pour s'inscrire, envoyer un courriel à jeanmarc.vanel@gmail.com , avec inscription dans le titre, et la date choisie.
Plus de détails sur l'évènement :
http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
Les outils:
[1] EulerGUI est une plaque tournante autour du langage N3, Open Source, en Java, qui embarque 4 moteurs pour la logique N3, et qui peut importer du RDF, RDFS, OWL, UML, eCore XMI, du code binaire Java, et convertir du XML de base et des XML Schema. Il peut exporter les formats du Web Sémantique, plus XML de base et JavaScript simple. C'est aussi un moteur de système experts; il a une API qui permet d'ajouter un système expert à n'importe quelle application. Les objets Java pouvant être référencés par le système expert, des règles métiers ou génériques peuvent déclencher des appels de méthode. C'est en fait une nouvelle façon de développer, centrée sur les règles et modèles métiers, analogue à l'approche MDA (Model Driven), mais plus simple à mettre en oeuvre, et réutilisant les standards du W3C (RDF, OWL, N3).
[2] Le projet compagnon est Déductions, qui inclut des règles N3 pour générer des formulaires, convertir UML en OWL, etc. Le framework est capable de générer à l'exécution en quelques millisecondes un formulaire à partir du modèle OWL, ce qui ouvre pas mal de portes.
[4] bibliothèques: Jena, Pellet, RDFLib, ...
[5] logiciels serveurs (SPARQL query language) : Virtuoso, Sesame, TDB, SDB
[6] logiciels sur le poste de travail : Nepomuk
[7] moteur de recherches Web Sémantique: watson , swoogle ,
[8] serveurs publics : SPARQL Endpoints actuellement actifs , http://dbpedia.org/ , sindice
http://www.w3.org/TR/2008/WD-owl2-mapping-to-rdf-20080411/
Notions de base: objets, propriétés, valeurs
Objets (== noms propres)
France is a country .
p:F1 is a n:flower.
p:X is something.
Propriétés, valeurs
Comment affecter des propriétés dans ACE View: il suffit d'utiliser un verbe: exemples:
I311 has-as-departure Toulouse .
I311 has-as-arrival Paris .
Paris belongs-to France .
Toulouse belongs-to France .
p:F1's color is blue.
Paraphrase
F1 is a flower.
A color of F1 is blue.
Classes a priori
p:Flossie is a cow.
Propriétés: existence de valeur
Propriétés: type des valeur
Classes définies par description
Every town belongs-to one country .
Classes par description
------------------------
A l'occasion de l'intégration de ACE View, j'ai écrit un traducteur de SWRL vers logique N3, écrit en N3, qui permet d'importer dans notre EulerGUI un fichier OWL+SWRL.
A FAIRE : adhérer :
http://aful.org/professionnels/
Relu mon Questionnaire sur les pratiques de développement logiciel; c'est pas mal :
http://jmvanel.free.fr/offre_services/questionnaire.html
ssh -X dorota@192.168.1.77
ssh -X 192.168.0.102
http://planete.websemantique.org/
Cassandra, vient de FaceBook, 2007, 2008
in prod : FB , twitter, Reddit, Digg
Dynamo --------> partie distribuée
Big table -----> un noeud
optimisé pour écriture
key space ~ database
column family ~ table
row key
column key---->value
Super column: exemple message entre utilisateurs
on dénormalise si on veut accéder par 2 chemins différents
http://www.trueknowledge.com/q/lichen
http://blog.e-node.org/tag/zeitgeist/
Une bonne présentation de Alexandre Bertails sur les inconvénients du relationnel par rapport à RDF :
http://www.lespetitescases.net/index308
http://www.scribo.ws/xwiki/bin/view/Main/WebHome
pas mal, ce site de questions réponses : http://www.semanticoverflow.com/questions/235/simple-cli-useable-owl-reasoner
J'ai compris les affaires OpenId ; comme Google est un fournisseur d'identité ( et presque tous les grands sites ) , je peux utiliser mon adresse de profil Google comme OpenId : http://www.google.com/profiles/106137725737026245498
et ça m'a servi pour finir mon inscription sur http://www.semanticoverflow.com/
[PDF] A Conformance Test Suite for the OWL 2 RL/RDF Rules Language and ...
www.webont.org/owled/2009/papers/owled2009_submission_19.pdf
liens avec communautés OSS : Protégé ( traducteur SWRL-->N3 , SWRL->RETE )
plan de recherche : utiliser CHR
le pendant propriétaire : MissionCriticalIT
http://lacantine.org/
RETETest : was error in calling N3SourcetoDrools translate()
now the test suite passes
http://librarians.will.phear.org:8890/Rene_Barjavel/
PROJET
Jean-Marc Vanel, développeur principal de EulerGUI, organise une présentation gratuite, avec démonstration d'outils libres sur le thème des ontologies OWL et les langages de règles, le ?????? juin de 19h à 20h30 à Paris 9éme .
Pour ceux qui sont déjà venus à mes précédentes présentations, on parlera moins des Logiciels Libres que nous développons (qui ont néanmoins gagné en maturité), et plus des technologies sous-jacentes. Il s'avère qu'on peut passer par un langage humain mais formel (Anglais seulement pour l'instant) pour spécifier des modèles métiers. Cela aide beaucoup à comprendre les formalismes du Web Sémantique (OWL), et les autres.
L'évènement s'adresse aux développeurs qui connaissent un peu la modélisation des données.
Pour s'inscrire, envoyer un mail à jeanmarc.vanel@gmail.com .
Plus de détails sur l'évènement :
http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
Les outils:
[1] EulerGUI est une plaque tournante autour du langage N3, Open Source, en Java, qui embarque 4 moteurs pour la logique N3, et qui peut importer du RDF, RDFS, OWL, UML, eCore XMI, du bytecode Java, et convertir du XML de base et des XML Schema. Il peut exporter les formats du Web Sémantique, plus XML de base et JavaScript simple. C'est aussi un moteur de système experts; il a une API qui permet d'ajouter un système expert à n'importe quelle application. Les objets Java pouvant être référencés par le système expert, des règles métiers ou génériques peuvent déclencher des appels de méthode. C'est en fait une nouvelle façon de développer, centrée sur les règles et modèles métiers, analogue à l'approche MDA (Model Driven), mais plus simple à mettre en oeuvre, et réutilisant les standards du W3C (RDF, OWL, N3).
[2] Le projet compagnon est Déductions, qui inclut des règles N3 pour générer des formulaires, convertir UML en OWL, etc. Le framework est capable de générer à l'exécution en quelques millisecondes un formulaire à partir du modèle OWL, ce qui ouvre pas mal de portes.
[4] bibliothèques: Jena, Pellet, RDFLib, ...
[5] logiciels serveurs (SPARQL query language) : Virtuoso, Sesame, TDB, SDB
[6] logiciels sur le poste de travail : Nepomuk
[7] moteur de recherches Web Sémantique: watson , swoogle ,
[8] serveurs publics : SPARQL Endpoints actuellement actifs , http://dbpedia.org/ , sindice
L'agenda des évènements du Logiciel Libre en France
Agenda Conférences JUG+duchess
Merci à Luc Peuvrier pour ses questions qui ont alimenté cet article.
Une petite devinette N3 . Que signifie ce N3 ?
@prefix : <http://simile.mit.edu/2004/09/ontologies/java#> . @prefix eg: <http://eulergui.sf.net#> . { ?M :hasParameter [ :hasType "urn:java:eulergui.project.Project" ] . } => { eg:answer eg:is ?M . } . |
Le [] est embêtant, pas très naturel ; je le refais sans :
{ ?M :hasParameter ?P . ?P :hasType "urn:java:eulergui.project.Project" . } => { eg:answer eg:is ?M . } . |
Si le sens de "eg:answer eg:is
" vous échappe, ça veut juste
dire "la réponse est ..." .
Réponse : "trouver toutes les méthodes qui prennent en paramètres des classes Projet" .
Actuellement dans EulerGUI le résultat est du N3 brut:
eg:answer eg:is <urn:java:n3_project.ProjectFileManagement$14--init>.
eg:answer eg:is <urn:java:n3_project.ProjectGUI--init>.
eg:answer eg:is <urn:java:n3_project.ProjectGUI--setProject>.
eg:answer eg:is <urn:java:n3_project.SubProjectsManagement--addButton>.
eg:answer eg:is <urn:java:n3_project.N3SourceFromRDF--init>.
eg:answer eg:is <urn:java:n3_project.N3SourceFromRDF--prepare>. ....... etc ...
Cela fait suite à l'ajout de java vers RDF par Olivier Rossel.
C'est intéressant pour de l'analyse de code.
Pour l'instant on a presque tout, à part le corps des méthodes. Donc il n'y a pas de graphe d'appel. Mais pour la relation d'utilisation, comme Olivier est parti d'un outil d'analyse de code, classycle et JDepend, on a des relations d'utilisation précalculées, exemple :
<urn:java:n3_project.ToolsManagement>
a :Class ;
dc:title "n3_project.ToolsManagement"@en ;
:contained <urn:java:n3_project> ;
:located <file:///tmp/jar/eulergui-1.6-SNAPSHOT.jar> ;
:uses <urn:java:n3_project.ProjectGUI> ;
:uses <urn:java:java.lang.InstantiationException> ;
.. etc ...
Avec le prédicat findall de Jos de Roo, hérité du Prolog, on peut rendre la réponse plus compacte:
{ _:d e:findall ( ?M { ?M :hasParameter [ :hasType "urn:java:eulergui.project.Project" ] ; :hasReturnType "" . } ?MLIST ) . } => { eg:answer eg:is ?MLIST . } . |
On a ajouté aussi la condition "le type de retour doit être
void
".
Ca crée une liste:
eg:answer eg:is (<urn:java:n3_project.ProjectFileManagement$14--init> <urn:java:n3_project.ProjectGUI--init> <urn:java:n3_project.ProjectGUI--setProject> <urn:java:n3_project.SubProjectsManagement--addButton> <urn:java:n3_project.N3SourceFromRDF--init> <urn:java:n3_project.N3SourceFromRDF--init> <urn:java:n3_project.N3SourceFromRDF--init> ...... etc
Je reconnais que la syntaxe de e:findall n'est pas à mettre entre toutes les mains. Le e:findall plus haut se lit : trouver tous les ?M tels que la condition entre {} soit vraie, et on met tous les ?M trouvés dans la variable ?MLIST.
Si vous avez eu besoin d'un truc plus puissant que les outils d'eclipse pour naviguer dans, et comprendre le code d'une l'application que vous avez écrite, EulerGUI peut vous aider. Je ne connais pas d'outils qui fassent ce genre de choses avec eclipse; il doit y en avoir, mais peut-être pas avec un langage de requête commode.
Si on modélise un logiciel Java en N3, toutes les requêtes imaginables sont possibles. Toutefois modéliser n'est pas le mot, disons importer; c'est automatique, on donne un répertoire où il y a des jars.
Une requête en language "plus commode" pourrait être traduite en N3, et le résultat N3 traduit en "réponse plus lisible". Il est vrai qu'actuellement le résultat est du N3 brut. Mais on pourrait le formatter plus joliment, et même en faire une liste d'hyperliens pour l'éditeur intégré jEdit.
Voir Reading a Java classes tree dans le Manuel EulerGUI.
ProjectFactory----|>Project
Je suis en train d'étendre le traducteur Drools pour mettre directement en mémoire les objets d'infrastructure.
Pour supprimer l'étape de d'instanciation Java .
http://www.pactepme.org/place-de-marche
Hier soirée bien remplie : d'abord ici: http://sparklingpoint.com/networkg.html , et ensuite là :
http://www.tsfjazz.com/jazzenda.php?id=17044®i=1#anc1 Ce n'était pas Belmondo à la trompette , mais une jeunette qui ira loin : Airelle Besson.
Mais dans le train j'ai pris des notes sur la conception des prochains développements :
Une jolie coquille de moi : this object would be poetentially visible from the Internet.
J'ai découvert un truc eclipse : si on double clique sur un fichier dans la fenêtre d'archivage (commit), on a une fenêtre de comparaison entre versions !
svn diff --diff-cmd /usr/bin/diff -x -bw app_gui-rules2.n3 # => only debug modifs svn diff --diff-cmd /usr/bin/diff -x -bw generic_gui_projection-rules.n3 287c301 < ?CLASS rdfs:label ?LABEL_TEXT . # TODO not necessarily present --- > # TTTTTTTTTTTTTTT ?CLASS rdfs:label ?LABEL_TEXT . # TODO not necessarily present
[fact 0:1:907843762:-259644983:1:<http://exampleS.com#S> <http://exampleS.com#P> <http://exampleS.com#O> .
current.value
0:1:907843762:-259644983:1:<http://exampleS.com#S> <http://exampleS.com#P> <http://exampleS.com#O> .
11:21:13 [AWT-EventQueue-0] [error] PluginJAR: java.lang.NegativeArraySizeException 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.jEdit.getViews(jEdit.java:2479) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at console.commando.CommandoToolBar.init(CommandoToolBar.java:56) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at console.ConsolePlugin.start(ConsolePlugin.java:130) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.PluginJAR.startPlugin(PluginJAR.java:1392) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.PluginJAR.activatePlugin(PluginJAR.java:753) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.JARClassLoader._loadClass(JARClassLoader.java:414) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.JARClassLoader.loadClass(JARClassLoader.java:109) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.ClassLoader.loadClass(Unknown Source) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.Class.getDeclaredConstructors0(Native Method) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.Class.getConstructor0(Unknown Source) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.Class.newInstance0(Unknown Source) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at java.lang.Class.newInstance(Unknown Source) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.PluginJAR.activatePlugin(PluginJAR.java:735) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.PluginJAR.activatePluginIfNecessary(PluginJAR.java:796) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at org.gjt.sp.jedit.jEdit.main(jEdit.java:483) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at eulergui.gui.view.TextEditor.displayEditor(TextEditor.java:222) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at n3_project.EditorManagement.openJavaEditor(EditorManagement.java:140) 11:21:13 [AWT-EventQueue-0] [error] PluginJAR: at n3_project.EditorManagement.doOpenEditor(EditorManagement.java:109)
J'ai mis à jour EulerGUI avec ARQ 2.8.3, il faudrait tester un cas SPARQL.
J'ai mis à jour le CHANGELOG.
Il y a une régression mineure: ajouter un N3 ==> 2 lignes de boutons.
Il serait bien de lancer automatiquement le remplissage de la WM ( sans inférence ) pour avoir les tooltip ( 2h max ) , autrement il faudra passer 5mn à expliquer cette limitation dans la doc. C'est aggravé par le fait que des projets "Euler only" , comme deductions/n3_new/model-rules-coherence.n3p, ne compilent pas avec Drools (avec un popup inamical).
J'ai vérifié que les URL donnent bien lieu à des tooltips .
Il serait bien de changer le niveau de log pour les requêtes du tooltip:
INFO: _N3QueryToDroolsQuery.translate(): droolsSource: query "file:/tmp/result-63595383503245314.n3" // ---------- N3 rule 0 ---------- /* { <http://deductions.sf.net/owl/uml#translatedFromUML> <http://www.w3.org/2000/01/rdf-schema#label> ?DETAIL. } => { <http://deductions.sf.net/owl/uml#translatedFromUML> <http://www.w3.org/2000/01/rdf-schema#label> ?DETAIL. }
jeanmarc. vanel: Compris ce qui ne va pas ici :
jeanmarc. vanel: rule "retractFact.n3 1"
when
$Triple_1 : Triple( subject == "<http://exampleS.com#S>", predicate == "<http://exampleS.com#T>", object == "<http://exampleS.com#U>" )
then
Triple newTriple;
TripleResult newTripleResult;
newTriple = new TripleUser();
newTriple.setSubject( "<http://exampleS.com#S>");
newTriple.setPredicate( "<http://exampleS.com#P>");
newTriple.setObject( "<http://exampleS.com#O>".toString() );
Object t = drools.getWorkingMemory().getFactHandle( newTriple )
;System.out.println( "replaceValue: retract " + t );
if( t != null ) retract( t );
end
jeanmarc. vanel: ça a *l'air* bien , mais en fait le retract( t ) final ne fait rien , car on crée un TripleUser comme objet à rétracter, et c'est un Triple de base qui est dans la KB ;
jeanmarc. vanel: j'avais fait ça à l'époque comme garde - fou, mais ça n'est pas utile ; je l'enlève .
jeanmarc. vanel: J'écoute Chuck Berry,
jeanmarc. vanel: téléchargé 9 CD :-)
lcpvrr@gmail.com: c'est mal ;-)
jeanmarc. vanel: surtout c'est mal de la part de Chuck d'avoir si peu composé depuis les années 70 ! Moi je soutiens les musiciens en allant les écouter en concert.
jeanmarc. vanel: Après l'expérience accumulée sur les transfo. SWRL et OWL, je reviens sur "large & complex ontologies and Déduction application generation" ; ça faisait longtemps.
lcpvrr@gmail.com: avez vous un plan pour faire un ide ?
- 10:28 -
jeanmarc. vanel: Et ce matin j'ai eu l'idée de transformer une base de règles pour y ajouter des instructions de trace;
jeanmarc. vanel: ensuite le résultat des traces en N3 pourra être retraité (à voir) en fonctions de certains buts de l'utilisateur,
jeanmarc. vanel: et aussi tout simplement visualisé dans l'éditeur,
jeanmarc. vanel: du genre plus c'est foncé, plus on a passé souvent dans ce triplet.
jeanmarc. vanel: Un des plans pour améliorer l'IDE *existant*
lcpvrr@gmail.com: eulergui ?
jeanmarc. vanel: oui ça se veut un IDE,
jeanmarc. vanel: en tous cas c ce que j'ai écrit sur la page d'ccueil ;-)
jeanmarc. vanel: Olivier est en train d'ajouter les tooltips qui expliquent les prédicats, et la complétion;
lcpvrr@gmail.com: j'ai mal lu ....
- 10:34 -
jeanmarc. vanel: pas grave, mais "faire un ide" , vous pensiez à quoi ?
jeanmarc. vanel: ça m'intéresse.
lcpvrr@gmail.com: un outil pour générer une application par description
jeanmarc. vanel: je voudrais aussi montrer un graphe de dépendances entre règles et aussi fichiers sources,
lcpvrr@gmail.com: voir aussi gérer les évolutions d'une application générées dèjà deployée
jeanmarc. vanel: tel que si R1 a le prédicat P1 dans sa conclusion , et la règle R2 a le prédicat P1 dans son antécédent , alors R2 dépend de R1 ;
jeanmarc. vanel: notez que ça aussi s'implémente par une règle.
jeanmarc. vanel: un outil pour générer une application par description, j'y pense bien sûr;
- 10:41 -
jeanmarc. vanel: pour l'instant la prochaine tâche c'est : "add to the existing class tree an action to start a Déduction form to enter properties for a new instance"
jeanmarc. vanel: autrement bien sûr l'idée simple c'est de faire un formulaire de type déduction pour définir l'appli. à générer.
- 10:48 -
jeanmarc. vanel: mais pour aujourd'hui, je voudrais avancer sur l'exploitation des expressions OWL complexes,
jeanmarc. vanel: du genre:
jeanmarc. vanel: Everything that is a mother of something is a woman.
jeanmarc. vanel: Every old-lady is something whose pet is an animal and that has-as-pet nothing but cats.
jeanmarc. vanel: Everything that is eaten by a sheep is a grass.
jeanmarc. vanel: etc , cf http://attempto.ifi.uzh.ch/aceview/examples/people_pets_nice.ace.txt
jeanmarc. vanel: l'exploitation de ces expressions OWL complexes ça veut dire :
jeanmarc. vanel: 1. les traduire en règles N3 , comme j'ai déjà commencé
jeanmarc. vanel: 2. les traduire en formulaires adaptatifs et visualisation d'instances ( à faire, idées bienvenues )
- 11:00 -
jeanmarc. vanel: il faut aussi intégrer dans EG une petite base de règles qui détecte les propriétés non déclarées mais utilisées dans une règle.
jeanmarc. vanel: bref, on avance sur l'aspect IDE pour règles :-)
jeanmarc. vanel: au fait , avez-vous essyé le nouvel éditeur jEdit dans EG ?
lcpvrr@gmail.com: non
jeanmarc. vanel: c'est le dernier jEdit 4.3.1 , avec tooltip en cas d'erreur ;
jeanmarc. vanel: et toutes les facilités du jEdit normal: fenêtre composites, highlight , coloration syntaxique pour N3 et tout ...
- 11:07 -
jeanmarc. vanel: autrement , au niveau bizz , le plan c'est : ayant mis sur pied une chaîne qui part de modèles en Anglais contrôlé (version formelle de l'anglais courant ) , cela me permettra dès la semaine prochaine d'aller voir des cobayes , et bientôt le client que j'ai en vue .
- 11:13 -
jeanmarc. vanel: au niveau architectural , j'ai déjà un certain nombre de bases de règles intégrées et intégrables dans EG , et ailleurs, mais pas de pattern générique pour faciliter cette intégration .
- 11:21 -
jeanmarc. vanel: il faut quelque chose basé sur des points d'insertion, mais les points d'insertion à la eclipse ne conviennent pas , car les interfaces ne sont pas spécifiées .
jeanmarc. vanel: A propos on va aussi faire un plugin EG pour Protégé .
lcpvrr@gmail.com: du pain sur la planche
jeanmarc. vanel: en effet
Il faudrait avoir une icône spéciale pour la ou les fenêtre jEdit de EG.
system@tic - pôle logiciel libre
TODO répondre à
http://www.javafr.com/forum/sujet-RECUPERATION-LISTE-ENTITES-ONTOLOGIE_1426629.aspx
LIRE http://linuxfr.org/2010/04/16/26742.html
tâche 3 : N3 Editor : completion and tooltip explaining the properties and classes
Cette méthode dans Project :
public List<ITriple> search( String searchName, Object[] arguments ) {
donne accès à une requête nommée sur la KB utilisateur ( projectGUI.getProject() ).
Il n'est pas nécessaire qu'une inférence ait tourné.
searchName désigne un nom de requête tel qu'elle apparait dans le projet ( e.g. "./truc.n3" ).
Pour tooltip, on ajoutera temporairement avec addN3Search() une requête du genre :
{ <http://predicat_sous_le_curseur>
rdfs:label ?L ;
rdfs:comment ?L ;
rdfs:domain ?D ;
rdfs:range ?R .
} => {
http://predicat_sous_le_curseur>
rdfs:label ?L ;
rdfs:comment ?L ;
rdfs:domain ?D ;
rdfs:range ?R .
} .
Je pense qu'on pourrait facilement, en 1h, ajouter EulerGUI tout entier dans une vue Protégé.
Protégé utilise les plugins façon eclipse, mais il utilise Swing, et Felix au lieu d'equinox.
http://protegewiki.stanford.edu/index.php/PluginAnatomy
Mais l'intérêt serait médiocre, car il n'y aurait qu'une cohabitation dans une même fenêtre.
Là où ça commence à être intéressant, c'est quand EulerGUI a accès à l'ontologie courante de Protégé. Pour ça il faut que la lecture et surtout l'interprétation par EulerGUI d'un fichier OWL étendu soit faite. Dans la version plugin de EulerGUI, on enlèvera le début du menu Fichier.
Ajouter une source N3 devra enrichir l'ontologie courante de Protégé.
trouver des gens influents et technophiles: http://www.journaldunet.com/ , http://www.01net.com/ ,
mots-clé : blog, innovation, technologie, créativité, Web Sémantique, ontologies
Intelligence Artificielle, agents Intelligents, logique, data mining (fouille des données)
cloud computing, architecture, services
bioinformatioque, environnement, renouvelable, énergies, biodiversité
domotique, transports, informatique embarqué
amical pour l'utilisateur (user friendly)
logiciel libre, Open source, communautés
investissements, entrepreneurs, capital risque
trucs: Google: link: site:
Blogs trouvés
http://sciences.blogs.liberation.fr/home/divers/
http://fr.wikipedia.org/wiki/Jean_véronis http://blog.veronis.fr/2010/01/outil-wikio-sources.html
Fichier plugin.xml d'eclipse
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rweb_pluginxml.html
http://www.philippe-fournier-viger.com/description_logics/introduction_logiques_de_description.php
C'est quand même sympa de voir "auditeur ajouté" dans les logs d'EulerGUI !!!
== listener added
Il faudrait passer à Euler 2010-04-03 et au nouvel ARQ;
finir la traduction Française, si Paul ne le fait pas.
Quand à moi , ma tâche micro est de valider l'usage de mon microphone ...
Bonjour
Un mot rapide pour dire les nouvelles fonctionnalités de EulerGUI. L'éditeur pour N3 est maintenant le jEdit complet (4Mo de plus quand même!), avec une coloration syntaxique pour N3 qui existait déjà par Jakub Roztocil.
Olivier et Luc ont mis en place l'association entre la position dans le texte et l'AST de N3 (Abstract Syntax Tree). Cela permettra pas mal de fonctionnalités nouvelles dans l'éditeur N3, par exemple :
On pense même à visualiser l'exécution des règles, par exemple le nombre de fois où une condition a été satisfaite (et 0 est un cas intéressant pour le test de règles).
Traducteur depuis des règles SWRL vers logique N3
Il lance le traducteur sur les fichiers .owl et ajoute les règles N3 traduites au projet [2] . Vous pouvez glisser-déposer ce modèle OWL+SWRL dans EulerGUI :
http://owldl.com/ontologies/dl-safe.owl
On a fait ceci pas seulement pour être plus interopérable avec Protégé, mais surtout pour pouvoir récupérer les modèles construits en quasi-langage naturel avec Ace View [3] .
L'internationalisation est faite, et la localisation Française est en cours. Et il y a un snapshot à l'endroit habituel.
Il a donc matière à faire une livraison cette semaine.
Ceci est un projet Open Source, et je vous invite à nouveau à exprimer vos besoins.
Les demandes de fonctionnalités sont ici (Feature Requests) sont ici :
http://sourceforge.net/tracker/?func=browse&group_id=237733&atid=1104479
Il y en a aussi là :
http://jmvanel.free.fr/computer-notes_2008.html#L93
[1] http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/model-rules-coherence.n3
[2] http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L2219
[3] http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L1038
Cordialement
Je suis en train créer une classe
eulergui.gui.controller.ProjectGUIApdater
qui implémente
ProjectListener, et qui va mettre à jour le GUI quand les sources et les query
changent, conformément au pattern observateur.
La motivation initiale est de mettre à jour le GUI après avoir ajouté la traduction depuis SWRL.
Ca va lancer un train de refactoring, puisque SourceFilesManagement sera à terme simplifié pour ne faire que la mise à jour du "modèle" Project.
ça maaaaaaaaaarche !
J'ouvre dl-safe.owl , et il apparait dans le projet dl-safe.owl.rules.n3 !
http://www.i-ventive.com/component/page,shop.product_details/flypage,shop.flypage/product_id,516/category_id,104/manufacturer_id,0/option,com_virtuemart/Itemid,36/
Tests in error:
testSimpleURLProject(eulergui.gui.TestJavaEditor)
testURLProject(eulergui.gui.TestJavaEditor)
Découvert un nouveau site Français : http://www.websemantique.com/
http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk?view=log
[Jena-devel] Eyeball 2.3 RC 1 mérite d'être testé ...
Installé jEdit 4.3.1 + le plugin highlight; très utile le plugin highlight ! En gros il jaunit toutes les occurences, et montre cela aussi dans la marge globale.
Grâce au plugin highlight, si je mets le curseur sur => , toutes les règles N3 sont indiquées dans la marge de droite.
J'ai coché "word wrap=soft" dans Editing, et middle button dans mouse.
Je pousse le processeur de Jos dans ses retranchements. Le but c'est de traduire du SWRL en N3, en particulier celui qui sort de Attempto ACE View. Je viens juste de renvoyer une nouvelle balle à Jos.
Mais aujourd'hui , il fait 200km à vélo ... Donc aujourd'hui je vais travailler sur "la conscience de l'application" .
A propos de JTree je pense à valoriser le JTree produit par Pellet .
Utilisez vous la vue display dans la perspective Debug d'eclipse? La vue display, hyper utile !!!!
Vous avez, dans le contexte du point d'arrêt , toutes les facilités de l'éditeur Java. Vous pouvez évaluer la sélection avec Control-D. Je l'utilise souvent en collant du code depuis ou vers l'éditeur Java .
L'écueil à éviter avec les IHM intelligentes : http://www.dilbert.com/fast/2008-11-10/
Disons qu'en C/C++ (hormis utilisation d'un garbage collector) il n'y a pas de libération automatique de la mémoire allouée.
Le type de fuite mémoire commun à C/C++ et JAVA est la création d'objet sans destruction (déréférencement dans le cas de JAVA), et c'est la seule raison de fuite que je connaisse en JAVA (hormis un garbage collector défaillant !)
Le but de mon outil est de trouver les objects ajoutés en mémoire après un traitement.
Présentation de l'outil:
http://joafip.sourceforge.net/impl/memoryleak/memoryleak.html
On trouve de tout dans les oeuvres complètes de Dilbert: Dilbert & agilité:
http://www.dilbert.com/fast/2007-11-26/
L'annonce d'hier n'a pas été ignorée : https://sourceforge.net/project/stats/detail.php?group_id=237733&ugn=eulergui&mode=60day&&type=prdownload
Cependant ça ne se reflète pas encore sur la page de téléchargement : https://sourceforge.net/projects/eulergui/files/ deux sulement ce matin.
Continuer après la première erreur de l'analyseur syntaxique d'EulerGUI, ce serait grandiose . Ca pourrait ouvrir des contrats, car tout le monde n'a pas envie d'utiliser des éditeurs graphiques , assez contraignants ( genre éditeur SWRL de Protégé )
C'est impératif de passer les tests
1. régulièrement, par exemple quand vous allez boire un café , etc
2. sur un répertoire indépendant du répertoire de dev.
J'ai des projets pour réécrire la traduction de logique N3 vers Drools, à l'aide
un moteur en langage N3.
Cela revient à utiliser des règles pour les règles !
L'essence de la politique commerciale du logiciel:
http://www.dilbert.com/fast/2009-03-21/
J'aime celle-là : http://www.dilbert.com/fast/2000-03-19/
Les rapports homme -femme:
http://www.dilbert.com/fast/2001-05-18/
La base de règle en N3:
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/swrl-n3-rules.n3
Elle prend comme entrée la représentationen RDF/N3 de cette règle SWRL:
Grandchild(?x) , hates(?x, ?y) , sibling(?x, ?y) ->
BadChild(?x)
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/dl-safe.owl_small.n3
et produit cette traduction en logique N3:
{_:sk1 a :Grandchild. _:sk1 :sibling _:sk2. _:sk1 :hates _:sk2} =>
{_:sk1 a :BadChild}.
Enfin, presque, il devrait avoir des variables avec point d'interrogation au lieu des
nœuds anonymes.
Ceci est un exemple de règles traitait d'autres règles. Notez que cela ne fonctionne pas avec le moteur Drools/N3, il s'exécute avec le moteur N3 de Jos de Roo en Prolog.
Les variables sont reliées aux règles ainsi:
?RULE :hasVariable ?V .
Voici les prédicats élémentaires, où le suivant fait appel au précédent:
Ceci parait plus performant que l'autre solution où 2. et 3. sont inversées:
Une bonne introduction à OWL 1, par F. Lepique de l'EPFL :
http://sewww.epfl.ch/SIC/SA/SPIP/Publications/spip.php?article1182
http://www.lacot.org/public/introduction_a_owl.pdf
http://boita.info.unicaen.fr/plone/ressources/ontologies
Dans la Préface de la traduction Française de OWL, un lexique OWL franco-anglais .
Les réponses de Kaarel sur Ace View et Attempto, voir la liste Attempto :
http://attempto.ifi.uzh.ch/site/mailinglist/
https://lists.ifi.uzh.ch/pipermail/attempto/2010-March/
particulièrement
https://lists.ifi.uzh.ch/pipermail/attempto/2010-March/000462.html
http://mavensearch.net/
http://mvnrepository.com/
aucun des 2 ne connait jenabeans ni EulerGUI
d'ailleurs un jour il faudra organiser la copie vers le dépot central Maven .
TODO
Les contacts de Olivier Rossel
Nancy , Hala Skaf
Pierre Antoine Champin, Lyon: a fait un traducteur RDF ==> XML
François Rioult, Caen - pointu
Mathieu D'Aquin, Mr Watson
Alexandre Passant DERI, Irlande, sémantisation des réseaux sociaux
Fabien Gandon, INRIA Sophia
Jérome Euzenak? INRIA Grenoble
Raphaël Troncy, INRIA?
Gautier Poupeau des petites cases
Participants à la conférence Protégé 2009
Olivier Dameron, Université de Rennes
???
Les visiteurs du canal IRC websemantique.org et les inscrits sur ce site
Karl Dubost (Canadien)
evlist
gunt?
Divers
Xavier Lacot, traducteur de la spec. RDF
http://xavier.lacot.org/index_en.html
J.J.SOLARI traducteur de la spec. OWL
http://1id.com/contact/=jj.solari
http://julien.chauveau.online.fr/ : donne des TD sur OWL et Jena
Frédéric Comte, Ph.D student in the RCR team of the Montpellier Laboratory of Computer Science, Robotics, and Microelectronics (LIRMM). http://www.lirmm.fr/~frcomte/
http://www-inf.it-sudparis.eu/cours/middleware/enseignement/projetsEtudiant/0405/OntologiePocketPC.htm
François Rioult, GREYC - CNRS UMR 6072 - Université de Caen Basse-Normandie
Département informatique - Campus Côte de Nacre, F-14032 Caen cedex Tel: +33 (0)2.31.56.73.79 - Fax: +33 (0)2.31.56.73.30 Office: Sciences 3 - 353
email: Francois.Rioult@info.unicaen.fr
Stéphane Lafrance
http://www.lirmm.fr/~semindoc/ Montpellier
ajouter le nouveau triplet dans la KB, mais avec un statut non donnée utilisateur; lancer les règles; si pas status valide ajouter statut donnée utilisateur.
Note: le statut donnée utilisateur existe déjà, pour distinguer les resources utilisateur des objets d'infrastructure (widgets etc).
punning ?
Note that one should first load the vocabulary countries_base.owl before the ACE text can be parsed.
Nous sommes un éditeur de logiciel Open Source, et en tant que tel, nous sommes très intéressés par l'usage et le retour d'expérience des étudiants sur EulerGUI.
Nous apprécions suggestions, cas d'utilisation et rapports de bogue.
EulerGUI est une plaque tournante pour le Web sémantique, et au-delà (UML, Ecore, XML Schema), avec des règles logiques en N3 pour les requêtes, la transformation de graphe, la validation. Il peut être utilisé tant pour le génie logiciel que pour le raisonnement sur un domaine métier. En complément de Protégé, Pellet et Jena, il peut être utilisé pour l'apprentissage du Web Sémantique et de la conception basée sur des règles.
Premièrement vous avez téléchargé EulerGUI?
Avez-vous essayé la version "snapshot" à http://eulergui.sourceforge.net/tmp/? Si oui quelle révision SCM ; à voir dans Help / About ...
Ecrivez-vous vos ontologies ? Si oui quel éditeur utilisez-vous?
Utilisez-vous des ontologies existantes ? Si oui lesquelles ?
Avez-vous essayé la conversion UML ou XMI ==> N3 ==> OWL ? En auriez-vous besoin ?
Avez-vous essayé la conversion XML de base ==> N3 ? En auriez-vous besoin ?
Vous avez une expérience préalable avec un langage de règles (SWRL, Drools, Jess, JRules, ...)?
Vous avez une expérience préalable avec un langage de motifs (patterns) tel que XSLT, yacc, JavaCC, ANTLR, ... ?
Avez-vous une expérience antérieure avec un langage logique comme Prolog?
Quelles sont les choses les plus agaçantes avec EulerGUI?
Pour le web sémantique, utilisez-vous N3 ou Turtle?
Êtes-vous un développeur Java?
Travaillez-vous sur Windows, Linux ou Mac? Quelle version?
Quelles autres technologies utilisez-vous? Protégé , Jena , autre ?
Y at-il un site ou un rapport sur votre projet? Si non, quel est le site web de votre département de faculté?
Les ontologies, règles et code source que vous écrivez sont -elles disponibles sur Internet ou confidentielles?
Il y aura deux façons de travailler:
A VOIR : les participants de http://barcamp.org/SemanticCampParis
voir "Les attendus du CDD sur EulerGUI"
http://www.clubdescreateurs.com/index.php?tg=articles&idx=Print&topics=50&article=650
http://www.fsf.org/licensing/licenses/agpl-3.0.html
J'ai travaillé, avec l'aide de Jos, sur des règles qui engendrent des règles;
SWRL ==> règles N3 via N3 :-)
eulergui/examples/swrl-n3-rules.n3
Ce n'est pas seulement pour la beauté de la chose; des gens écrivent des règles en SWRL aujourd'hui. Il faut pouvoir les importer .
Et puis l'éditeur SWRL de Protégé n'est pas mal .
Datao par Olivier Rossel est une agréable interface graphique pour RDF, orientée graphes.
Je devrais essayer datao sur Windows ou Linux 32 bits:
When I try to save http://www.w3.org/DesignIssues/N3Logic , Amaya saves it in
$HOME/Documents/www.w3.org/DesignIssues/N3Logic.html
I sent a corrected version to TBL.
Je cherche à trouver qui utilise les technos du Web Sémantique dans des projets de Système d'Information.
J'ai aidé ma fille à faire son TPE : Le projet français dans les énergies renouvelables
Tests EulerGUI
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/ecore.n3p
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/extlibrary.ecore
LARQ - Free Text Indexing for SPARQL
Exit BPML, place à BPEL de Oasis.
fr.wikipedia : Business_Process_Execution_Language
Pour tester, il faudrait avoir quelques instances BPEL.
Je n'ai pas fait les éléments racines, qui seraient nécessaires pour l'export RDF --> BPEL .
Is there a translator from simple Prolog or Datalog to N3 logic or SWRL ?
For example, for N3 logic this Prolog
daughter(X,Y) :- father(Y,X), female(X).
should be translated into:
{ ?Y father ?X . ?X a female . } => { ?X daughter ?Y . }.
A FAIRE
N3 = langage universel
les fonctionalités ont déjà été implémentées à 95%
l'humain d'abord: modèle et règles métier
l'application doit se déduire des spécifications
les concepts informatiques sont aussi des concepts métier
utilisation: transformation, requête, validation
exemples:
Script demo. :
J'ai installé kubuntu-desktop, et 2 paquetages de nom nepomuk*, mais je ne vois rien venir... En plus sous KDE, mes réglages pour avoir 2 écrans en un seul écran virtuel sont à refaire :) . Je reviens à Gnome pour l'instant .
Hier exposé intéressant de Alexandre Monnin sur le "tagging sémantique" (en French dans le texte), lié aux folksonomies. J'ai appris plein de choses sur flickr etc.
J'ai entendu parler de RDF 2:
http://www.w3.org/2001/sw/wiki/RDF2Wishlist
pointing to this by Sandro Hawke:
http://decentralyze.com/2009/10/30/rdf-2-wishlist/
Au passage j'ai revu GRDDL: http://www.w3.org/TR/grddl/ : une usine à gaz!
Olivier Rossel a mis son grain de sel sur les attributs rdf: ID sur les propriétés :
En gros vous devez avoir une référence sur ce triplet.
Ce qui est parfaitement disponible en RDF / XML par l'attribut rdf: ID sur les propriétés.
Malheureusement, il n'existe pas d'équivalent dans d'autres dialectes du RDF.
Je précise qu'il s'agit de travailler en étroite collaboration avec moi; c'est un projet résolument Extreme Programming. Je vais cependant me spécialiser sur la "programmation" à l'aide de règles logiques, et laisser un peu l'aspect Java. Tout n'est pas à faire dans le cadre de cette mission, cela dépendra d'une évaluation plus fine des durées de tâches, et bien sûr des contrats en cours, et des souhaits du prestataire.
D'abord une bonne part de refactoring et de re-architecturation d'EulerGUI.
Q: En bref, je vois que vous demandez un projet de 3 mois; mais il faudrait avant tout définir un cadre de travail avec des objectifs temporels et fonctionnels.
Oui.
Q: Comme je vous l'ai dit, je considère votre projet comme très prometteur et je voudrais pouvoir mieux le cerner.
J'ai bien sûr un wagon de fonctionnalités en vue ( eulergui documentation TODO ) ; pour l'instant il s'agit d'amorcer la pompe ; les priorités sont par rapport: 1. à ce qui paye en terme de démonstration ; 2. au serveur.
Pour le point 1. :
Q: S'il fait le travail, je ne vois pas le souci ;-)
Le souci c'est montrer la cohérence de la démarche, beaucoup y sont sensibles.
Par ailleurs c'est une bonne façon de rentrer au coeur de l'architecture, puisque pour exploiter les données en N3, on va écrire des règles qui traduisent le graphe RDF en graphe d'objets Java (la même technique utilisée dans le génération d'pplications).
Q: je vous comprends, il est toujours difficile de trouver le juste milieu entre un développement pragmatique et l'état de l'art.
Oui, c'est ça , ça a commencé comme une exploration, et maintenant il faut consolider; par exemple les tests il en manque; l'IHM est à peine MVC :-( ...
Toujours point 1. :
ça demande un peu d'explications : actuellement on lance le moteur moteur Drools/N3 dans 2 cas : sur les projets utilisateur ( sources N3, RDF, OWL, UML , etc + règles N3 ) , et dans les les mini-application avec formulaires générées . L.e moteur de règle dans l'appli. elle -même va s'abonner aux évènements, et faire des choses à partir des règles embarquées, pas forcément très sophistiquées, mais utiles, comme savoir que si le projet inclut certains URL, alors c'est un projet d'IHM, et alors il faudra lancer certains outils; décorer les sources du projet en fonction de leur contenu, statut, statistiques et métriques, historique, etc
cela implique: soit de traduire le SWRL en logique N3, soit d'utiliser Pellet + API Protégé / OWL API (qui prennent du SWRL) à la place du moteur Drools / N3 de EulerGUI
il faut avoir une expérience sur l'architecture eclipse;
c'est l'occasion d'avancer sur la génération de plugin à partir d'interfaces Java complétées par une spec en N3;
au passage il faut intégrer l'importation de classes Java en RDF;
c'est aussi l'occasion de lancer une collaboration avec l'équipe Protégé (et cela aura des retombées en terme d'affaires car beaucoup de gens utilisent Protégé)
Deuxième point, le serveur est le dernier rejeton de la famille ( cf EulerGUI server ) . C'est là que portent les meilleurs espoirs d'affaires à court terme. Comme dit le document précité, L'idée est d'exposer via un serveur REST un projet EulerGUI. Pour respecter les bons principes d'architecture du projet (la Modularité Intelligente ), on s'efforcera de faire cela d'une façon générique, un peu comme on peut exposer une API via WSDL.
il s'agit d'exploiter une capacité de Drools, qui n'est pas vraiment spécifiée dans le monde SPARQL et RDF;
comme pour beaucoup d'autres choses, il serait bon d'y avoir accès aussi dans l'IHM
il s'agit d'extraire le plus "intelligemment" possible un petit volume de données approprié au contexte, sur le lequel une base de règles "riche" mais en mémoire pourra travailler
si ça marche bien, ce serait une bonne infrastructure pour combiner gros volume, persistance ET base de règles "riche"
http://www.touilleur-express.fr/a-propos-de-lauteur/
Alexis Saurin, PPS Paris,
Focalisation en Ludique
http://contraintes.inria.fr/~fages/SEMINAIRE/
http://www.inria.fr/rocquencourt/recherche/les-equipes-de-recherche/CONTRAINTES_page
La Ludique” : une introduction
http://prevert.upmf-grenoble.fr/~alecomte/introlude.pdf
http://fr.wikipedia.org/wiki/Jean-Yves_Girard
http://fr.wikipedia.org/wiki/Logique_linéaire
http://www.inria.fr/rocquencourt/recherche/les-equipes-de-recherche/GALLIUM_page
Focalisé sur le logiciel Open Source
Intervenant : Vincent Massol
Reparlé avec Charles, Cédric V.
Proposé sur la liste du JUG.
seminaires/seminaires_gratuits
J'attends les retours sur ma liste privée; ensuite je l'enverrai au JUG.
Je propose un CDD de trois mois (ou une mission pour un indépendant) pour un développeur expérimenté ou senior.
Si vous connaissez quelqu'un qui peut être intéressé, veuillez lui faire suivre ce courriel.
Le poste est en Île de France, avec possibilité de télétravail partiel.
Il s'agit de travailler sur un projet Open Source qui consiste en outils de développement analogues au MDA (Model Driven Architecture). C'est l'occasion de découvrir la programmation à base de règles, le Web Sémantique, l'Intelligence Artificielle, et pas mal d'autres choses sur un projet novateur déployant des concepts qui sont en train de révolutionner l'informatique.
C'est un projet dans les règles de l'art, avec une documentation, des tests, une feuille de route.
Les perspectives sont vastes, dans les développements spécifiques, la création de sites communautaires, les IHM conviviales, l'automatisation et la cartographie des développements, applications et matériels, la gestion de la connaissance au sens large, etc ...
Au-delà des compétences techniques, on demande d'avoir des idées et de savoir les expliquer, et d'aimer apprendre.
Expérience en :
- Java IHM
- Java serveur Web
- eclipse
- projets Open Source
- projets Extreme Programming
- Subversion
- Maven
- services Web
- design patterns
Des plus, il y en a beaucoup:
- eclipse: développement de plugins, EMF
- moteurs de règles (Ilog, Drools)
- développement de compilateurs
- développement de bases de données
- services Web, SOA
- langages fonctionnels (OCAML, Haskell, Scheme, ML, ERLANG, Scala, etc)
- langages classiques: Python, PHP, Ruby, ...
- programmation logique (Prolog)
- Web Sémantique, RDF, OWL, ...
- bases relationnelles, SQL
- modélisation : UML, MDA, DSL, ...
- XML, XSLT, XQuery
Les projets:
http://eulergui.sourceforge.net/
http://deductions.sourceforge.net/
La vision:
http://jmvanel.free.fr/vision.html
http://code.google.com/p/ontosudoku/
Hélas je ne pourrais y aller ici :
http://www.zenika.com/conference/java/secret-de-la-concurrence-java-par-heinz-kabutz
puisque je serai là:
http://sparklingpoint.com/networkg.html
Les réunions sparklingPoint sont toujours intéressantes, et en plus là on va parler RDF et Cie ...
Protégé 4 est assez agréable; mais je viens d'envoyer une suggestion; on verra combien ça prend ...
http://www.java-freelance.fr/formation/evenements-java-en-fevrier-sur-paris
En serrant tous les boulons, ça marche, tant avec Euler qu'avec Drools.
TODO ajouter un article "N3 Design patterns" dans la doc.
{ ?I a exp:Itinerary . ?I exp:distance ?D . ?I list:hasNext ?N . ?N :totalDistance ?NT . (?D ?NT) math:sum ?T . } => { ?I :totalDistance ?T . } . { ?I a exp:Itinerary . ?I exp:distance ?D . } => { ?I :totalDistance ?T . } . { ?I a exp:Itinerary . ?I list:hasNext exp:emptyItinerary . } => { ?I :totalDistance 0.0 . } .
URLs de test:
http://localhost:8080/eulergui_server/n3_query?query-uri=./facebook-search-knows.n3
http://localhost:8080/eulergui_server/n3_query?query-uri=./facebook-search.n3
http://localhost:8080/eulergui_server/n3_query
POST N3 : http://localhost:8080/eulergui_server/n3 ; par exemple :
@prefix <http://jmvanel.free.fr/> . @prefix foaf: <> <http://xmlns.com/foaf/0.1/> . : foaf:maker "Jean-Marc Vanel" .
Ceci renvoie le RDF (JSON aussi possible) :
http://openlibrary.org/b/OL17315745M.rdf
alors que ceci renvoie le HTML:
http://openlibrary.org/b/OL17315745M
Une IHM client REST java : http://code.google.com/p/rest-client/
C'est assez semblable à ce que fait DbPedia:
http://dbpedia.org/data/Barack_Obama.n3 , alors que la page HTML qui montre les champs est ici :
http://dbpedia.org/page/Barack_Obama
Dans FOAF, il y a plusieurs façons de donner le nom : name, firstName, etc. Il faudrait des règles pour ça.
http://semantic-mediawiki.org/wiki/Semantic_MediaWiki
A FAIRE
En fait pour avoir le JRE avec info de debug, il faut prendre la version beta 7 ici :
http://download.java.net/jdk7/m5/
Bon à savoir!
Tout va bien , j'ai pu debugger le JDK ; déverminer en Français.
Si je comprends bien, le plugin SWRL de Protégé 3.4.2 est basé sur un processeur spécifique à Protégé, alors que le plugin SWRL de Protégé 4.0.2 est basé sur Pellet.
Qu'en est-il du projet de faire un processeur SWRL qui s'appuie sur un base de données?
Est-ce que Ace View est bien le plus avancé parmi les outils Attempto ( Ace Wiki, Ace Prolog, ... ), dans l'utilisation des standards OWL et SWRL ?
Je développe un moteur de règles, mais qui pour l'instant travaille en mémoire :( ;
Par exemple une règle à la FaceBook :
Si j'ai deux amis qui ont tous deux Z comme ami, alors Facebook va me faire une proposition d'ami pour Z .
s'écrit en logique N3:
In extenso (s'appuie sur la symétrie de :knows ) :
{ ?C :current_user true . ?C :knows ?X . ?C :knows ?Y . ?X log:notEqualTo ?Y . ?Z :knows ?X . ?Z :knows ?Y . ?C log:notEqualTo ?Z . } => { ?C :friend_proposition ?Z . } .
Simplifié à titre pédagogique :
{ ?C :current_user true . ?C :knows ?X . ?C :knows ?Y . ?X :knows ?Z . ?Y :knows ?Z . } => { ?C :friend_proposition ?Z . } .
en fait on pourrait peut-être détecter dans le source des pattern qui indiquent la possibilité de brancher des observateurs;
par exemple dans Swing, c'est add*Listener
Je ne sais pas régler le volume sonore.
Je viens de découvrir où sont les conversation enregistrées, en cliquant sur Préferences / bavardage / journalisation / ouvrir le dossier des données :
ls ~/.xchat2/scrollback chat.freenode.net FreeNode GimpNet irc.codehaus.org
En tentant de mettre à jour eclipse:
An error occurred while collecting items to be installed session context was:(profile=PlatformProfile, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Collect, operand=, action=). No repository found containing: osgi.bundle,org.eclipse.emf.ocl,1.1.101.v200808291106 No repository found containing: org.eclipse.update.feature,org.eclipse.emf.ocl,1.1.101.v200808291106-108Z7w3119193_2217 No repository found containing: osgi.bundle,org.slf4j.extendable,1.4.3
J'ai désactivé au démarrage plusieurs plugins que je n'utilisais pas, Drools et Cie.
Client Web Attempto , ACE 6.5 in a Nutshell
http://www.lespetitescases.net/amusons-nous-avec-rdfa
Virtuoso Open-Source Edition http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/
A FAIRE EulerGUI :
J'ai cherché avec ces mots-clés
drupal import classes properties
et en 1ère position , il y a ceci qui n'a pas l'air mal : EVOC, qui importe en fait du RDFS, et probablement du OWL :
http://drupal.org/project/evoc
http://drupalcode.org/viewvc/drupal/contributions/modules/evoc/README.txt?view=markup&pathrev=DRUPAL-6--1
Et en + c'est fait par un Français, Stéphane "scor" Corlosquet, mais Irlandais à présent.
Ils importent par défaut un vocabulaire dont je ne me rappelais pas:
qui a l'air pas mal.
<jmv> disons que ce n'est pas le courant principal de l'informatique ...
<jmv> Mais je pense que que c'est le language commun dont a besoin .
<jmv> Tout est un URI ( ou un type de base ).
<jmv> On peut donc mettre son grain de sel sur tout.
Héhé , certains fournisseurs commerciaux y ont pensé : "rule engine" firewall Internet
Je travaille sur mon serveur REST qui donne accès à un moteur de règles (EulerGUI serveur), et je me demande ce qui est le mieux comme outil de test : jWebUnit , HttpUnit , peut-être htmlUnit .
http://blog.ait-chaker.com/?p=150 : une page pas mal de juillet 2009 (laissé une question) .
Mis à jour EulerGUI serveur. Au passage proposé Idea #522: adding Table of Contents in the Trac pages
L'état des lieux est suffisant pour la phase d'intégration avec Drupal :) ; maintenant A FAIRE : notes de frais : modèle et règles métier .
COMMIT
In fact there cannot a body in a GET request
Tested
http://localhost:8088/eulergui_server/n3_query?query-uri=./facebook-search.n3
Committed revision 1207
Added necessary stuff to Drools/N3 API, so that the facts parsed from N3 can be inserted into Drools Working Memory , like this :
List<ITriple> facts = project.getTranslator().translate( new N3Source(n3String) ); project.getTranslator().copyN3factsToDrools( facts );
eulergui_server:
after doing /n3, /n3_query DOES produce the 2 extra triples with foaf2
Committed revision 1206
eulergui_server: now a single dispatcher servlet, plus a TripleStore facade
both N3 search AND entering N3 facts work now
tested with :
http://localhost:8088/eulergui_server/n3_query ; request body:
./facebook-search.n3
http://localhost:8088/eulergui_server/n3 ; request body:
<http://xmlns.com/foaf/0.1/f2> <http://xmlns.com/foaf/0.1/knows> <http://xmlns.com/foaf/0.1/foaf2> .
<http://xmlns.com/foaf/0.1/f1> <http://xmlns.com/foaf/0.1/knows> <http://xmlns.com/foaf/0.1/foaf2> .
http://www.paris-web.fr/2009/-Jeudi-8-octobre-#conf60
http://www.la-grange.net/
Un peu décevant, c'est purement arborescent, et une seule sorte de lien (et de noeud). Décidément pas un outil sémantique.
Voir l'image de mon essai "partage de collections botaniques" .
Voilà mon nouveau titre sur gmail; avant c'était:
Améliore le générateur d'IHM Déductions
COMMIT
Committed revision 1205
eulergui_server: N3 search works now in the server
tested with http://localhost:8088/eulergui_server/n3_query ; request body: ./facebook-search.n3
works with EulerGUI jar SCM-Revision: 1204
N3 searches / Drools queries: update the TripleStore API that is used in the Web server
Pour info., voilà comment la recherche N3 se compile dans EulerGUI (IHM); la bidouille se situe là en gras :
Thread [main] (Suspended (breakpoint at line 152 in N3toDroolsUpdater)) N3toDroolsUpdater.translateQuery(N3Source) line: 152 Project.addN3Search(N3Source) line: 252 SourceFilesView.fireEventsToUpdateN3SourceComponents() line: 87 SourceFilesView.makeButtonsPanel() line: 64 ProjectGUI.layoutFrame() line: 207 ProjectGUI.newWindow(Project) line: 139 ProjectGUI.main(String[]) line: 111
Êtes-vous un indépendant ou salarié ?
Êtes vous un développeur?
Un intégrateur?
Travaillez-vous sur Windows, Linux, ou Mac ?
Faites vous des sites Web ou travaillez-vous dans l'infrastructure (serveurs RDF, SOAP, REST etc ) ?
Quelles technologies Web utilisez vous ?
utilisez-vous un framework PHP tel que Drupal, Joomla, etc ?
Utilisez -vous Protégé, ou OWL en général ?
Utilisez -vous une base RDF SPARQL ?
compare ocaml haskell
http://www.developpez.net/forums/d359372/autres-langages/langages-fonctionnels/comparaison-scheme-ocaml-lisp-prolog/
connaitre son adresse ip externe sous linux:
$ dig +short myip.opendns.com @resolver1.opendns.com
http://groups.google.com/group/deductions-fr : EulerGUI: requêtes nouveau style, serveur
http://starynkevitch.net/Basile/
Traduction en français des recommandations du W3C http://www.la-grange.net/w3c/
Carnets de de La Grange de Karl Dubost http://www.la-grange.net/
http://www.paris-web.fr/2009 : articles intéressants
A FAIRE
http://fr.wikipedia.org/wiki/Programmation_fonctionnelle
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/book-ora203.html
A Tour of Scala : http://www.scala-lang.org/node/104
http://merd.sourceforge.net/pixel/language-study/syntax-across-languages-per-language/
http://hackage.haskell.org/package/swish
http://www.ninebynine.org/RDFNotes/Swish/Intro.html
http://www.mercury.csse.unimelb.edu.au/download/rotd.html
sh configure time make -j 3 make -j 3 787,41s user 63,18s system 97% cpu 14:34,36 total
Installé ces packages sur Ubuntu:
sudo apt-get install ghc6 ghc6-doc libghc6-parallel-dev
libghc6-library-dev n'existe pas :(((((((( .
http://www.haskell.org/haskellwiki/Haskell_in_5_steps
http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes
http://learnyouahaskell.com/starting-out
http://www.haskell.org/sitewiki/images/5/5e/GentleFR.pdf
http://www.haskell.org/hoogle/
Avec ghci il faut entrer les expressions avec let sur une seule ligne, cf interactive-evaluation :
let factorial 0 = 1 ; factorial n = n * factorial (n-1)
ou alors comme ceci avec :{
:{ let factorial 0 = 1 ; factorial n = n * factorial (n-1) :}
Pour avoir la liste des comandes de l'ionterpréteur:
:h
I'm on Ubuntu 9.10, and I don't know the Ubuntu package for library Data.Map
Learn_Haskell_in_10_minutes
import qualified Data.Map as M
http://www.haskell.org/haskellwiki/IRC_channel
#haskell
#haskell.fr
ghc --make -o use_map use_map.hs
Conversion de chaîne en entier:
Prelude> import Char
Prelude Char> digitToInt '3' 3
<jmv_> is there something like -fwarn-all-potential-problems ?
<Peaker> switch() on enums
<Cale> jmv_: hehe
<kmc> jmv_, -Wall
<Cale> jmv_: -Wall
<jmv_> :)
<jmv_> i nkew this one
<kmc> jmv_, but many classes of defect are caught as type errors, anyway
<kmc> which you cannot ignore
<Cale> Consider something like the standard 'map' function
<Cale> map :: (a -> b) -> [a] -> [b]
<Cale> Suppose we write this type signature, and try to define map as follows:
<kmc> unfortunately there's no simple way to get a warning if they're being used
<Cale> map f [] = []
* MissPiggy est parti (Quit: MissPiggy)
<Cale> map f (x:xs) = x : map f xs
* adept est parti (Ping timeout: 246 seconds)
* wu (~wu@77-20-156-82-dynip.superkabel.de) a rejoint #haskell
<JohnnyL> any game companies using haskell for scripting?
<Cale> oops! We forgot to apply f to the first element of the list!
Cale> Sometimes you can even catch infinite loops that way :)
<Cale> You end up with a type which is obviously much too polymorphic
<Cale> because the result never exists.
Ceci est analogue à une définition d'ensemble en math.:
[x*2 | x <- [1..10]]
ProjectGUI.setEulerGUIIcon
jedit.scrollTo( 0, 0);
La syntaxe dépend de l'extension du fichier.
Comment avoir le statut modifé/non modifié dans JEdit-syntax ?
http://www.paris-web.fr/2009/+-Dubost-+
irc://irc.freenode.net/#websemantique
Quand je vois le programme du master "logique Mathématique et fondements de l'informatique" ... Ca me fait envie .
http://www.logique.jussieu.fr/www.dea/Affich.Logique09-10.pdf
http://www.logique.jussieu.fr/www.dea/organisation.php
Je crois qu'il a une façon de spécifier les choses en J2EE pour pouvoie déployer soit SOAP soit REST ?
JEdit syntax sur Maven:
http://www.mvnbrowser.com/artifacts-search.html?page=1&search=jedit
Grâce à Stéphane T., je découvre freebase:
http://www.freebase.com/docs/data/basic_concepts
http://localhost/drupal6/install.php?locale=en&profile=default
http://www.liafa.jussieu.fr/web9/manifsem/listmanifannee_fr.php?typecongres=2
http://datao.wordpress.com/
http://www.scub.net/fr/nos-produits/outil-de-veille-collaborative/
http://gblanc.blogs.linagora.com/index.php/post/2009/08/17/2eme-Assises-franco-allemandes-de-lEmbarque-2009
http://sewww.epfl.ch/SIC/SA/SPIP/Publications/spip.php?article1202
La concurrence:
http://www.tenforce.com/
Ajouté EulerGUI ici: http://websemantique.org/TechniquesEtOutilsPourLeDeveloppeur
Jusqu'à maintenant, je pensais surtout à WordNet pour identifier des concepts. mais maintenant je penserai aussi à Wikipedia.
http://www.faviki.com/pages/welcome/
Cet utilisateur fancophone, Got, a des centres d'intérêts diablement proches des miens:
http://www.faviki.com/person/Got
Mais qui est-ce ?
En fait ça a l'air d'être Gautier Poupeau de lespetitescases.net .
Envoyé à la liste deductions-fr .
On traduit maintenant les requêtes N3 en tant que requêtes Drools.
On pourra donc avoir autant de requêtes qu'on veut par projet EulerGUI.
Par comparaison, les requêtes N3 aujourd'hui sont traduites par des
règles Drools qui ne produisent que des objets de classe TripleResult
. C'est à dire que depuis l'origine , je traduis une requête par un ajout
d'objets TripleResult
, qui ne participent jamais à l'inférence
. Avec cette technologie, le retour de résultat était complètement lié au
processus d'inférence, et il n'y avait qu'une seule requête par projet. C'est
un héritage du processeur Euler en Prolog (toujours présent), qui ne gère
pas la "thruth maintenance", appelée session avec état dans Drools. C'est à
dire qu'avec Drools, on peut ajouter ou enlever des assertions, et l'ensemble
des conséquences des règles est mis à jour après un appel à
fireRules()
.
Je n' abandonne pas les objets TriplesResult
ajoutés aux faits
, car il y a un existant qui dépend de ça :( . Mais à terme cela va
simplifier les choses, aussi bien pour les formulaires générés que pour le
nouveau serveur, et pour l'exportation d'application.
Le serveur EulerGUI marche déjà.
L'idée c'est d'exposer via un serveur REST un projet EulerGUI. Il y aura des services pour:
La sortie sera soit en N-Triples (RDF simplissime à parser), soit en XML via les traducteurs déjà existants dans EulerGUI. Cela pourra donc être du XHTML.
On doit faire une première intégration début février avec un site en Drupal / PHP . Le serveur EulerGUI jouera le rôle d'un système expert.
Le serveur EulerGUI est déjà mis sous Subversion, dans un répertoire indépendant en tant que projet Maven dépendant de EulerGUI, ici :
https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui_server
EulerGUI serveur représente une nouvelle façon d'utiliser l'infrastructure; au lieu de générer des applications, on s'intègre aux applications existantes. Une étape prévue est d'ajouter un système expert qui tourne en arrière plan d'EulerGUI lui-même. Quand ceci sera fait, il restera à écrire un chapitre du Manuel pour expliquer comment le faire dans n'importe quelle application, Java pour commencer. Plus tard, suivant les idées de la "Modularité Intelligente", on pourra automatiser l'intégration d'un tel module dans une application existante.
Des réflexions sont en cours sur comment exploiter une base RDF ( alias SPARQL endpoint ). Plusieurs pistes sont possibles:
C'est foisonnant dans Attempto, le projet Suisse d'anglais pour la logique formelle (anglais contrôlé) . En plus de divers serveurs dont Ace Wiki, il y a aussi ACE View , un éditeur pour ontologies et règles qui est un greffon de Protégé .
Le screencast de 12 minutes.
Ace View est un outil formidable pour entrer, en langage naturel non ambigu, à la fois la définition des classes en OWL, et les règles en SWRL qui complètent les classes. Pour récupérer cela dans l'environnement EulerGUI, il suffira d'écrire un traducteur SWRL ==> logique N3. Cela peut se faire avec les techniques de règles que nous avons déjà appliquées aux traductions UML 2 ==> OWL , eCore ==> OWL, RDFS ==> OWL (voir "Pellet 2.0.1 à partir des sources; règles SWRL").
mkdir src-all cd src-all for f in ../src/pellet-* do unzip -f $f echo $f done ============================= done
J'essaye la classe RulesExample, avec les règles SWRL suivantes:
GoodChild(?x) -> Child(?x) BadChild(?x) -> Child(?x) Grandchild(?x) , hates(?x, ?y) , sibling(?x, ?y) -> BadChild(?x) parent(?x, ?y) , parent(?z, ?y) , differentFrom(?x, ?z) -> sibling(?x, ?z)
qui sont dans le fichier OWL+SWRL:
http://owldl.com/ontologies/dl-safe.owl
En exécutant RulesExample, la sortie montre que les règles sont
appliquées dès que model.prepare()
est exécuté :
Cain has sibling(s): Abel
Abel has sibling(s): Cain
Remus has sibling(s): none
Romulus has sibling(s): none
BadChild instances: Cain
Child instances: Cain, Oedipus
Quand j'ouvre cet URL dans Protégé 4, il y a une boîte de message disant "non implémenté" , mais on ne sait pas quoi .
Ensuite, on ne voit pas que Cain est une instances de BadChild.
Quand j'ouvre cet URL dans EulerGUI, il présente ainsi le fragment de RDF qui correspond à la règle "BadChild" :
dl-safe:BadChildRule a swrl:Imp ; swrl:body ([ a swrl:ClassAtom ; swrl:argument1 dl-safe:x ; swrl:classPredicate dl-safe:Grandchild ] [ a swrl:IndividualPropertyAtom ; swrl:argument1 dl-safe:x ; swrl:argument2 dl-safe:y ; swrl:propertyPredicate dl-safe:sibling ] [ a swrl:IndividualPropertyAtom ; swrl:argument1 dl-safe:x ; swrl:argument2 dl-safe:y ; swrl:propertyPredicate dl-safe:hates ]) ; swrl:head ([ a swrl:ClassAtom ; swrl:argument1 dl-safe:x ; swrl:classPredicate dl-safe:BadChild ]) .
On voit que l'antécédent (la cause) s'appelle body comme en Prolog, et le conséquent s'appelle head.
On doit pouvoir traduire ceci en règles N3 sans trop de mal. La difficulté ce sont les listes.
Je regarde ma liste de Séminaires des Labo. d'Intelligence Artificielle .
Census of marine life: ocean-biogeographic-information-system-obis : pas de RDF là -dedans !
datao de Oliveir Rossel .
http://planb.nicecupoftea.org/
http://quatuo.blogspot.com/2010/01/scub-launches-quatuo-web-semantic.html
Mon profil FOAF est visible ici :
http://xml.mfd-consult.dk/foaf/explorer/?foaf=http%3A%2F%2Fjmvanel.free.fr%2Fjmv.rdf
Il a été créé grâce à foaf-a-matic.
Celui-ci serait peut-être plus étoffé, mais le site est inactif:
http://swordfish.rdfweb.org/rweb/who?mbox=mailto:jeanmarc.vanel@gmail.com
Dommage que mon profil RDf sur websemantique.org soit du XML mal formé:
http://websemantique.org/JeanMarcVanel2/userdata
Ce n'est pas traumatisant de lire ça sur la liste Jena (http://tech.groups.yahoo.com/group/jena-dev/message/42738):
Hello,
My name is Stéphane Traumat and i'm the CEO of a french company named Scub.
I send you this email to inform you that we just released a service based on FOAF and Jena : http://www.quatuo.com
This application, developped for the cloud (Google App Engine) does three things :
* Crawl the web to find foaf progiles (thx to "SeeAlso") and store it in our database.
* Allow anyone to make search on our database and view profile in a human readable way.
* Allow any user having a google account to create/manage and publish his foaf profile.
More information about our product : http://quatuo.blogspot.com/2010/01/scub-launches-quatuo-web-semantic.html
eclipse -vmargs -Xmx800M & # télécharger tous les sources des dépendances: mvn eclipse:eclipse -Declipse.downloadSources=true
Voir ci-dessous "Moteur Drools / N3: exploiter une base RDF" ; mon journal en Anglais : "Trying Joseki from sources" ; "Trying Joseki SPARQL server" .
Voir "A server that wraps EulerGUI" , "Application Web avec moteur d'inférence"
A la place de Project, il faudrait utiliser la class TripleStoreDrools qui implémente ITripleStoreRETE, pour mieux séparer les aspects stockage et Projet.
Au passage, je regarde les interfaces de Jena.
L'interface Model, qui étend ModelCon, ModelGraphInterface, RDFReaderF, RDFWriterF, PrefixMapping, Lock, est énorme pour une interface: plus de 1000 lignes. Il y a en plus l'interface InfModel, pour intégrer des moteurs d'inférence.
A propos, j'ai eu cet échange avec Thorsten Möller :
> You might be interested by our inference engines in N3 logic in
> http://eulergui.sourceforge.net .
Can they be plugged into Jena, that is, accessed via their reasoner API,
cf. [1]? Then it would be quite interesting for us.
-- Thorsten
[1] http://jena.sourceforge.net/inference/index.html
That's a good idea.
Jamis rêvé de mélanger les fonctionalités de deux logiciels, qui sont pourtant avec deux architectures différentes, voire deux langages différents ? C'est un des buts de la modularité intelligente.
C'est foisonnant dans Attempto; il y a aussi ACE View , un éditeur pour ontologies et règles qui est un greffon de Protégé .
Le screencast de 12 minutes.
Le démonstrateur RACE: http://attempto.ifi.uzh.ch/race/
Chaque projet vivant a ses doublons!
QUESTION: comment RACE se compare à Euler(GUI) SWRL de Pellet , etc ?
sudo apt-get install python-setuptools
sudo easy_install conceptnet
Ca c'est facile; maintenant utiliser ces outils c'est une autre affaire. Par exemple: lancer le serveur Web, extraire un sous-ensemble de la base (peut-être en se donnant un rayon).
http://www.w3.org/2000/04/schema_hack/dtd2xsd.pl
Le script Perl transforme un fichier DTD en un fichier XSD utilisable.
Solving Sudoku with OWL and Pellet :
http://code.google.com/p/< wbr>ontosudoku/
Medical ontologies in the OBO language ( translatable to OWL ) :
http://www.obofoundry.org/
OBO:
http://www.cs.man.ac.uk/~< wbr>horrocks/obo/
http://www.cs.utexas.edu/~<
wbr>hamid/research/obo2owl.cgi
This page looks just like an Web page, but look at the page source: it's OWL !
http://sw.opencyc.org/2008/06/< wbr>10/concept/en/Game
I would not be difficult at all to integrate ACE in EulerGUI :
APE is available under the LGPL license, but it can also be used through a REST webservice. For example, an OWL ontology that corresponds to the ACE text
``Every man is a human.''
is given by the URL
http://attempto.ifi.uzh.ch/ws/< wbr>ape/apews.perl?text=Every+man+< wbr>is+a+human.&solo=owlrdf
More details here:
http://attempto.ifi.uzh.ch/< wbr>site/docs/writing_owl_in_ace.< wbr>html
Also:
AceWiki: A Natural and Expressive Semantic Wiki
Pas mal la video ! On voit bien qu'il y a Pellet derrière, mais d'une tout autre façon que dans Protégé. On peut définir des règles qui sont implémentées avec SWRL. Y aurait-il plus de capacités que dans ACE ?
Le nouveau site: https://launchpad.net/acewiki
Posé une question sur la liste attempto !!!
locate libjpl.so
/usr/lib/swi-prolog/lib/amd64/libjpl.so
Après avoir lu le README, on peut maintenant lancer l'incantation :
cd ~/src/acewiki-0.3.1 java -Djava.library.path=/usr/lib/swi-prolog/lib/amd64 \ -jar ~/apps/jetty-runner*.jar webapps.war
http://mirrors.ibiblio.org/pub/mirrors/maven2/org/mortbay/jetty/jetty-runner/7.0.1.v20091125/
On peut maintenant lancer la page:
avec ce contenu:
Attempto Web Applications
Click here to enter the preditor example.
Click here to enter AceWiki.
Click here to enter the ACE Editor.
I modified the PATH so that ape.exe runs from anywhere.
But , when accessing http://localhost:8080/acewiki/
I got this in the terminal server side:
[FATAL ERROR: Could not open resource database "ape.exe": No such file or directory]
java: symbol lookup error: /usr/lib/swi-prolog/lib/amd64/socket.so: undefined symbol: PL_new_atom
After looking at run_preloaded in the SWI Prolog distribution in :
pl-5.8.3/packages/jpl/examples/java/env.sh
I came with this shell fragment that works for me :
ln -s /home/jmv/src/ape/ape.exe . eval `swipl -dump-runtime-variables` export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH/server:$LD_LIBRARY_PATH export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so java -Djava.library.path=$PLBASE/lib/$PLARCH \ -jar $HOME/apps/jetty-runner*.jar webapps.war & |
Je découvre le AceWiki sur AceWiki :
http://attempto.ifi.uzh.ch/webapps/acewikiattempto/?showpage=AceWiki
Pour une fois, j'ai trouvé une video instructive:
http://attempto.ifi.uzh.ch/site/docs/screencast_acewiki.mov
http://en.wikipedia.org/wiki/Modelica
http://www.jmodelica.org/page/28 : a mix of C, Java, Python for the GUI
http://www.ida.liu.se/~pelab/modelica/OpenModelica.html a mix of C, Java
sudo aptitude install antlr libantlr-dev sudo aptitude install libsmlnj-smlnj sudo aptitude install libreadline5-dev libsoqt4-dev sudo cp Compiler/runtime/lpsolve/lib/linux/liblpsolve55.so.64-bit \ /usr/local/lib/liblpsolve55.so sudo ldconfig /usr/local/lib/liblpsolve55.so sudo aptitude install ml-lex ml-yacc libsmlnj-smlnj build-essential bison flex svn co https://openmodelica.ida.liu.se/svn/MetaModelica/trunk mmc cd mmc ./configure make sudo make install cd ../OPENMODELICA_1_5_0_RC1 export ANTLRHOME=/usr/ export CLASSPATH=/usr/share/java/antlr.jar export QTHOME=/usr/ export RMLHOME=~/src/mmc
n-triples2kif.pl An RDF processing tool; converts n-triples to KIF ( Knowledge Interchange Format )
perl n-triples2kif.pl <foo.nt > foo.kif
La négociation de contenu serait peut-être une bonne appplication d'un moteur de règles.
L'exemple FaceBook serait mieux avec les propriétés de FOAF. On pourrait alors exploiter des bases RDF publiques ou des documents RDF publiés sur Inernet.
Il serait bien d'enregistrer les actions utilisateur dans EulerGUI, ne serait-ce que pour pouvoir rejouer des scénarios.
Il faudrait écrire un exemple de règles RDF vers XML, par exemple:
1. est difficile en règles N3, car il faut énumérer tous les termes en position de sujet; puis rassembler (match) tous les triplets qui se rapportent au même sujet. Ceci ne donne rien de bon avec le processeur Drools/N3 , et s'arrête sur un nombre maximum d'opérations avec Euler.
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>. @prefix list: <http://www.w3.org/2000/10/swap/list#> . @prefix html: <http://www.w3.org/1999/xhtml> . @prefix ded: <http://deductions.sf.net/>. _:html html:body _:body . { _:d e:findall ( ?S { ?S ?P ?O } ?LIST_SUBJECTS ). ?SU list:in ?LIST_SUBJECTS . } => { :gen :tuples ?SU . } . { :gen :tuples ?SU . ?SU ?P ?O . } => { _:body html:p (?SU ?P ?O) . } .
J'en ai rêvé, Maven l'a fait!
|
permet de lancer la classe principale du projet.
http://mojo.codehaus.org/exec-maven-plugin/usage.html
J'ai un environnement à peu près bien pour développer le serveur EulerGUI, qui marche déjà avec projet et requête figées.
Mise sous Subversion
mkdir ../for_svn_import cp -r pom.xml src/ ../for_svn_import cd ../for_svn_import svn import . --message 'initial import (but already runs on my machine)' https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui_server Ajout src Ajout src/main Ajout src/main/java Ajout src/main/java/eulergui Ajout src/main/java/eulergui/eulergui_server Ajout src/main/java/eulergui/eulergui_server/ServletN3.java Ajout src/main/java/eulergui/eulergui_server/ServletN3Query.java Ajout src/main/resources Ajout src/main/webapp Ajout src/main/webapp/index.jsp Ajout src/main/webapp/WEB-INF Ajout src/main/webapp/WEB-INF/web.xml Ajout pom.xml Révision 1163 propagée.
Ensuite il faut que le répertoire de travail eclipse courant devienne versionné:
cd ../eulergui_server rm -r pom.xml src/ cd .. svn co https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui_server
VOIR PLUS HAUT <<<<
Pour upload je propose en Français téléinstaller.
Une discussion assez longue:
http://www.commentcamarche.net/forum/affich-1770219-equivalent-francais-du-mot-upload
Je pense que les mots comme "charger", "transmettre" , ne sont pas assez précis et évocateurs.
Le Québéquois "téléverser" non plus.
Je lui préfère télédéposer, déjà suggéré ici, ou téléinstaller.
Dans cet ordre d'idées, "télémettre" serait bien, mais ça a la même prononciation que télémètre.
Dans un genre vulgaire, téléfoutre pourrait marcher, mais ce serait manquer de respect pour le contenu qu'on met en ligne.
Justement, mettre en ligne est une bonne expression.
Il y a une différence sémantique, puisqu'on peut "téléinstaller" un fichier sur un répertoire secret, qui ne sera donc pas en ligne, c'est à dire disponible. Mais 9 fois sur 10, on téléinstalle pour mettre en ligne.
Finalement, télédéposer est bien. Il évoque les dépots, un mot déjà utilisé (même en Anglais) pour les bases de données CVS, Subversion, etc. En plus si le contexte est clair, ça peut s'abréger en déposer.
J'aurais pu dire aussi "surcharger".
plug-in == plugiciel, ou module d'extension , d'après granddictionaire.com .
Finalement le dernier Jetty 7 (à la sauce eclipse) ne marche pas via Maven.
Je fais exactement ce qui est écrit là :
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
On n'échappe pas à ceci:
2010-01-21 10:32:07.395:WARN::FAILED ConstraintSecurityHandler@763f1179@: java.lang.IllegalStateException: No LoginService for org.eclipse.jetty. security.authentication.BasicAuthenticator@243680c1 in ConstraintSecurityHandler@763f1179@ 2010-01-21 10:32:07.395:WARN::FAILED SessionHandler@26945b95@: java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.au thentication.BasicAuthenticator@243680c1 in ConstraintSecurityHandler@763f1179@ 2010-01-21 10:32:07.395:WARN::Failed startup of context JettyWebAppContext@65957a34@65957a34/,file:/home/jmv/src/eulergui_server/eulergui_server/ src/main/webapp/,file:/home/jmv/src/eulergui_server/eulergui_server/src/main/webapp/ java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@243680c1 in ConstraintSecurityH andler@763f1179@ at org.eclipse.jetty.security.authentication.LoginAuthenticator.setConfiguration(LoginAuthenticator.java:34) at org.eclipse.jetty.security.SecurityHandler.doStart(SecurityHandler.java:335)
et bien sûr mon application Web n'est pas en ligne :(. Ce fil de discussion ne m'a pas donné de solution:
non plus ces pages de référence:
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
http://docs.codehaus.org/display/JETTY/Running+Jetty-7.0.x
J'essaye de poser la question sur IRC irc:irc.codehaus.org#jetty
C'est l'ancien Jetty 6 qui marche. Via le Plugin Maven pour eclipse, j'ai choisi cette cible, dans "Run configurations / Maven Build / Goals" , et ça marche:
org.mortbay.jetty:maven-jetty-plugin:6.1.22:run
A noter que pom.xml ne dit absolument rien sur Jetty. Il a été généré par le wizard du Plugin Maven pour eclipse, en demendant un projet Web. Il a seulement mes dépendances, et ceci:
<packaging>war</packaging>
Hélas, sans réglage particulier, la webapp n'est pas rechargée en cas de modifications.
Documentation pour Maven+Jetty+Plugin version 6:
http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin
Avec ceci dans le POM, la webapp est rechargée en cas de modifications:
<build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <scanIntervalSeconds>5</scanIntervalSeconds> </configuration> </plugin> </plugins> </build>
TODO
présenter mieux mon offre: RDF==espéranto, ingrédients== données, modèles, règles
Ce qui est amusant, c'est que tester et construire EulerGUI prend 2 minutes 43 secondes, y compris pas mal d'accès réseau, alors que "téléinstaller" ces 29 Mo sur Sourceforge prend 1/4 d'heure.
wireless sensor network, rfid, internet of things, zigbee, api?, ni, crossbow xbow
J'ai tellement de plugins eclipse qu'un demande de mise à jour prend un temps fou. C'est scotché sur "Calculating requirements 25%" pendant plusieurs minutes, et finalement ça plante par manque de mémoire (j'ai la mémoire par défaut d'eclipse).
J'ai eu deux bloquages successifs avec le debugger eclipse :((((( Obligé d'arrêter brutalement la machine.
Perdu pas mal de temps avec ça .
J'étais dans le callback d'un menu déroulant.
Alors j'ai mis des print .
Alors maintenant, je peux à nouveau faire ce bon veux redémarrage du serveur X.
http://logive.wordpress.com/2009/12/17/ctrl-alt-backspace-le-re-activer-sous-ubuntu/
Moteur de recherche RDF: http://kmi-web05.open.ac.uk/WatsonWUI/
http://watson.kmi.open.ac.uk/REST_API.html
curl -H "Accept: application/json" \ 'http://watson.kmi.open.ac.uk/API/semanticcontent/keywords/?q=cat+dog' wget --output-document=- "Accept: text/ntriples" \ 'http://watson.kmi.open.ac.uk/API/semanticcontent/keywords/?q=plant+pe
Ca roule bien maintenant:
DISPLAY=:1 mvn release:prepare # dans un autre terminal 2: ssh -t jmvanel,eulergui@shell.sourceforge.net create # retour au terminal 1 DISPLAY=:1 mvn release:perform mvn site mvn site:deploy |
Ajouté à la note de version:
Importing non N3 data sources ( RDFS, UML, eCore, XML ) failed on Windows
Annonces: liste personnelle en Français, en Anglais, Protégé users
Quels sont les functions disponibles ?
Dans la base remplie hier, on peut maintenant utiliser la page de requête http://localhost:2020/sparql.html pour entrer ceci:
CONSTRUCT { ?O ?P ?V } WHERE { ?O ?P ?V. FILTER( REGEX( ?V , "n" ) ) }
ce qui est équivalent à :
PREFIX fn: <http://www.w3.org/2005/xpath-functions#> CONSTRUCT { ?O ?P ?V } WHERE { ?O ?P ?V. FILTER( fn:matches( ?V , "n" ) ) }
Via ceci correspond à une requête sur l'URL /sparql avec le paramètre query.
Bien sûr une telle requête SPARQL avec son URL associé peut être incluse dans un projet EulerGUI , voir "SPARQL queries as N3 sources" . Le "endpoint" SPARQL est :
http://www.lespetitescases.net/ou-s-amuser-avec-sparql
VendrEDI lettre de Claude Chiaramonti sur les données de l'échange électronique
Un article Quebécois sur SPARQL: http://sewww.epfl.ch/SIC/SA/SPIP/Publications/spip.php?article1202
cf Configuring Joseki + Pellet + TDB
On va créer une base vierge qui va être remplie via le protocole SPARQL/Update .
On ajoute ceci en gras dans bin/make_classpath
:
for jar in "$LIBDIR"/*.jar lib-tdb/*.jar do # Check for no expansion [ -e "$jar" ] || break #echo "Path: $jar" [ "$CP" != "" ] && CP="${CP}${SEP}" CP="${CP}$jar" done
Si on veut , on peut activer les graphes RDF venant d'ailleurs en changeant
la configuration joseki-config-tdb.ttl
:
# Parameters - this processor processes FROM/FROM NAMED joseki:allowExplicitDataset "true"^^xsd:boolean ; joseki:allowWebLoading "true"^^xsd:boolean ;
Ensuite on peut lancer le serveur :
export JOSEKIROOT=$PWD bin/rdfserver joseki-config-tdb.ttl
Maintenant, on peut peupler la base via le protocole SPARQL/Update : j'envoie une requête POST à l'URL : http://localhost:2020/update/service
avec le contenu:
LOAD <http://aims.fao.org/aos/cwr.owl>
Ca marche !!!!!!! J'ai installé le plugin RESTClient dans Firefox pour envoyer des requêtes HTTP quelconques .
J'ai trouvé ce petit (700ko) OWL via sindice.com en charchant "plants species description petal" . Il n'est pas très intéressant, mais ça va bien pour tester .
On peut aussi charger un fichier local, et pas forcément en RDF/XML :
LOAD <file:///home/jmv/ontologies/foaf.n3>
SUITE PLUS HAUT <<<<<<<<
Voir ci-dessous "Moteur Drools / N3: exploiter une base RDF" ; mon journal en Anglais : "Trying Joseki from sources" ; "Trying Joseki SPARQL server" .
Introduction to RDF Query with SPARQL Tutorial - 2005-05-10 w3.org Talks
Configuring Joseki + Pellet + TDB : est-ce que Pellet fait une classification complète avant la première requête ? Je pense. Voici ce qu'on lit dans le README de Joseki 3:
Modèles d'Inférence
----------------
Joseki héberge les modèles fournis par Jena2, y compris les modèles d'inférence: les données peuvent être combinées avec une ontologie OWL ou une description de vocabulaire RDFS pour produire un modèle RDF qui possède à la fois les triplets déclarés et inférés. La requête est ensuite utilisée pour accéder au modèle.
Héhé ! L'intérêt de ça est que si je peux emballer mes processeurs N3 dans l'API Jena qui va bien, je peux les exploiter avec Joseki !!! Hourrahhhhhhhh !!! Quelqu'un m'a déjà suggéré cet emballage, mais je ne voyais pas l'intérêt.
Est-ce qu'on peut ajouter dynamiquement (voire enlever) un graphe nommé dans Joseki? J'ai l'impression que tout est dans la configuration en RDF/N3. Peut-être dans SPARQL/Update submission to W3C. Gagné: voir "4.2 Graph Management". on peut créer et détruire un graphe nommé:
CREATE [ SILENT ] GRAPH <uri> DROP [ SILENT ] GRAPH <uri>
On peut charger un document dans un graphe nommé:
LOAD <remoteURI> [ INTO <uri> ]
mais l'opération inverse n'est pas possible. En ce sens ça ne marche pas comme XQuery et eXist, car il ne semble pas qu'on ait la traçabilité de de la provenance d'un chargement. Mais c'est un inconvénient mineur.
Est-ce qu'on peut faire une requête SPARQL sur tous les graphes nommés à la fois ? Oui, ceci devrait le faire:
CONSTRUCT { ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p ?o} }
Voir plus de détails ici: clarification-of-meaning-of-graph-clause-in-sparql-with-no-from-clause .
Messages Joseki dans liste jena-dev:
http://tech.groups.yahoo.com/group/jena-dev/msearch?query=joseki&submit=Search&charset=ISO-8859-1
Il pourrait être bien d'exporter un projet EulerGUI comme une configuration Joseki. Chaque source de données pourrait être stockée dans Joseki. En fait on peut soit générer une configuration Joseki en N3, soit générer des requêtes SPARQL/Update qui vont créer la base à partir d'un serveur vide (ou pas) . Quand on aura les fichiers projet en N3, l'option 1 sera facile à implémenter.
L'exemple de suggestions d'amis à la FaceBook (facebook.n3) est un cas particulier où la règle ne lance pas d'autres règles. Elle pourrait donc être une requête SPARQL, après traduction de N3 en SPARQL. On peut le voir, car le prédicat de la conclusion n'apparait nulle part ailleurs. Si ce n'était pas le cas, ou pourrait ajouter les conclusions à la base RDF, et relancer d'autres règles qui utilisent la conclusion. Et ainsi de suite; c'est probablement ce que fait l'intégration entre le base Jena TDB et Pellet. Est-ce cela qu'on appelle logique stratifiée ?
Je suis tombé sur ceci qui décrit une correspondance (hélas indirecte passant par UML XMI) entre STEP et OWL:
http://www.exff.org/exff_legacy/docs/semweb_step.html
http://machinedesign.com/article/xml-for-the-digital-factory-1108
Engineering eXchange For Free : http://www.exff.org/
J'ai relu mon article sur un environnement de développement collaboratif, collabCode, rétrospectivement c'est pas mal; l'idée du glisser-déposer à partir d'eclipse est bien.
Je savais que que X/Open standardise Unix, mais pas qu'il s'est renommé Open Group. Et je ne savais rien sur UDEF (Universal Data Element Framework) et TOGAF (The Open Group Architecture Framework).
The Universal Data Element Framework (UDEF) fournit la base pour créer un vocabulaire contrôlé à l'échelle de l'entreprise. A ce titre, ça m'intéresse. Les catégories de base fournissent une bonne ontologie de haut de niveau pour l'informatique de gestion, et semblent se prêter bien à une écriture en OWL, RDFS, ou UML:
http://www.opengroup.org/udefinfo/defs.htm
Attention, "10. Program" n'est pas un Programme informatique. On trouve ça dans la hiérarchie Product:
p.9 Software.Product a.p.9 Application.Software.Product b.p.9 Network.Software.Product c.p.9 System.Software.Product a.c.p.9 Operating.System.Software.Product
Les catégories de base en Français:
http://www.opengroup.org/udefinfo/htm/fr_defs.htm
Quelques liens intéressants sur UDEF: http://www.udef.com/
http://www.opengroup.org/udefinfo/ : UDEF en Français; comment s'inscrire pour accéder à la définition en RDF. Hélas pas d'URL publiquement disponible sans inscription. Bon , je m'inscris ... Je télécharge tout :
wget --recursive --level=1 --user jm.vanel \
--password ??? http://www.opengroup.org/udefinfo/dl/dlrdf.htm
Je trouve quand même sur Swoogle une version publiquement accessible :
swoogle.umbc.edu?searchString=udef
Il fait une visualisation à la UML qui n'est pas désagréable.
Tout est arrangé sur Windows; plusieurs projets de tests du projet Déductions ne passaient pas. Je devrais faire une version correctrice 1.4.1 lundi.
Si on pense au cas des règles de suggestions d'amis à la FaceBook (facebook.n3), comment exploiter une base RDF avec plein de gens et de relations d'amitié ?
{ ?C :current_user true . # couche 0 ?C :friend ?X . # couche 1 ?C :friend ?Y . # couche 1 ?X log:notEqualTo ?Y . ?Z :friend ?X . # couche 2 ?Z :friend ?Y . # couche 2 ?C log:notEqualTo ?Z . } => { ?C :friend_proposition ?Z . } .
En se basant sur une analyse de la règle, on peut pré-remplir le moteur de
règles (MR) avec des couches successives d'objets, en espérant qu'on
n'explose pas la mémoire. On suppose que le MR est "ensemencé" avec la couche
0, qui vient ici du contexte de la session. Ensuite on tombe sur la couche 1.
On peut traduire assez directement ?C :friend ?X
en une requête
SPARQL sur la base RDF. Le point sensible est qu'il faut remplacer ?C par les
valeurs possibles dans le MR (ici une seule). En fait le MR peut être rempli
par autre chose, mais en supposant qu'il n'y a qu'un User, on peut raisonner
sur le domaine de la propriété fb:friend (c'est à dire User).
Pour la couche 2 (les amis des amis), c'est plus compliqué, car il y a plus d'objets à prendre en compte. Mais en fait on peut traduire toute la règle en requête SPARQL.
SUITE PLUS HAUT <<<<<<<<
Failed tests:
testRelativePathWithDot(n3_project.helpers.TestSimplifiedURI)
testFileNameWithDot(n3_project.helpers.TestSimplifiedURI)
testPath(eulergui.project.TestN3Source)
testpostproc_build(n3_project.TestProjectSequence)
Tests in error:
test_foaf_import2(eulergui.gui.TestGenericGuiGeneration)
test_uml2(eulergui.gui.TestGenericGuiGeneration)
test_ecore2(eulergui.gui.TestGenericGuiGeneration)
testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs)
testXMLOutputFromN3(eulergui.gui.TestEulerGUIOutputs)
test_uml(eulergui.gui.TestSwingGeneration)
test_ecore(eulergui.gui.TestSwingGeneration)
Tests run: 95, Failures: 4, Errors: 7, Skipped: 0
Est-ce dû à une ancienne version de Java ?
Il semble que la création d'un URI donne un URI qui n'est pas reconnu par URI lui-même.
//////// translating Query file:///C:/cygwin/home/maman pro/eulergui/trunk/eulergui/test/ab_query.n3
net.sf.parser4j.parser.service.ParserException: bad uri "file:///C:/cygwin/home/maman pro/eulergui/trunk/eulergui/test
/ab_query.n3"
at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:213)
at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:188)
at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3File(N3Parser.java:167)
at eulergui.drools_engine.ParserLink.parse(ParserLink.java:118)
at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:144)
at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:195)
at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:58)
at eulergui.project.Project.translateN32Drools(Project.java:719)
at eulergui.project.Project.doRunDrools(Project.java:686)
at eulergui.project.Project.runDroolsTriples(Project.java:669)
at eulergui.project.ProjectSequence.runDroolsTriples(ProjectSequence.java:147)
at eulergui.project.ProjectSequence.runDroolsTriples(ProjectSequence.java:143)
at n3_project.TestProjectSequence.testpostproc_build(TestProjectSequence.java:62)
Ajouté test:
TestSimplifiedURI: test a File Name With a Space in the path, like "/a/good stuff/b"
Le 16 janvier: Tout est arrangé sur Windows !
Le meilleur des deux mondes ! Les nombreux modules de Drupal existants, plus une logique métier sur mesure via un moteur de règles. A terme les règles métier seront gérables via des pages administrateur, directement en langage naturel (Anglais Simplifié).
La communication entre les deux va se faire via un serveur HTTP jouant le rôle de système expert. Les messages seront en N-triples ou N3, avec un résultat en XHTML, ou autre suivant les besoins.
Voir "A server that wraps EulerGUI" , "Application Web avec moteur d'inférence"
Excellent tutoriel sur RDF le Web Semantique, via N3 :
http://www.w3.org/2000/10/swap/Primer
La Pierre de Rosette sur les differents formats de données : Anglais, N3, graphe orienté avec libellés, RDF/XML, N-Triples, Prolog, SQL ( 4 variantes ), XML de base, Javascript et Python.
http://www.w3.org/2000/10/swap/doc/formats
sudo apt-get install drupal6
Après cette opération, 69,6Mo d'espace disque supplémentaires seront utilisés.
Faut-il configurer la base de données de drupal6 avec dbconfig-common ? │
│ <Oui>
J'ai choisi MySQL, car cela est le plus standard avec Drupal.
% aptitude show drupal6 Paquet : drupal6 État: installé Automatiquement installé: non Version : 6.12-1.1ubuntu1
Maintenant comment j'accède à mon Drupal vierge ?
Pas si simple!
La réponse: Ubuntu 9.10 (Karmic Koala) ... some more steps are necessary to get Drupal running:
http://drupal.org/node/626404
Ca marche !
Welcome to your new Drupal website!
http://bernard.istasse.perso.neuf.fr/eisis/web/index.html
http://www-rocq.inria.fr/scicos/
http://www.systematic-paris-region.org/fr/index.html
http://xml.coverpages.org/stepExpressXML.html
Ca y est, mon grand retour sur la scène Web ! Voir "A server that wraps EulerGUI" .
Pour l'instant, j'ai créé un répertoire Maven "eulergui_server". Avec le
plugin Maven j'ai créé un projet Web via le prototype Maven Web de base. Via
l'éditeur du plugin Maven, j'ai ajouté les dépendances à EulerGUI, ainsi
qu'à l'API servlet. J'ai ajouté le plugin Maven Jetty 7 le plus récent. Dans
le package eulergui.eulergui_server
j'ai créé deux HTTPServlet :
ServletN3Query et ServletN3 . Via l'éditeur eclipse, j'ai configuré dans
web.xml les deux URL relatifs pour les 2 servlets. Après tout ça, je peux
lancer le serveur Web avec :
mvn jetty:run
Si j'ai bien compris, ça surveille les sources, et peux directement tester les modifications sans relancer les serveur !
http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin/
Pour l'instant http://localhost:8080/n3_query me fait :
HTTP ERROR: 503
Problem accessing /n3_query. Reason:
Service Unavailable
Powered by Jetty://
EN CHANTIER - résolu le 21 janvier
http://repo1.maven.org/maven2/org/kohsuke/jetty/jetty-maven-plugin/7.0.0pre1/jetty-maven-plugin-7.0.0pre1.pom
Le répertoire contient :
% ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' . |-src |---main |-----java |-------eulergui |---------eulergui_server |-----resources |-----webapp |-------WEB-INF |-target |---classes |-----eulergui |-------eulergui_server |---eulergui_server |-----META-INF |-----WEB-INF |-------classes |---------eulergui |-----------eulergui_server |-------lib |---maven-archiver |---test-classes |---tmp |-----jsp |-------org |---------apache |-----------jsp |---war |-----work
( merci à Dem Pilafian pour ce joli script ).
avec ou sans RDF
Discussion sur RESTLET sur theserverside.com .
Lien intéressant sur le DDD (Domain Driven Design) de Eric Evans.
http://www.itaware.eu/category/francais/java-2/
A LIRE:
Le Web sémantique, un vaste terrain d'applications encore à défricher
http://www.lemondeinformatique.fr/dossiers/lire-le-web-semantique-un-vaste-terrain-d-applications-encore-a-defricher-25-page-3.html
Il faudrait vraiment avoir des pages pour chaque catégorie intéressée par mes projets: connaisseurs du Web Sémantique, les tenants du MDA "classique" , les spécialiste des bases de données, les prestataires PHP, ...
Hier. Génial ! Tout ce que vous avez toujours voulu savoir sur gcc, par un "insider" qui a son sens critique.
http://starynkevitch.net/Basile/
Il m'a fait connaître Jacques Pitrat, qui travaille sur ce qu'on appelle l'Intelligence Artificielle "forte".
http://pagesperso-orange.fr/jacques.pitrat/
date --rfc-3339=seconds
2010-01-11 17:20:50+01:00
cf "Un modèle d'affaires" ; "Exemples pour une application avec moteur d'inférence" .
On envisage un moteur de règles qui sera derrière un Service Web Intelligent alias "SWI". Ces services seraient intégrables dans les modules standard sur étagère, d'une ou plusieurs façons qui restent à préciser. Je vois (au moins) deux architectures possibles:
<error>explication de l'erreur</error> <!-- les
données envoyées sont incohérentes par rapport au contexte
-->
<warning id="id créée">explication de
l'avertissement</warning>
<success id="id créée">commentaire ou message de
confirmation</success>
On va partir sur l'option 2, un peu moins simple à intégrer , mais plus simple à développer pour moi. Les paramètres des requêtes HTTP REST seraient définis au cas par cas. Par exemple pour le cas note de frais: saisie l'URL serait du genre:
http://swi/note_de_frais/facture?payeur=p1&fournisseur=f1&montant=123.45&date=2010-01-11+17:20:50
Où payeur et fournisseur sont des Id.
Pour respecter l'architecture REST, ce serait mieux si c'était une requête PUT.
La réponse serait un XML avec une des 3 balises ci-dessus, mais ça peut être un autre format, et il peut y avoir d'autres balises métier.
Si pour toi c'est commode d'envoyer et de recevoir un des formats pour un graphe d'objet: (N-triples, JSON, ...), tant mieux.
Voir "A server that wraps EulerGUI" pour plus de variantes sur l'option 2.
http://www.clubic.com/article-252146-1-utiliser-webcam-linux-tour-horizon.html
http://mxhaard.free.fr/spca5xx.html
Je pense à
PersistentDataProject---|>Project
avec une méthode import( String n3URL )
qui va remplir la D
base joafip avec un fichier N-Triple ( sans passer par Parser4J pour lire un
gros fichier ). N-Triple: triplets simples avec URI in extenso; un triplet par
ligne.
jeanmarc. vanel: ou alors carrément TestPersistentProject
,
avec une méthode populate( int n )
, qui remplir avec une base
"FaceBook" créée par programme .
lcpvrr@gmail.com: le PersistentProjet aurait un constructeur avec la base joafip comme argument ?
Pourquoi pas ; je pensais plutôt à un fichier truc.joafip
pour le projet truc.n3p
.
lcpvrr@gmail.com: il faudrait qu'il regarde si une ruleBase avec une working memory existe, sinon la créer
lcpvrr@gmail.com: voir une option ouverture avec effacement
lcpvrr@gmail.com: recreation systèmaique
J'arrange mon traducteur Drools pour qu'il prenne en compte
( ?X ?Y ) math:sum ?Z .
dans le maximum de cas, litéraux ou variables, variables liées ou non . 3 puissance 2 cas , en comptant que ?X et ?Y jouent le même rôle.
C'est là que l'implémentation Prolog de Jos est avantageuse ! Mais il ne gère pas la modification de données, ce qu'on appelle "truth maintenance", alors que Drools le fait.
La "truth maintenance" , ça consiste à enlever de la base de connaissance toutes les conséquences de ce qui a été retracté (enlevé).
Si joafip n'était pas là , je rechargerai un gros fichier N3 ; mais dans il faut le temps de lire le N3 et d'écrire le foafip , c'est long; d'où l'idée de débrayer la liaison entre RuleBase et WorkingMemory.
Il y a des limitations importantes dans le générateur Java, que je n'ai pas eu le temps de lister ...
Aujourd'hui j'ai ajouté les fonctions pour somme et produits dans Drools-N3 .
Et je viens d'envoyer l'annonce 1.4 pour les suiveurs en anglais de EulerGUI.
Je fais les annonces petit à petit pour voir l'impact de chaque ...
J'ai essayé NeOn , et ça ne tourne toujours pas sur ma machine Linux 64 bits , malgrè plusieurs messages échangés .
http://en.wikipedia.org/wiki/Berkeley_DB
J'ai lu How do I create properties with duplicates and/or ordered values (with rdf:Lists)? . En fait ça ne se passe pas exactement comme décrit. J'ai alors découvert que pour utiliser rdf:List avec Protégé 4, il faut importer la définition de RDF Schema en tant qu'ontologie :
http://www.w3.org/TR/rdf-schema/rdfs-namespace
Pour modéliser un itinéraire passant par plusieurs villes, je ne sais pas quelle est la bonne pratique: utiliser rdf:List ou rdf:Seq, ou autre chose.
Questions posée sur la liste Protégé:
http://article.gmane.org/gmane.comp.misc.ontology.protege.owl/31431
Ajouté le 20 janvier
http://www.daml.org/2001/06/expenses/
cf Spécification et idées de logiciels, Principes IHM (à propos de l'agenda Google) , General GUI principles
contrôle de vraisemblance: plusieurs déjeuners le même jour, etc; lieux trop éloignés le même jour, sommes hors normes
http://nosql-databases.org/
PERSISTANCE-OBJET-DANS-FICHIER
A noter que le site javafr.com est en ASP, pas très cohérent pour un site sur Java !
J'ai ajouté des titres manquants dans ce journal, c'est satisfaisant de voir la diversité des sujets abordés.
Mise à jour de mon agenda: sparklingpoint ; Parinux;
Conférence GCC parinux.org mardi 12 janvier 2010
Mon cas est le plus simple qui soit.
J'ai fait un rm * malencontreux et Control-C au milieu, et plus rien
depuis sur ce disque USB.
Palimpsest me dit le device:
/dev/sdc1
Je me suis décidé pour magicrescue:
http://www.student.dtu.dk/~s042078/magicrescue/
Il semble + perfomant que foremost, lequel connaît + de types de fichiers.
http://foremost.sourceforge.net/
En tous cas les deux s'installent via synaptic :).
magicrescue -d /home/jmv/recup_usb_disk -M io -r mp3-id3v2
En fait , je je ne l'ai pas fait, car il y avait trop de fichiers restants j'ai eu peur d'avoir trop de travail juste pour des MP3.
Alias /zizique "/home/jmv/Musique" <Directory "/home/jmv/Musique" > Options Indexes FollowSymLinks MultiViews # ExecCGI AllowOverride All Order allow,deny Allow from all </Directory>
En clair "Perspectives pour un Système d'Information géré par l'Intelligence Artificielle".
Dans la pratique courante, les Modèles métier existent, mais ils sont normatifs.
De plus ils sont éclatés entre:
Quand aux règles métier, elles sont rarement formalisées, car la culture informatique concernant les moteurs à base de règles est peu répandue, malgré une percée de Ilog Rules, et son pendant Open Source Drools.
Mettre les modèles et règles métier au centre du processus, implique de pouvoir :
Les techniques de génération intelligente d'application, qui reproduisent le raisonnement d'un concepteur humain, permettent de réaliser des objectif ci-dessus.
Par exemple un expert sur le déploiement d'infrastructures CMS (Content Management System) en PHP telles que Drupal, pourrait être assisté, voire remplacé, par un système expert. En entrée, le système expert pose quelques questions simples, puis passe dans un mode libre où l'on peut entrer plus d'informations, en choisissant d'autres questions auxquelles répondre. En sortie, il produira des scripts permettant d'automatiser le déploiement sur le type de plate-forme choisi.
Les questions porteront, entre autres, sur le type de fonctionnalités désirées (forums, CMS, Wiki, CRUD), et donc de modules en mettre en place. Les fonctionnalités demandant un développement spécifique seront intégrées sous forme de "marque-place".
Des grands systèmes aux applications Web, en passant par les applications lourdes et la bureautique, l'informatique n'a pas cessé d'osciller entre traitement local et traitement distant. Actuellement l'état de l'art (exemple Google docs) consiste à avoir en local ce qui nécessite une interactionn rapide et fréquente avec l'utilisateur, et en traitement distant, ce qui demande de manipuler un assez gros volume de données. En fait, avec la technologie Ajax, on va plus loin, en profitant des "latences" de l'utilisateur pour télécharger en avance des données utiles. Mais cette répartition du travail est complexe à programmer, surtout parce que la logique applicative est répartie entre le client et le serveur. Bien sûr, le client-serveur ce n'est pas nouveau, mais ce problème de garantir la cohérence client-serveur, et simplifier le développement n'a jamais vraiment été résolu.
A cette problématique se joint le fait que les terminaux sont plus multiples que jamais (téléphones, PDA, ordinateurs), même si beaucoup d'applications tournent sur un navigateur avec JavaScript.
Les techniques de génération intelligente d'application peuvent permettre de transférer à volonté tel ou tel traitement entre le terminal et l'infrastructure Web, aussi bien de façon rigide (en phase de conception), que de façon dynamique, à l'exécution.
Je lisais le "Guide Entomologique" de Patrice Leraut; les images, uniquement d'insectes naturalisés, sont peu utilisables. Par exemple, les couleurs des poils des bourdons sont passées. Faire des images d'insectes vivants demande beaucoup de travail, et en plus il faut les identifier. Pour remplir ces deux taches, j'ai eu l'idée d'utiliser les techniques du Web dites 2.0. Une communauté d'utilisateurs va publier des images, les commenter, les évaluer, et aboutir à une identification. Suivant les coutumes communes dans les sites 2.0, les contributions, et donc les contributeurs, sont évalués par les contributeurs eux-mêmes. Cela permet de chiffrer la fiabilité de chaque donnée à chaque instant.
Bien sûr, on ne se limitera pas à publier des images, des identifications et des commentaires. On pourra ajouter des informations structurées quelconques, par exemple plantes nourricière de chenille, nidification des oiseaux, etc.
Les photos les plus "polémiques" seront marquées comme nécessitant l'attention des spécialistes. On constituera ainsi, petit à petit, une base de données sur les images d'animaux et de plantes. Les technologies du Web Sémantique: bases de données RDF, modélisation OWL, moteurs à bases de règles se prêtent bien à une telle base. En effet les propriétés que l'on veut pouvoir ajouter à un objet (image, espèce, contributeur, etc) n'ont pas à être limitées et fixées à l'avance, contrairement à une base relationnelle. De plus, tous les identificateurs, qui sont des URI, partagent un même espace de nommage, et sont donc compatibles. Par conséquent on peut fusionner des informations de plusieurs provenances, par exemple des bases d'images en ligne fournies par des musées, des universités, des herbiers, etc.
Que signifie précisément fusionner ? On a des informations de provenances diverses sur un même objet: espèce, contributeur, lieu géographique. Si on est capable d'affirmer que l'objet O1 de la base B1 est identique à l'objet O2 de la base B2, on peut rassembler tout ce qu'on sait sur O1 dans B1 et B2.
Image: auteur, lieu, horodatage, propriétés de l'image (taille, focale, ...)
Contributeurs: prénom, nom, ou pseudonyme, courriel (identificateur principal), résidence, compétences, ...
Espèce:
Types d'annotation: approuver, désapprouver, commenter, compléter.
Site COCO : publier des photos d'hôtel et de restaurants
annonces (voir "Annonces" du 2009-05-04 , Announces for EulerGUI 1.2.1): Protégé, Jena, Pellet, liste CWM et SemWeb, liste MDA, liste Drools, websemantique.org, liste CWM (public-cwm-talk), www-rdf-interest@w3.org, LinuxFr.org, news:comp.lang.java.programmer, news:fr.comp.lang.java, LinkedIn: groupes Semantic Web, AI ???
règles COCO, cave à vin, ...
Remarque: certaines requêtes simples s'agrègent trivialement, mais d'autres non (A VOIR)
Ma valeur ajoutée serait via des services Web qui implémentent la logique de gestion. Pour les fonctionnalités de base d'un site Web , il y a déjà beaucoup de choses qui existent sur étagère : forum, CMS, authentification, ... L'idée c'est de prendre en charge l'intelligence métier via un moteur de règles qui sera derrière un service Web .
Il y a aussi le source jre , different, issu du projet Classpath, http://www.gnu.org/software/classpath/ .
Les nouveaux developpement de JDK7 se passent dans le cadre OpenJDK http://openjdk.java.net/ ; licence GPL : http://www.sun.com/software/opensource/java/faq.jsp#b3
Au niveau de TripleTable on aurait les 3 méthodes insert, delete, et update qui peuvent être appelées sans pb dans les 2ème membres des règles Drools, et en même temps on appellerait insert, delete, ou update sur le WorkingMemory Drools; Mais le problème c'est pour le membre de gauche de Drools; Quand Drools cherche par ex.
Triple( subject == $S , predicate == $P )
il faut qu'il cherche dans les objets gérés par jf ...
Je découvre la méthode URI.create(String); il y a certainement pas mal d'endroits où j'aurais dû l'employer.
Règle Facebook implémentée en N3 :
Si j'ai deux amis qui ont tous deux Z comme ami, alors Facebook va me faire une proposition d'ami pour Z .
{ ?C :current_user true . ?C :friend ?X . ?C :friend ?Y . ?X owl:differentFrom ?Y . ?Z :friend ?X . ?Z :friend ?Y . ?Z owl:differentFrom ?C . } => { ?C :friend_proposition ?Z . } .
On ne déclare pas la classe testée par rapport à la classe de test. C'est un exemple typique de la problématique: "comment simplifier la vie aux experts sans la compliquer à tout le monde?".
écouter "France Info" sur internet avec :( flash
http://www.france-info.com/pratique-aide-2008-01-21-article67554-67554-76-236.html
Les présents disent:
Excellent JUG hier ! Un des meilleurs ! La prés. d'Emmanuel Bernard sur Spring 3
Suite à une suggestion de Jean-Luc N. (qui assure ;) ), j'ai mis en ligne un petit exemple JavaScript + expressions régulières qui teste un numéro de téléphone international :
Inspiré de http://javascript.about.com/library/blre.htm
Cas d'utilisation comptage de liste:
?LIST math:memberCount ?C. ?C math:greaterThan 5 . } => { ?LIST :putInTable ?TABLE . }
Plaquer (map) une arborescence (e.g. subclassOf) sur une autre (e.g. Tablemodel Java)
Jouer sur les intentions: editedClass
ou
editedElement
.
Autres idées en vrac:
Classe: ___, __mot-clés # Créer
label1 X horodatage
radio ou Internet
Une application d'un moteur à base de règles. Il utiliserait les noms de fichiers, de répertoires, les informations internes (balises ID3, Vorbis etc), les serveurs sur Internet pour:
EasyTAG est un utilitaire de visualisation et d'édition de tags pour les fichiers MP3, MP2, MP4/AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio et WavPack. Son interface GTK+ simple et agréable rend le marquage plus facile que sous GNU / Linux ou Windows.
Quasiment impossible de tester EulerGUI sans réseau! Il faudrait vraiment un cache Internet. Quelque chose qui s'interpose entre les appels réseau et l'application Java, soit au niveau du système, soit au niveau Java.
Pourquoi le pack() ne marche pas ? J'essaye successivement :
# ?JFRAME javam:pack () . ?JFRAME javam:validate () . ?JFRAME javam:invalide () .
Encore un exemple de comportement stupide d'une IHM. Avec la console eclipse, je remonte tout en haut avec la touche flèche en haut oblique. Dans la fenêtre de recherche , le sens de recherche devant changer pour être vers le bas. Ce qui est intéressant, c'est qu'il faudrait raisonner sur les intentions de l'utilisateur.
prochain rendez-vous sparklingPoint
jeudi 3 décembre 2009, 19h45, Paris Centre
thème : Google Editions — un coup de pied dans la fourmilière
invité : Xavier Cazin
l'outil JRat d'analyse de programme Java
http://blog.developpez.com/adiguba/p8101/java/google-noop/
Carte de visite Gratuite
http://www.vistaprint.fr/vp/ns/studio3.aspx?pf_id=064&combo_id=4298&gallery_id=64&category_id=11&referer=http%3a%2f%2fwww.vistaprint.fr%2fvp%2fns%2fdefault.aspx%3fGP%3d11%252f30%252f2009%2b4%253a31%253a21%2bAM&rd=2
kingsparda et sakoul ont le même problème non résolu.
webcam empathy Erreur interne de flux de données
export EMPATHY_DEBUG=all
Inscrit sur ubuntu-fr.org !
Posté ceci:
Empathy: webcam: Erreur interne de flux de données
http://forum.ubuntu-fr.org/viewtopic.php?id=362927
Devant le manque de réponse, je suis allé voir sur irc://irc.gimp.org/empathy
<Zdra> C'est un bug connu du codec H263 AFAIK
<Zdra> JMV, vous avez besoin du PPA telepathy
<Zdra> Elle a des correctifs pour les codecs buggy
https://launchpad.net/~telepathy/+archive/ppa
C'est mieux mais pas génial: au moins je me vois sur le côté envoi, mais du côté récepteur, l'image est gelée sur l'instant initial. Je présume que que les mises à jour ultérieures vont arranger ça.
<jmv> Zdra, dois-je mettre à jour empathy également du côté réception?
<jmv> Mon but est de communiquer avec Google Talk, mais maintenant je teste avec 2 machines Ubuntu 9.10
<Zdra> J'ai aussi mis à jour empathy avec la PPA côté réception sous Ubuntu 9.10 aussi, mais l'image est encore gelée sur le côté réception.
Jester : Ca a l'air bien l'idée de tester les tests.
Publié dans le groupe de discussion en français pour les projets Déductions et EulerGUI:
tests fonctionnels, Pellet 2.0, etc
http://www.regismedina.com/articles/fr/principes-avances-conception-objet
Toujours enrhumé !!!!!!
Qiand même avancé sur les tests fonctionnels. C'est le bonheur de voir tous ces cas d'IHM qui tournent tous seuls rapidement !
Mais ça a mis en évidence des menus problèmes de Thread. Ca fait longtemps que j'avais pas écrit de join() . Ca permet d'attendre la fin d'un Thread. En gros je lis et convertis les sources venant du Web dans autant de threads; et quand on lance une exécution Drools, il faut attendre.
Le pb se pose pour les sites lents, et avec les tests .
http://barcamp.org/LLVM-BarCamp-Paris
http://linuxfr.org/2009/10/27/26075.html
Je comprends comment ceci peut marcher avec Drools .
handle = (InternalFactHandle) this.objectStore.getHandleForObject( object );
qui appelle ceci :
return (InternalFactHandle) this.assertMap.get( object );
Mon problème c'était que les put que je vois dans le code sur assertMap sont tous ainsi :
this.assertMap.put( handle, handle, false );
En fait, il n'y a pas d'autres put. Ca passe par la redéfinition du code de hachage dans EqualityAssertMapComparator :
public int hashCodeOf(final Object obj) { if ( obj instanceof FactHandle ) { return rehash( ((InternalFactHandle) obj).getObjectHashCode() ); } return rehash( obj.hashCode() ); }
La pile correspondante étant :
Thread [main] (Suspended (breakpoint at line 45 in EqualityAssertMapComparator)) EqualityAssertMapComparator.hashCodeOf(Object) line: 45 ObjectHashMap.get(Object) line: 84 SingleThreadedObjectStore.getHandleForObject(Object) line: 106 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) line: 912 ReteooStatefulSession(AbstractWorkingMemory).insert(Object) line: 829 RandomGraphMaker.insertOneTriple(Project, String, String) line: 58 RandomGraphMaker.makeRandomGraph(Project, int, int, String, String, String) line: 33 StressTestReasoning.runTest() line: 84 StressTestReasoning.main(String[]) line: 51
Comme j'aimerais qu'un debugger montre les valeurs de retour quand elles sont définies !
Et aussi qu'il enregistre (et montre) le nombre de fois où on est passé par une ligne en pas à pas ou comme point d'arrêt. Pendant qu'on y est, il pourrait garder aussi l'horodatage en nanosecondes, et même la pile et les valeurs des variables. L'idée c'est qu'un état qui a donné lieu à un clic de l'utilisateur mérite d'être gardé, et il n'y aura pas trop de volume.
J'aimerais aussi pouvoir mettre un point d'arrêt sur une méthode d'un objet.
Ca avance avec mes formulaires; je m'en sors avec les rapports entre objets utilisateur, champs, formulaires, fenêtres, et évènements .
Mais débugger ça n'est pas plus drôle que débugger un pb Java :( .
L'INRIA créé un centre de recherche sur les logiciels libres
http://linuxfr.org/2009/10/06/25989.html
Formation JAVA : + de 100 tutoriaux progressifs pour s'auto-former
http://linuxfr.org/2009/11/02/26101.html
Logiciels libres : un défi scientifique
http://linuxfr.org/2009/11/09/26132.html
fOSSa conférence sur le libre/open-source d'envergure
http://linuxfr.org/2009/11/11/26141.html
Vers une ontologie pour les communautés de développement de logiciel libre
Isabelle Mirbeĺ
Equipe EDELWEISS, INRIA Sophia Antipolis, Sophia Antipolis - Francé
Equipe KEWI, Pˆ le GLC, Laboratoire I3S, Sophia Antipolis - France
isabelle.mirbel@unice.fr
http://hal.archives-ouvertes.fr/docs/00/41/66/89/PDF/73-85.pdf
Ontologie "Description d'un Project" http://usefulinc.com/ns/doap
http://websemantique.org/TechniquesEtOutilsPourLeDeveloppeur
Je suis passé de Kubuntu à Ubuntu, et certaines choses changent. Par exemple gnome-terminal est lancé par défaut au lieu de konsole. Bonne surprise: il colorie les résultats de grep.
Voilà la procédure pour créer l'exécutable :
http://sourceforge.net/apps/trac/smartmontools/wiki/Download#Installfromthesourcetarball
Ensuite, comme dit
http://blog.shadypixel.com/monitoring-hard-drive-health-on-linux-with-smartmontools/
on lance
sudo smartctl -H /dev/sda1
( remplacer par le vrai nom du device, peut-être /dev/sdb1 ).
Ceci récupère le informations de fonctionnement stockées par le disque lui-même depuis l'origine.
Enfin le vrai test court :
sudo smartctl -t short /dev/sda1
Attendre 2 minutes , puis voir les résultats ainsi :
sudo smartctl -l selftest /dev/sda1
Comme le nom selftest l'indique, ce sont des tests internes au disque, bien réels et physiques, mais ça ne passe pas par l'OS . On connait le résultat final, y compris le LBA de la première erreur, via le protocole SMART.
Enfin le test long :
sudo smartctl -t long /dev/sda1
Voir l'historique de SMART et un témoignage par l'auteur de smartmontools:
http://www.linuxjournal.com/article/6983
Je récupère tous les sources:
svn co https://deductions.svn.sourceforge.net/svnroot/deductions deductions
Suite au changement de disque, j'ai installé 9.10 hier à partir d'un CD ordinaire 32 bits; or je suis sur un AMD64, et je voudrais migrer à Ubuntu 64 bits. Hélas apparement il n'est pas possible de migrer via Internet. J'ai donc gravé et lancé un CD 64 bits; mais j'ai été obligé de reformatter et de perdre mon /home (je n'ai qu'une partition). J'avais aussi essayé de créer un USB de démarrage avec l'installation Ubuntu 64.
Packages pour EulerGUI:
sudo apt-get install subversion sun-java6-jdk maven2 eclipse-jdt graphviz \ vim-gnome yap wget python-rdflib mercurial
Le reste dans la doc. EulerGUI .
Restaurer mes données Firefox:
cd .mozilla/firefox/sz7ct5e1.default/ cp /media/JMV_USB/firefox/* .
Les données Firefox sont:
bookmarks.html places.sqlite signons3.txt signons.sqlite
Je devrais en faire un zip et me l'envoyer en mail.
Configuration bi-écran
cf fil de discussion sur fr.comp.os.linux.configuration
cvt 1600 1200 xrandr --newmode "1600x1200_60.00" 161.00 1600 1712 1880 2160 1200 1203 1207 1245 -hsync +vsync xrandr --addmode VGA-0 "1600x1200_60.00" xrandr --output VGA-0 --mode "1600x1200_60.00"
Installer hors Ubuntu: Amaya, Protégé
Autres locigiels:
sudo apt-get install zsh xchat swi-prolog ssh gftp zenmap bum kompare \ pidgin jedit gsmartcontrol wordnet lynx \ prover9-mace4 eprover spass coqide axiom
Copier mon .vimrc
wget --output-document=$HOME/.vimrc http://jmvanel.free.fr/vim/vimrc
mkdir -p $HOME/.vim/syntax/
wget --output-document=$HOME/.vim/syntax/n3.vim \
http://www.vim.org/scripts/download_script.php?src_id=6882
Rapatrier mon site:
wget --mirror http://jmvanel.free.fr/
Ce matin j'ai conduit jusqu'à Saint Maur des Fossés chez Iventive. En 20mn tout était fait ! Il a même flashé mon BIOS, et dépoussiéré mon ventilateur de CPU. J'ai aussi eu un CD de Ubuntu 9.10 . J'avais le choix, et plutôt qu'un disque de 640Go Samsung, j'ai préféré un Western de 320Go , mais censé être plus fiable.
Cher lecteur, lis bien ceci pour ne pas faire les mêmes erreurs.
S'en sortir, ça veut dire pouvoir avoir une ultime session pour sauver les données qui peuvent l'être, et non pas récupérer un ordinateur en bon état et fiable.
Un disque qui a eu une erreur de lecture, il n'est pas raisonnable de continuer à travailler dessus.
Hier soir j'ai même eu un écran noir. Arrêt brutal. Probablement dû au disque.
Si tu veux avoir plus de chances de récupérer tes données avant le crash final, ne fatigues pas le disque en bootant dessus. Utilises un CD Linux live. J'utilise le CD Ubuntu 9.04, mais la majorité des distributions ont cette faculté.
C'est ce que j'aurais dû faire tout de suite. Je viens de me payer une séance supplémentaire de fsck, et ça empire.
L'avis d'un pro:
Ce n'est pas de la récupération, car si quelques MP3 ont été perdus, les fichiers de textes personnels et de configuration sont encore là.
Voici un exemple de commandes dans la session lancée par le CD Linux live:
sudo mkdir /media/sda1 sudo mount -o ro /dev/sda1 /media/sda1 cd /media/sda1/home/jmv sudo cp -r -i --preserve=mode,timestamps .gftp/bookmarks .vimrc journal.* mat*.txt \ plantes/ administratif/ ontologies/ \ /media/JMV_USB/ sudo cp -r -i --preserve=mode,timestamps \ donnees.txt mat*.txt bizz/ \ /media/JMV_USB/ sudo cp -r -i --preserve=mode,timestamps doc/ /media/JMV_USB/ sudo cp -r -i --preserve=mode,timestamps doc-pub/ /media/JMV_USB/ ls -l apps >> /media/JMV_USB/apps.txt ls -l src >> /media/JMV_USB/src.txt cd gtk-gnutella-downloads/complete # après avoir lancé le serveur ssh sur la machine de sauvegarde ( apt-get install ssh ) sftp jmv@192.168.1.28 # mais sftp n'est pas assez récursif, j'utilise rsync à la place # rsync étant un outil de synchronisation, il ne va pas retransmettre ce qui est déjà là (grâce à sftp) rsync -avz . jmv@192.168.1.28:/home/jmv/Musique/recup sent 26347895293 bytes received 1444773 bytes 5670793.08 bytes/sec total size is 26815085439 speedup is 1.02 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1058) [sender=3.0.5] 3,114 Tout
En espérant que ça peut rendre service à ceux qui sont dans ma situation.
En suivant les informations ici j'ai récupéré mon historique firefox:
http://www.forensicswiki.org/wiki/Mozilla_Firefox_3_History_File_Format
sudo cp .mozilla/firefox/dgrke902.default/places.sqlite $d/firefox
Peut-être que moi aussi j'ai des problèmes de disque. Hier matin j'ai eu des erreurs sur le système de fichiers, qui a été démonté automatiquement. Je me suis retrouvé sous une console sous root. J'ai fait fsck ( quoi d'autre pouvais je faire ? ). Et maintenant ça remarche .
Mais je voudrais tester en profondeur mon disque au niveau matériel.
J'ai lancé l'IHM gsmartcontrol avec la technologie SMART derrière. Je ne sais pas encore interpréter les résultats, mais c'est mauvais!
Test result: Completed with read failure.
http://lea-linux.org/documentations/index.php/Hardware-hard_plus-smart
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Model Family: SAMSUNG SpinPoint T166 series
Device Model: SAMSUNG HD501LJ
Serial Number: S0MUJ1NQA50666
Firmware Version: CR100-13
User Capacity: 500,107,862,016 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 8
ATA Standard is: ATA-8-ACS revision 3b
Local Time is: Fri Nov 6 11:13:15 2009 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x80)Offline data collection activity
was never started.
Auto Offline Data Collection: Enabled.
Self-test execution status: ( 121)The previous self-test completed having
the read element of the test failed.
Total time to complete Offline
data collection: (8960) seconds.
Offline data collection
capabilities: (0x5b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003)57s SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01)Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 153) minutes.
SCT capabilities: (0x003f)SCT Status supported.
SCT Feature Control supported.
SCT Data Table supported.
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 092 089 051 Pre-fail Always - 17950
3 Spin_Up_Time 0x0007 100 100 015 Pre-fail Always - 7232
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 35
5 Reallocated_Sector_Ct 0x0033 097 097 010 Pre-fail Always - 29
7 Seek_Error_Rate 0x000f 253 253 051 Pre-fail Always - 0
8 Seek_Time_Performance 0x0025 253 253 015 Pre-fail Offline - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 6801
10 Spin_Retry_Count 0x0033 253 253 051 Pre-fail Always - 0
11 Calibration_Retry_Count 0x0012 253 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 20
13 Read_Soft_Error_Rate 0x000e 100 100 000 Old_age Always - 170750462
187 Reported_Uncorrect 0x0032 253 253 000 Old_age Always - 5308416
188 Unknown_Attribute 0x0032 253 253 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 065 057 000 Old_age Always - 35
194 Temperature_Celsius 0x0022 130 106 000 Old_age Always - 36
195 Hardware_ECC_Recovered 0x001a 100 100 000 Old_age Always - 170750462
196 Reallocated_Event_Count 0x0032 097 097 000 Old_age Always - 29
197 Current_Pending_Sector 0x0012 090 090 000 Old_age Always - 97
198 Offline_Uncorrectable 0x0030 253 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x000a 100 100 000 Old_age Always - 0
201 Soft_Read_Error_Rate 0x000a 099 099 000 Old_age Always - 174
202 TA_Increase_Count 0x0032 253 253 000 Old_age Always - 0
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 90% 6801 50331727
# 2 Short offline Completed: read failure 90% 6801 538706004
SMART Selective Self-Test Log Data Structure Revision Number (0) should be 1
SMART Selective self-test log data structure revision number 0
Warning: ATA Specification requires selective self-test log data structure revision number = 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
Dernière nouvelle !
Iventive a répondu au téléphone (j'ai quand même essayé 4 ou 5 fois, et envoyé un mail en début d'après midi ) !
Il faut que j'envoie le disque, et alors seulement je recevrai le nouveau disque.
J'ai vu plein de tentatives de log par ssh.
Alors je me suis préoccupé de gérer mes services.
J'ai installé bum.
J'ai lancé nmapfe.
J'ai arrêté tous les ports :
couchdb, cupsd, mysql, exim et ssh.
En fait je n'ai pas besoin de tout ça.
J'aurais pu aussi changer le réglage de la box.
J'ai installé Erlang, ce langage fonctionel fait pour le temps réel :
http://fr.wikipedia.org/wiki/Erlang_%28langage%29
http://www.erlang.org/starting.html
Sur Wikipedia, j'ai été amusé de la ressemblance syntaxique avec Prolog :
%% quicksort:qsort(List)La notation pour le début et le reste d'une liste, la déclaration d'une fonction (analogue à un prédicat) en plusieurs clauses sont semblables. Par contre, bien sûr, ça reste un language procédural ,et l'exécution en Haskell se fait du membre de droite de -> au membre de gauche, contrairement à Prolog.
%% Trie une liste d'éléments
-module(quicksort).
-export([qsort/1]).
qsort([]) -> [];
qsort([Pivot|Reste]) ->
qsort([ X || X <- Reste, X < Pivot]) ++
[Pivot] ++
qsort([ Y || Y <- Reste, Y >= Pivot]) .
En creusant plus, j'ai vu que Erlang a commencé comme une application en Prolog:
http://www.kimbly.com/blog/000057.html
Damien Katz, l'auteur de la base CouchDB (en Erlang), aime Erlang, mais il grogne sur beaucoup de choses:
http://damienkatz.net/2008/03/what_sucks_abou.html
Comme on parlait de OOM killer du noyau Linux, j'ai lu une discussion intéressante sur LinuxFr: Raisons susceptibles du déclenchement d'OOM killer
Pendant que j'y étais, j'ai installé:
Wings 3D , Mercury (un mélange de
Prolog et de fonctionnel), et Haskell .
OCAML, je l'avais déjà.
-- Installation complete. -- Don't forget to add /usr/local/mercury-rotd-2009-11-03/bin to your PATH, -- /usr/local/mercury-rotd-2009-11-03/man to your MANPATH, -- and /usr/local/mercury-rotd-2009-11-03/info to your INFOPATH, -- to copy deep_profiler/mdprof_cgi to /usr/lib/cgi-bin, -- and to add the following lines to the `.emacs' file -- in your home directory: (add-to-list 'load-path "/usr/local/mercury-rotd-2009-11-03/lib/mercury/elisp") (autoload 'mdb "gud" "Invoke the Mercury debugger" t)
http://www.linux-france.org/article/these/cathedrale-bazar/cathedrale-bazar.html#toc11
Je re-visite mes specs pour un générateur de formulaires (runtime behavior).
Il faut gérer les préfixes, car il faut afficher quelque chose quand il n'y a pas de label RDF, ou de nom FOAF.
Utiliser les propriétés objet OWL, c'est naviguer de proche en proche et éditer un graphe d'objets. De proche en proche, cela veut dire qu'il y a un noeud courant. Pour naviguer, il faut pouvoir afficher tous les noeuds connectés au noeud courant (des resources RDF), ou bien ceux répondant à certains critères simples; et changer de noeud courant.
Editer peut être interdit pour certaines classes ou propriétés (par exemple en commerce électronique, on ne peut pas modifier le catalogue quand on commande ). Egalement, on ne modifie pas l'ontologie. A propos d'édition, on peut avoir 2 politiques:
Par défaut la politique 1 sera appliquée. On utilisera pour permettre l'édition dans l'application générée:
:myApplication app:editionAllowed :myProperty . :myApplication app:editionAllowed :myClass .
Pour appliquer la politique 2, on utilisera ces déclarations:
:myApplication app:policy app:allEditionsAllowed .
Pour éditer, il faut pouvoir :
Pour réaliser ces objectifs, on peut avoir respectivement, pour chaque instance de propriété, trois éléments d'IHM:
Aujourd'hui l'état des lieux est ainsi:
Le projet tests sont :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/plants2.n3p ( correspond à l'image ci-dessus )
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/wine-app.n3p ( en chantier, pour les aspects restrictions OWL )
Tâches à réaliser
Bouton create
ComboxoBox
Rappel: il s'agit de connecter le noeud courant à un noeud existant (resource RDF). On choisit un URI qui est déjà connu dans la base de connaissance (KB), ou on en tape un (soit avec la notation abrégée N3, soit in extenso).
Il y a deux cas un peu différents. Soit cet URI est une classe sans propriétés, ou owl:Thing. Soit cette classe a des propriétés, auquel cas on voudra éditer ces propriétés.
Règles pour les propriétés objet:
Règles pour les tableaux
mapper-sa-base-donnees-avec-pattern-dao
J'ai fait un nouveau groupe de discussion en français pour les projets Déductions et EulerGUI:
http://groups.google.com/group/deductions-fr
Discussions en Français pour les développeurs et architectes intéressés par les évolutions, les choix et la feuille de route des projets EulerGUI (http://eulergui.sourceforge.net/) et Déductions ( http://deductions.sourceforge.net/ ):
Moteurs de règle, Web Sémantique, génération d'applications
En ce moment je teste virtuoso , un serveur qui peut RDFiser beaucoup de choses .
Je travaille sur une petite démo. de gestion de cave à vin .
Avec Déductions.
Si vous avez une autre idée de démo...
Luc : à une époque on avait parlé de pet-clinic, que je ne connais pas, demo spring je crois.
moi: oui je me rappelle ... L'avantage là c'est que le OWL est là :
moi: http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine.rdf
tandis que pour des modèles POJO ou SQL je suis pas encore équipé.
Enfin SQL il y qq'chose mais c pas OSS, et ça le sera peut-être jamais (ça vient de Dassault)
Pour les POJO tels que pet-clinic, je n'ai pas de techno. en vue à intégrer .
C'est à dire pour traduire le modèle en OWL.
Créer des videos de démo. ; quel logiciel conseilleriez vous (sous linux ) ?
J'ai jamais fait une recherche rapide; ça donne pour linux :
http://recordmydesktop.sourceforge.net/
J'ai regardé la video
http://fosswire.com/post/2008/3/video-screen-capture-in-linux-with-recordmydesktop/
Ca fait aussi le son, ce qui n'est pas évident, d'après certaines sources.
Il y a aussi Wink:
Wink is a Tutorial and Presentation creation software, primarily aimed at creating tutorials on how to use software (like a tutor for MS-Word/Excel etc). Using Wink you can capture screenshots, add explanations boxes, buttons, titles etc and generate a highly effective tutorial for your users.
Ce matin j'ai cherché pour ma fille un logiciel qui aide à faire de l'animation en SVG et JavaScript; il n'y a rien !!!
Il y a des outils pour le dessin animé "classique" , ktoon et pencil , mais ça n'est pas ce que je cherche.
Sur LinuxFr.
Merci Thomas pour relancer le débat. Ca va mieux avec des questions précises !
Je réécris la règle avec des variables pour la traçabilité :
"les personnes P ayant acheté la même chose A1 que vous ont aussi acheté A2 "
Du point de vue applicatif , c'est en fait une règle de présentation :
S'il existe une personne P ayant acheté la même chose A1 et qui a aussi acheté A2,
et si A1 et A2 sont distincts, alors il faut afficher le message proposant A2 .
Ce qui se traduit en logique N3 par :
{
?P a_acheté ?A1 .
client_courant a_acheté ?A1 .
?P a_acheté ?A2 .
?A1 owl:distinct ?A2 .
} => {
?message contient ( "Les personnes ayant acheté " ?A1 " ont aussi acheté " ?A2 ).
affichage_courant contient ?message .
} .
Chaque point délimite un triplet ("statement"). Les parenthèses délimitent une liste. Bien sûr le dernier triplet va déclencher d'autres règles qui vont ultimement afficher qq'chose en Swing ou en HTML, etc, suivant la plateforme et le contexte de la session. La variable ?message à droite du signe => correspond à une création d'objet.
Pour voir un exemple de règles qui sont effectivement utilisées pour la génération de formulaires:
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/app_gui-rules2.n3?view=markup
Ce qui est intéressant c'est que la même technologie N3 est utilisée pour les règles d'infrastructure (les formulaires) et pour les règles métier (les conseils d'achat).
Je réécris la règle une 2ème fois d'une façon plus réaliste et précise en introduisant une notion de catégorie de marchandise:
"les personnes ?P ayant acheté la même chose ?A1 de catégorie ?C que vous , ont aussi acheté ?A2 de catégorie ?C"
Légèrement déçu par la communauté LinuxFr.org, j'ai ajouté mon grain de sel sur la communauté websemantique.org .
Ma présentation de jeudi prochain est enfin sur l'agenda du libre:
http://www.agendadulibre.org/showevent.php?id=3946
Excellent; mais trop de rappels bien connus des développeurs. Par Gilles Blanc pour l'April . Son blog embarqué parait de bonne facture.
Je lis son article sur les IHM générés en Python par Qt Creator. Ca me donne l'idée de faire une génération de XML façon Qt Creator avec mon outil Déduction. Justement là je travaille sur la génération de XML, avec XForms en ligne de mire.
Dans le nouveau gdb; admirable:
https://linuxfr.org//2009/10/10/25999.html
A quand ça avec Java ?
Je suis en plein dans les bases RDF et SPARQL ( une beta de EulerGUI tous les jours ).
A propos de logiciel système, hier j'ai pesté contre le son dans Linux; j'ai acheté un micro pour parler sur pidgin ...
En fait il y a une grande complexité dans la problématique: multiples entrées et sorties, multiples cartes, préamplificateur ou pas , ...
12:06 multiples logiciels, pleins de réglages,
12:07 et pour couronner le tout, sur Linux, plusieurs frameworks : Alsa, et d'autres .
et bien sûr il y a un niveau bas /dev/dsp
Bref, matière à mettre des règles :) .
L'agenda des évènements du Logiciel Libre en France
>>> Prévisualisation de l'évènement
Le jeudi 15 octobre 2009, de 19h00 à 20h45.
Le créateur du projet libre Déductions donne un séminaire sur le générateur d'application Déductions le jeudi 15 octobre 2009, 19:00 – 20:45 à Paris, Métro Cadet.
Ce séminaire s'adresse à des informaticiens ayant une connaissance d'une technique de modélisation, telles que UML, SQL, OWL, RDF Schéma, ...
Il devrait aussi intéresser les développeurs qui suivent les thèmes du Web Sémantique, des moteurs à base de règles, et de l'Intelligence Artificielle. La présentation tournera autour de deux projets sous licence LGPL:
Pour s'inscrire: http://jmvanel.free.fr/seminaires/seminaires_gratuits.html, ou écrire à jeanmarc.vanel CHEZ gmail.com .
Résumé
Site Web: http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
J'ai voulu tester le micro "tout seul", alors j'ai pris Audacity. J'ai compris que, pour que les réglages de KMix soient pris en compte, il faut choisir dans Audacity le périphérique d'entrée "Alsa: dmix" (pas celui par défaut) .
Maintenant, dans Kmix:
gnome-sound-recorder 2.26.0 ne marche pas comme Amarok, et le dernier Pidgin 2.6.1 non plus :( .
Je suis le dernier des exposés sur le Web Sémantique:
http://act.osdc.fr/osdc2009fr/favtalks
Les autres exposés sur le Web Sémantique étant :
Le Web Social, par Henry Story
J'ai cherché la présentation de Henry sur le site OSDC ... En vain.
> Voici la presentation que j'ai un peu amélioré encore hier:
> http://bblfish.net/tmp/2009/10/
Bugtracking sur le web sémantique, par Olivier Berger
Je passe demain à 14h45 à la 1ère Open Source Developers Conference France.
Cette conférence se tiendra au Carrefour Numérique de la Cité des Sciences, à Paris (porte de la Villette).
http://act.osdc.fr/osdc2009fr/talk/2349
> Pour moi, il y a surtout les vidéos de la programmation par intention qui sont très
> impressionnantes pour ceux qui les comprennent, meme si bien sur la
> démarche est différente, elle casse les mêmes a priori sur le code source :
> http://www.youtube.com/watch?v=tSnnfUj1XCQ&hl=fr
J'ai vu la partie 1, ce essentiellement ce qu'on peut faire
aujourd'hui avec eclipse, à part l'arbre syntaxique . Je vais quand regarder la suite ...
Dans cet ordre d'idées, il y a la méthode B ( http://fr.wikipedia.org/wiki/M%C3%A9thode_B ); elle bien existante , avec des outils open source. Mais il y a déjà des gens qui font du business avec .
Il y a aussi la "program synthesis" , lancée par cet article souvent cité:
http://theory.stanford.edu/~zm/papers/pap-fundamentals92.ps.Z
A noter que les auteurs utilisent une forme d'algorithme avec "tableaux", comme les raisonneurs DL .
l'écosystème Maven ... je voudrais mieux comprendre.
Ce soir mon séminaire "Développement logiciel et ontologies" ...
Première relecture publique de la traduction de Maven - The definitive guide, Posté par Emmanuel Hugonnet
https://linuxfr.org/2009/09/30/25976.html
Bonjour
J'envisage de remplacer les boutons "GRAPH", "PARSE", "ORIG." par des icones. Ce sera mieux pour désencombrer l'écran, et aussi pour i18n .
Suggestions bienvenues.
Il y aura aussi un bouton pour lancer un formulaire sur le document courant; là aussi icone bienvenue.
De plus il y aura une petite image à côté de chaque source pour signaler si elle est Web ou locales, N3, RDF, ou autres, qui reprendra les images des boutons de la première rangée.
Enfin, il y maintenant 2 importeurs différents pour XML de base et XML Schéma: Gloze et ReDeFer.
A+
Un nouveau développpeur sur EulerGUI : Paul, alias shantiart ! :) Il va surtout tester et voir la documentation pour l'instant .
J'ai trouvé ce site qui rassemble tous les aide-mémoires et cartes de référence : http://www.cheat-sheets.org/
http://www.agendadulibre.org/submit.php
http://www.zdnet.fr/blogs/l-esprit-libre/pour-un-web-libre-le-projet-drumbeat-et-un-expose-a-lire-39706487.htm?xtor=RSS-1
https://linuxfr.org/forums/31/27696.html : EulerGUI 1.2.1, environnement pour les règles et le Web sémantique
http://friendfeed.com/hnourel/df6e0570/eulergui-1-2-environnement-pour-les-regles-et-le
Journées du Logiciel Libre 2009, les 16-17 octobre, Lyon
https://linuxfr.org//2009/09/09/25882.html
Présentation et utilisation d'HSQLDB
Date de publication : 12 Octobre 2006 , Date de mise à jour : 19 Mars 2009, Par Baptiste Wicht
Trouvé l'entrée dans Maven pour HSQLDB :
http://repo2.maven.org/maven2/
Répondu à Sitoka au sujet de EulerGUI sur LinuFr
Merci d'avoir adhéré à Parinux.
Vous pouvez maintenant envoyer votre chèque à la trésorière de l'association
Parinux c/o Sabine Herbin
75 avenue Maurice Berteaux
78300 Poissy
A bientôt lors d'un évènement Parinux !
https://linuxfr.org//~jmvanel/28736.html
La sérialisation XML en Java
http://ydisanto.developpez.com/tutoriels/j2se/serialisation/partie2/
Christian Fauré : Hypomnemata : supports de mémoire - Guide pour construire une ontologie
Développement logiciel et ontologies - Par Jean-Marc Vanel
Date : Pas encore planifié - Durée : 40 minutes
Langue : Français - http://act.osdc.fr/osdc2009fr/talk/2349
Web Sémantique en Français:
http://www.w3.org/2001/sw/Europe/talks/040721-cmn/all.htm
http://www.christian-faure.net/2005/11/13/guide-pour-construire-une-ontologie/
http://www.agendadulibre.org/index.php
http://www.systematic-paris-region.org/fr/index.html
http://www.competitivite.gouv.fr/spip.php?article1650/24666.html
https://linuxfr.org//forums/32/21239.html
https://linuxfr.org//2006/04/28/20738.html : TOM est un langage de programmation développé par l'INRIA et qui marie le meilleur des mondes des langages fonctionnels et impératifs en ajoutant des capacités de réécriture à Java, C ou OCaml (autres backends à venir).
L'utilisation de TOM est pertinente dès qu'il s'agit de manipuler des données arborescentes (termes, arbres syntaxiques, arbres XML...), ce qui est très courant en programmation.
Exactement ce qu'il me faut pour changer de bain, après une semaine dans la Méditerranée (un endroit on l'on médite, d'où son nom).
Je ne sais pas si j'ai fait un forward ... A propos j'adorerais que le lecteur de mail me dise "vous avez déjà fait suivre à ..." . Encore un exemple de comportement intelligent à base de règles.
Présentez votre société à l’"Open Innovation Summit" et candidatez aux “Open Innovation Awards” : https://linuxfr.org//2009/08/09/25797.html
Annonce EulerGUI 1.2.1 sur LinuxFr.org
Entre autres , je pense ajouter un peu d'intelligence dans EulerGUI :
(18:04:42) jeanmarc.vanel@gmail.com/Home47DBD586: savoir quand il doit ajouter au projet certaines règles ou sous-projets.
(18:08:31) jeanmarc.vanel@gmail.com/Home47DBD586: Dommage que les stats sur téléchargements SF.net soient nazes. Je ne peux absolument pas savoir ce que le débat sur LinuxFr a apporté , mais LinuxFr rapporte plus de 100 clics sur le téléchargement .
http://www.lespetitescases.net/definir-une-ontologie-avec-owl : plein de liens à voir
ISWC 2008 : premières impressions générales
http://www.akasig.org/2002/12/05/edition-dontologies/
La Création d’Ontologies Web Sémantique avec Protégé-2000
http://www.parinux.org/content/pique-nique-du-libre-daout-2009
Rédigé une note pour Linuxfr.org : ai/deductions-nouvelles.fr.html
Parue ici, avec une discussion: https://linuxfr.org/2009/08/28/25838.html ; ce qui me vaut un "karma" de 50 sur LinuxFr :) .
Luc: Là on voit bien que votre concept bouscule un peu les habitués du développement "classique" ...
(10:40:58) jeanmarc.vanel@gmail.com: he oui , je suis pas surpris .
(10:41:54) jeanmarc.vanel@gmail.com: Mais ça va rassurer les gens d'avoir un "hook" pour appeler du code classique ...
(10:42:06) Luc : moi j'y crois, c'est à l'image du passage de l'assembleur au languages évolués
(10:42:22) jeanmarc.vanel@gmail.com: bien sûr; et on peut toujours appeler de l'assembleur.
(10:43:13) Luc : cela reste une approche objet au niveau de la description des choses, ou une extention. Pour les traitement cela change du tout au tout, d'où l'allusion au passage asm -> language évolué
(10:45:16) jeanmarc.vanel@gmail.com: oui; un "hook" pour appeler du code classique c'est prévu :
http://deductions.svn.sourceforge.net/viewvc/deductions/html/user-java.html
je cite:
But I think that the biggest challenge is to come with a way of augmenting the generated application with code in traditional languages . Of course we want to minimize and even completely eliminate procedural user code, but it will reassure many developpers, and also provides a way to integrate existing software components.
http://www.lespetitescases.net/le-rdf-avenir-du-patrimoine-sur-le-web-y
http://www.mdday.fr/Cette conférence se tiendra au Carrefour Numérique de la Cité des Sciences, à Paris (porte de la Villette) les 2 et 3 octobre. Entrée libre et gratuite !
http://act.osdc.fr/osdc2009fr/news
Présentez votre société à l’"Open Innovation Summit" et candidatez aux “Open Innovation Awards”
Je mets cet am un nouveau snapshot de EulerGUI au même endroit; relancer l'inférence pour le même projet marchait mal; il ne recompile que les fichiers N3 récemment modifiés.
En ce moment je travaille sur le cas d'utilisation 2.? : L'utilisateur clique pour choisir parmi les sous-classes: il faut ajouter les champs de la sous-classe choisie. Il y a deux cas: ou c'est la sous-classe de l'objet courant, ou c'est celle d'un champ de l'objet courant.
Ensuite je m'attaque à chercher et lier à un objet existant. L'exemple typique est : chercher dans une bibliothèque un livre à emprunter. Le cas test est basé sur FOAF:
http://deductions.svn.sourceforge.net/viewvc/deductions/html/GUIgenerator.html#Running1
Ce que je fais en moment, c'est fabriquer un instrument (EulerGUI), et en même temps écrire la musique qui se joue dessus (Déductions).
Ajuster le rectangle à la taille du texte : pas moyen; il faut créer en tant que texte, puis avec "ligne / continue" créer la bordure, puis avec remplissage ajouter la couleur de fond.
Problème pour insérer une image dans un texte de façon que le texte ne se superpose pas:
http://explorateursduweb.com/blog/explorateurs-du-web/olivier-auber.html
http://linuxfr.org/
http://www.swaroopch.com/notes/Vim_fr:Table_des_Mati%C3%A8res
http://www.framasoft.net/article4231.html
Créer ses propres styles avec OpenOffice.org
Sur http://alpage.inria.fr/perl/parser.pl, j'ai fait un petit essai avec une phrase .
PactePME : Société Générale - IHM innovantes
Pour l'instant je vois 3 types d'affaires pour moi :
plus les formations .
Je suis plutôt le nez dans le guidon avec la "nouvelle architecture" , mais justement parce que n'est pas simple de créer une architecture radicalement nouvelle , je suis ouvert à de nouvelles idées . J'ai commencé à regarder la méthode B, elle est célèbre, mais maintenant je suis mûr pour regarder ça ...
A part ça j'ai une échéance au 24 - 7 : http://www.webont.org/owled/2009/. Au Program Committee , j'en connais 2 :). il y a plusieurs événements en même temps :) . Jamais été dans le Sud Est des USA.
Je sens que j'ai besoin de changer un peu de sujet; dès que ça sera à peu près correct, je vais passer à la génération de XML via des règles; j'ai 2 cas d'utilisation : XForms , et XBRL ( business report ).
XForms est intéressant comme inplementation via XSLTForms , mais aussi intéressant car c'est un vocabulaire de référence pour les formulaires, même si le point de vue est différent .
XForms est vu comme une plateforme Web
Un exemple XForms avec XSLTForms : http://www.agencexml.com/xsltforms/balance.xml . Autres exemples en bas de page : http://www.agencexml.com/xsltforms.htm
En fait XML est incontournable, vu le nombre de XSD qui circulent dans la nature ... Dans le cadre de ma politique "laissez venir à moi les modèles" ( et les données ) .
Même si je suis ouvert à la génération de classes à partir du modèle OWL, je n'ai pas renoncé à explorer les avantages d'une base de connaissance (KB) embarquée qui soit au coeur de l'application, et qui héberge à la fois les règles, les objets de conception (classes-propriétés) et les instances utilisateur .
On a le choix de la façon d'exécuter.
Disons que pour l'instant il n'y a pas de raisonnement sur l'application en phase de conception; c'est l'application qui raisonne en temps réel sur: 1. le modèle métier, 2. les évènements. Mais je reconnais que ça a ses limitations ... Cela dit, pour l'instant les règles métiers sont purement passées au moteur d'exécution telles quelles .
Protégé pourrait devenir la plateforme de l'"analyste métier" ... à défaut de mieux, car Protégé est quand même peu ergonomique .
Je pense que l'"appli." JMV à XXX € / jour est pas mal pour saisir des modèles ;)
C'est JMV qui est à XXX €/jour; les applis resteront OSS.
Une appli avec son modèle qui avale les autres modèles ! greedy pourrait être son nom ............
Quand j'aurai du temps pour lire un livre, je vais absorber CommonKADS , c une méthodologie pour créer des systèmes à base de connaissance. L'auteur a parlé à Amsterdam : Guus Schreiber http://www.commonkads.uva.nl/INFO/course-slides/index.html
Au sujet de l'application EulerGUI, j'aimerais trouver des gens à qui repasser le bébé ...
He mais, en parlant d'exemple d'application pour valider la chaîne et éprouver les concepts, refaire EulerGUI c'est pas mal ...
J'y pensais au début, et ça m'est un peu sorti de la tête .
Il s'agit de (re)générer l' application EulerGUI avec le générateur d'application Déduction ! Il y a plein d'action "métier" , des boutons pour chaque source N3, il faudrait formaliser des points d'extensions à la eclipse ...
Mais avant ça avoir qq'chose de propre et générique pour les proppriétés à cardinalité multiple , etc etc.
Prépare une soumission pour OWLED 2009 à Washington
était
Serai-je apporteur d'affaires ? Ou m'apportera-t-on des affaires ?
http://www.zenika.com/presentation_gradle.php
Je m'attaque à un truc que j'ai laissé de côté depuis des mois :
Duplicated triples with Drools engine
et pour ça c'est embêtant de écrire la sortie au fil de l'eau ...
Pour ajouter un test dans le Drools généré, je dois avoir traité tous les triplets de la conséquence ; c'est pas commode avec mon API évènementielle. En gros je ne dois affirmer la conséquence que si elle n'est pas déjà vraie .
Ce sera mieux qu'actuellement, mais pas encore parfait .
S'inscrit à la conférence Protégé (l'éditeur Web Sémantique - OWL) la semaine prochaine à Amsterdam.
Pas mal , un film sur Hitler détourné; il apprend que les tests logiciels agiles n'ont plus été passés depuis longtemps : http://t37.net/le-dernier-sprint-meeting-dhitler-chef-de-produits-agile.html
http://eformation2009.paris.ort.asso.fr/login/index.php
appels à projets semantic desktop ???
http://www.lemonde.fr/technologies/article/2009/06/11/quand-smartphones-et-mini-pc-ne-feront-plus-qu-un_1204819_651865.html
Que sont des lois qui sont trop compliquées? On doit les simplifier, mais aussi, pour une France (Europe aussi allez) qui marche mieux il faut un moteur de recherche conceptuel et explicatif.
LINUX est à Windows ce qu'une jolie fille est à une prostituée : - La jolie fille, il faut la séduire pour obtenir ce que l'on désire. - La prostituée , il suffit de la payer, et surtout bien se protéger.
J'ai rapidement crée ma première description FOAF jmv.rdf grâce à foaf-a-matic de Leigh Dodds.
(12:58:07) Olivier Moïses: jette un oeil; pour moi c'est sémantique ==> Jean Marc.
Smila à première vue me fait penser à CouchDb ( cf l'article dans Linux Mag de juin ).
Nepomuk = Networked Environment for Personalized, Ontology-based Management of Unified Knowledge
Grâce à Olivier Moïses, j'ai jetté un oeil sur nepomuk. J'ai bien peur que ce soit un autre projet Européen dont il ne restera rien :( , même si la vision parait intéressante.
Je regarde quand même le portail développeur:
http://dev.nepomuk.semanticdesktop.org/
C'est amusant , j'ai voulu chercher "artificial Intelligence owl rdf" , je me suis trompé de case , et c'est devenu mon statut :) . Et en fait il n'y a que moi comme résultat pour cette recherche .
J'ai acheté Linux Mag; il y a plusieurs sujets Java :
# p. 86 JCR269 : L’API de gestion d’annotations de Java 5
# p. 92 Programmation orientée aspect avec Java
Drools fait partie de JBOSS, et implémente une JSR Sun. Mais c'est pas essentiel; cette API JRS94 est assez contestée . Elle fixe l'API entre l'appli. et le moteur d'inférence, mais le language de règles reste hors de la spec.
Luc n'a montré http://jadex.informatik.uni-hamburg.de/bin/view/About/Features
Les agents c'est un sujet intéréssant que je n'ai pratiquement pas exploré . C'était assez à la mode il y quelques années.
J'ai présenté pour la première fois mon séminaire non-technique à une amie directrice commerciale dans une SSII .
En gros , c'est pas mal ...
Quelques modifs à faire .
presentations/deductions-non-technique.pdf
C'est un apéritif; la cuisine se mijote là ...
Le défi suivant sera, entre autres, de pouvoir s'adapter à des projets existants.
Nettement plus dur que de faire à partir de zéro ou d'un modèle ( c'est tout le problème que les banques ont depuis 30 ou 40 ans ).
Découvert plusieurs articles de Loïc Mathieu sur OWL, N3, etc :
Inscrit: http://www.valtech.fr/fr/index/news/seminar/Table-Ronde.html Table-Ronde a gile
http://fr.wikipedia.org/wiki/Paiement_%C3%A9lectronique
http://en.wikipedia.org/wiki/Electronic_payment
Hehe , EulerGUI est bien placé sur ce créneau : https://sourceforge.net/search/?type_of_search=soft&words=rdf+uml
Cette conférence me va comme un gant:
IWOCE2009 - Open Component Ecosystems
International Workshop
24 August 2009 - Amsterdam, The Netherlands
http://protege.stanford.edu/conference/2009/ - Juin 23-26, 2009.
GRABATS
JAZOON
http://www.lyonjug.org/bin/view/Main/
Rien sur Sourceforge (ça se dit monetics), ni sur swoogle .
http://fr.wikipedia.org/wiki/Paiement_%C3%A9lectronique
J'en ai rêvé, ça existe:
open source voice recognition
http://www.speech.cs.cmu.edu/sphinx/tutorial.html
Et même je peux l'installer comme un package sur Ubuntu !
Mais pour l'utiliser , ça a l'air compliqué .
Et en Java il y a http://cmusphinx.sourceforge.net/sphinx4/
Il y a plus de choix pour les prononceurs (les Québéquois de http://granddictionaire.com/ disent : "synthèse de la parole à partir du texte" ). En Anglais , ça s'appelle "text-to-speech" .
il suffit d'installer libgnome-speech7 , et on a plusieurs implémentations possibles: festival, espeak, ...
Et pour le prononceur en Java : http://freetts.sourceforge.net/docs/index.php
Je considère la domotique comme un secteur très prometteur pour les technologies de l'IA.
Nous n'avons pas l'intention de nous limiter à Java. Un des cas d'utilisation est d'avoir un environnement de développement en Java, tout en déployant en C. C'est le cas si utilise déjà eclipse pour le C .
D'ailleurs je viens de passer 3 ans chez MathWorks pour développer une infrastructure UML et metamodèles pour des outils de développement électronique embarquée. Donc j'ai acquis une culture dans ce domaine des sytèmes électroniques.
La première idée qui vient pour ajouter de l'IA dans un système écrit en C, est CLIPS (http://fr.wikipedia.org/wiki/Clips_(langage)).
Mais il y en a d'autres, par exemple http://opencog.org/wiki/Unified_Rule_Engine. Un avantage de CLIPS est sa compatibilité avec l'environnement de développement Protégé (http://protege.stanford.edu/doc/design/clips.html). Et grâce à Protégé on a accès à toutes les ressources du Web Sémantique, par exemple avec le moteur de recherche Swoogle .
Open Source Blog - The 10 Best Open Source Rules Engines
Je viens de proposer une prés. au JUG Paris (Java User Group), mais c'est pris jusqu'en septembre au moins .
services conseil protection pirates informatique hackers
--> pas grand'chose ! , à part http://www.sysdream.com/
Une bonne documentation Canadienne sur le Dublin Core:
http://www.tbs-sct.gc.ca/im-gi/meta/profil/profiltb-fra.asp
Quelques articles sur des frameworks Web Python : Django, Pylons, Web2py, Repoze.bfg, Pyxer
Sans pour l'instant embaucher , je cherche des compétences pour des missions de développement .
Il y a beaucoup à faire.
Cela dépendra des clients, mais je souhaite commencer à investir tout de suite.
Nous cherchons des développeurs exprimentés, qui ont envie de sortir des sentiers battus, pour révolutionner l'informatique. Nous développons les infrastructures pour remplacer ou générer le code écrit à la main par des outils intelligents.
J'ai besoin d'aide pour la génération d'application pour ces plateformes (dans l'ordre de priorité) : Java Swing, PHP, Java Web( GWT, Ajax, Wicket) , eclipse (eclipse e4, SWT, plugins), firefox, OpenOffice, Mono(.Net).
J'ai besoin de compérences générales Java pour développer EulerGUI (Swing, UML, Maven, JUnit, Web Start, intégration outils variés).
J'ai besoin de compérences IA (Intelligence Artificielles) pour faire de la programmation à base de règles, et développer des ontologies.
Je prévois des contrats au forfait de développement d'applications, pour lesquelles il faudra développer des modèles, règles et ontologies, en s'appuyant sur le framework existant, en liaison avec l'équipe de développement du framework.
Ca peut vous intéresser, ou alors vous connaissez des gens que ça peut intéresser.
Je suis aussi à la recherche de low hanging fruits ( comme on dit chez MW ;) ) en ce qui concerne des idées d'applications qui n'existent pas, qui peuvent être utiles à un grand nombre, et si possible générer des affaires. Dans ce domaine, j'ai déjà EulerGUI (pas encore un franc succés mais quand la masse critique sera là ça y sera ).
J'ai rassemblé ici des idées de logiciels :
"Classeur de notes" et "IHM collaboratives" me plaisent particulièrement , mais il doit y voir des tas d'applications métiers possibles.
Pour activer le log décommenter la ligne
log4j.logger.net.sf.parser4j.parser.service.Parser=debug
Dans eulergui/src/main/resources/log4j.properties
Dans les source de Parser4J, les tests sont là:
src-test/net/sf/parser4j/grammarfile/
src-test/net/sf/parser4j/parser/entity/
Alerte Google Web : ontology software development
Conception Coopérative d'Ontologies Pré-Consensuelles : Application au domaine de l'Urbanisme [PDF]
Abdelkader Keita [LIRIS] - 6/2007
Je n'ai malheureusement pas le temps de suivre ce que se passe avec
eXist , mais j'ai l'impression que ça va bien :
https://sourceforge.net/project/stats/rank_history.php?group_id=17691&ugn=exist
même qu'une release s'appelle Rennes :) .
A comparer avec mes scores confidentiels :(
https://sourceforge.net/project/stats/rank_history.php?group_id=237733&ugn=eulergui
A noter qu'Euler ne fait guère mieux , malgrè son ancienneté:
https://sourceforge.net/project/stats/rank_history.php?group_id=77046&ugn=eulersharp
Cet après-midi je vais à 5 mn pour convainvre.
Mon interlocuteur: un Directeur d'une PME qui fait des développements logiciels qui sont au coeur de son affaire, et qu'il ne peut pas sous-traiter. Vos informaticiens sont dévoués et contents, mais: - avec les technologies courantes, il est déjà difficile de livrer des fonctionalités complexes et innovantes - en fait les informaticiens ont la tête littéralement prise par des myriades de détails, toujours changeants, qui leur "prennent la tête". - joint au fait que qu'il faut sortir en temps et en heure, que des bugs et des demandes nouvelles arrivent inopinément, - le résultat est qu'on a quelque chose qui marche, certes, mais qui est difficile à faire évoluer: ajouter des fonctionalités, changer de plateforme, fusionner ou éclater l'application, communiquer avec d'autres application, suivre les tendances et standards, ... de plus, il y a une difficulté à communiquer entre experts du métier et infomaticiensCe soir je vais à la présentation Grid du JUG.
http://www.parisjug.org/xwiki/bin/view/Meeting/20090512
Et cet am , j'ai rdv avec un bon client qui n'est pas très exigeant :
le pole emploi ;)
J'ai fait l'ouverture de fichiers depuis le Web dans EulerGUI : vous pouvez ouvrir directement la démo.
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/test_person.n3p
dans File / Open Project from URL
Pas encore en argument de la ligne de commande , ni glisser-déposer .
Hier , j'ai fait la manip. de démarrer l'ordi. de Marie sous Ubuntu 8.04; elle m'a demander de récupérer ses fichiers.
Ca a parfaitement marché; il faut taper sur Escape ou F1 au démarrage (ça dépend des machines).
Ensuite Ubuntu te demande si tu veux installer ou essayer.
Après tu ouvres Système / administration / Editeur de partitions
et là tu vois le nom Linux de tes partitions ( correspondant à C: D: ).
Pour moi c'était /dev/sda2
.
Pour voir sous Linux ces fichiers Windoze, il faut faire un montage (je ne comprends pas pourquoi Ubuntu ne le fait pas automatiquement).
D'abord créer un répertoire vide:
sudo mkdir /media/windows
Ensuite "monter" la partition Windows sur ce répertoire :
sudo mount /dev/sda2 /media/windows
Et après tu vois tous les fichiers :
cd /media/windows ; ls -l
Je suis dans une vraie course contre le temps; avoir la masse critique c'est difficile !
Mais à terme je voudrais pouvoir absorber des données ayant un XSD , tout comme je peux absorber du UML, eCore, RDFS ....
En fait je me dis qu'il y a là beaucoup plus de contenu disponible qu'avec UML ...
c'est à dire ?
He bien si on fait le total des octets de XML ayant un XSD disponible sur le Net, et des octets de mêmes existant dans les entreprises, on arrive à un total beaucoup plus grand que le total des des octets de données répondant à modèle UML ou eCore.
Les données répondant à un modèle UML ou eCore ne sont pas forcément en XMI ... Il y a JSON .
Ces arguments sont une bonne chose, car ça me motive pour intégrer Gloze.
apprentissage informatique : à voir
je refais l'archi. IHM + moteur de règles .
En ce moment je fais un diag. de séquence sur papier , c'est instructif ...
Hier j'ai mis à jour http://deductions.svn.sourceforge.net/viewvc/deductions/html/runtime-architecture.html
http://www.eclipse.org/newsportal/thread.php?group=eclipse.modeling.mdt
http://www.eclipse.org/newsportal/thread.php?group=eclipse.tools.emf
If you want to export your UML or eCore models in the Semantic Web World, there is a tool.
?????????????????????
http://lists.w3.org/Archives/Public/public-cwm-talk/2009AprJun/
I am pleased to announce version EulerGUI 1.1, a development environment for
Semantic Web technologies, written in Java, under LGPL licence .
Out of the box, you can run :
- the Drools inference engine, but with very few of the CWM builtins
- CWM if you have installed it ;)
In addition, if you install the Yap Prolog engine, you have the latest Euler
engine, as explained in the User Manual. Euler has numerous ( and unlisted
:( ) extensions compared to CWM. For example a catch-all query is possible:
{ ?S ?P ?O } => { ?S ?P ?O } .
Euler has most of the CWM builtins, plus its own builtins:
http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/log-rules.n3
etc ...
I am pleased to announce EulerGUI 1.1 , a development environment for Semantic Web technologies , written in Java , under LGPL licence .
The Change Log is :
- reading and translating to N3 EMF eCore files
- reading and translating to N3 UML XMI files
- project pipeline and project import
- corrections for Vista and Mac
- N3 parser in Java based on parser4j, 4 times quicker, thanks to Luc Peuvrier;
now replaces the old ad-hoc Java parser
- implemented e:findall extension in Drools engine
- Drools engine : implement integrity_constraint
- add to documentation : howto_debug_n3_rules.html
- Add class DroolsRunExportedProject , with a main()
to load and run facts and rules independently from EulerGUI,
after File / "Export as Drools".
- Generated Swing application:
- use Drools engine at runtime
- able to make a round-trip with user N3 file and see the modifications
in the GUI after re-opening the file.
- possibility to fire rules creating exception at runtime
Download from
https://sourceforge.net/projects/eulergui
User Manual here:
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html
Preceding annonce was here:
http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&gid=49970&discussionID=1664543&sik=1241442064001&split_page=1&goback=.ana_49970_1241442064001_3_2&report.success=62WUlrnddR6bgwSqXhj6sMCTLzs-Mtpi3fLJWbNsWtuooxKwgTL8r5xsvgkbozKwEkXBakadko
J'ai le plaisir d'annoncer l'environnement de développement EulerGUI 1.1 pour le Web Sémantique, sous licence LGPL. L'annonce précédente était le 24 février.
Voici les nouveautés:
- lecture et traduction en N3 de fichiers eCore EMF
- lecture et traduction en N3 de fichiers UML XMI
- pipeline de projets et importation de projets
- corrections pour Vista et Mac
- l'analyseur N3 en Java basé sur parser4j est 4 fois plus rapide, grâce à Luc Peuvrier ; il remplace maintenant le vieil analyseur ad hoc en Java
- moteur Drools: contraintes d'intégrité
- ajouté à la doc. : howto_debug_n3_rules.html
- Ajouté la classe DroolsRunExportedProject, avec un main() pour exécuter faits et règles indépendamment d'EulerGUI, après clic sur File / "Export as Drools".
- Application Swing générée :
- moteur Drools à l'exécution en temps réel pour créer les formulaires
- capable faire un aller-retour avec le dossier de l'utilisateur N3 et voir
les modifications dans le GUI après ré-ouverture du dossier.
- possibilité de règles envoyant des exceptions à l'exécution
Téléchargement de Euler GUI
https://sourceforge.net/projects/eulergui
Manuel ici :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html
--
Jean-Marc Vanel
Conseil, services, formation.
Programmation à base de règles, Web Sémantique.
http://www.pactepme.org/place-de-marche
Je m'inscris à "5 minutes pour convaincre - 13/05" : http://www.pactepme.org/evenement/785/coaching
trouvé ce joli site french sur les expressions régulières : http://www.expreg.com/ancrages.php
l-internet-des-objets-n-est-pas-celui-que-vous-croyez
http://www.ubuntulinux.fr/index.php?post/2009/04/14/Flash-et-Java-pour-Ubuntu-64bits
Contrairement aux technologies classiques (OO, SQL, C/C++/Java), avec RDF il est possible d'ajouter de l'information à tout ce qui a un URI de l'extérieur, c'est à dire sans modifier le moins du monde la chose annotée.
Appliqué à des objets logiciels, c'est plus général que les points d'insertion d'eclipse, et ça s'apparente à AOP.
J'explore plusieurs pistes business :
Là il y a 2 outils Java --> RDF qui peuvent être intéressants :
http://esw.w3.org/topic/ConverterToRdf
(il faut que EulerGUI y soit dans la catégorie UML ).
Pour l'instant, j'annonce les livraisons sur :
http://lists.w3.org/Archives/Public/public-cwm-talk/2009JanMar/0015.html
Par ailleurs, je suis en contact avec les dirigeants de programmez.com
cf article "Saisie efficace d'un modèle".
J'ai mis en ligne mes photos; hélas elles ne sont pas très bonnes:
http://jmvanel.free.fr/uml/images/index.html
Je les ai écrites aussi en UML simplifié (textuel):
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/models/
Valorisant les modèles existants, UML, Web Sémantique ou autres, nous développons des outils Open Source générant des formulaires et des application complètes.
Notre environnement EulerGUI permet de mettre au point des règles avec plusieurs moteurs d'inférences (Drools, Prolog, CWM).
Je viens de rentrer d'un endroit ensoleillé mais sans Internet ...
Pas facile de travailler sans Internet ni grand écran ...
Mais c l'occasion de réfléchir plus globalement. En particulier ma démarche suppose qu'on a déjà des modèles ... ce qui en fait doit être peu fréquent . Il faut donc insister sur les bénéfices de la modélisation, quelle qu'elle soit. Et sur les services que je peux offrir dans ce domaine.
Il faut également insister sur RDF et les technologies reliées, qui sont le véritable espéranto de l'informatique, beaucoup plus que XML.
Il y a 3 volets pour le modèle :
Ca fait longtemps que je trouve insupportable d'entrer un modèle dans un éditeur de type UML, ou Protégé OWL.
Ca prend 4 fois plus de temps qu'en N3 ou même en Java dans eclipse, sans parler des éditeurs de type property sheet comme EMF.
:id1796397632 a uml:Class ; uml:name "Employee" ; uml:ownedElement :id1770446243 . :id1770446243 a uml:Property ; uml:name "name" ; uml:type uml:String .
est assez embêtant parce qu'on est dans un contexte où on peut entrer
n'importe quoi , pas seulement des classes et des propriétés. Ce serait
pareil en OWL ou en eCore.
Mon idée est de prendre le meilleur de N3 et d'un UML simplifié, dessiné en
texte, comme celui que j'utilise dans les mails:
# pour dire qu'on est dans le
namespace UML 2:
@prefix : <http://www.eclipse.org/uml2/< wbr>2.1.0/UML#>
.
Employee--------------<>Contract-------Employer
name : String
birth : Date
-----------DriverLicense
---------- HealthInsurance
Notes
Mis en ligne le résumé de mes deux séminaires gratuits, décideurs et informaticiens .
La première impression, hélas, est que j'aurais plus vite fait de générer du PHP de base que de comprendre quoi générer avec un de ces frameworks.
Y-at-il l'équivalent de Hibernate en PHP ?
J'ai réfléchi à mes offres de services, et d'ailleurs la formation UML m'a donné à penser.
Et je me suis dit que mes technologies actuellement en développement pourraient intéresser des prestataires en sites Web . En effet, je pourrai bientôt générer automatiquement près de 100% de la partie gestion de données d'un site Web en PHP , grâce au framework "Déductions" . Ma prestation consisterait en formation et prise en main du framework (100% open source et basé sur des standards) . Il pourrait aussi y avoir le développement de fonctionalité spécifiques dans le framework.
Dans le cadre du projet "Déductions" , nous travaillons à faciliter la tâche des concepteurs jusqu'à demander zéro compétence informatique. Par contre, une compétence en modélisation restera nécessaire. Cependant des modélisations génériques par métiers seront disponibles, aussi en Open Source. Et bien sûr, nous pourrons effectuer la modélisation à partir du cahier des charges ou de d'une spécification.
Cher lecteur, si dans le cadre de vos fonctions, vous connaissez des prestataires en sites Web qui pourraient être intéressés, envoyez les moi !
En fait les prestataires en sites Web ont un framework qu'ils connaissent à fond, Drupal, Joomla ou autre . Et ils vont pas changer de techno.
En fait c'est toute une chaîne qu'il faut vendre: 1. créer des modèles ( OWL ou UML ) 2. écrire des règles métier 3. valider l'appli. 4. déployer.
Assez excitant , le programme de AAAI 2008 :
http://www.aaai.org/Conferences/AAAI/2008/aaai08program.pdf
Je vais me payer les proceedings.
J'ai remarqué
http://www.lespetitescases.net/sparql-maillon-essentiel-web-of-data
http://www.lespetitescases.net/ou-s-amuser-avec-sparql
http://jena.sourceforge.net/ARQ/Tutorial/
J'ai reçu ce matin un appel d'une société qui fait des développements scientifiques et qui a besoin de "petites mains", expérimentées quand même, pour développer . Mais ils ne veulent pas de conseils. A la suite de ça , j'ai ajouté sur le site un "Questionnaire sur les pratiques de développement logiciel" pour aider les clients à évaluer leurs pratiques.
J'ai conscience que beaucoup d'informaticiens reçoivent mal mon message, car il s'agit d'automatiser une partie de leur travail, et de plus avec des techniques qui ne sont pas dans les habitudes.
Page Update Checker 0.3.1
https://addons.mozilla.org/fr/firefox/addon/920
JUG Paris : Soirée Scrum (10/04/2009)
http://www.parisjug.org/xwiki/bin/view/Meeting/20090414
Une bonne prés. sur le Web Sémantique par Alexandre Bertails :
http://www.parisjug.org/xwiki/bin/download/Meeting/20090310/parisJUGSemWeb20090310.pdf
(voir la liste d'outils à la page 34)
Il faudrait intégrer un requêteur SPARQL dans EulerGUI, peut-être en réutilisant la syntaxe N3. En tous cas les sources comme DBPedia sont incontournables.
Qu'est-ce que vous dites de ça :
http://attempto.ifi.uzh.ch/ws/ape/apews.perl?text=Every+man+is+a+human.&solo=owlrdf
C'est quand même grandiose de pouvoir créer une ontologie en Anglais :)
Le parser REST n'admet pas les adjectifs, mais autrement il comprend bien :
http://attempto.ifi.uzh.ch/ws/ape/apews.perl?text=A%20customer%20inserts%20two%20cards.&solo=owlrdf
Résumé - Présentation (PDF) (aussi en OpenOffice)
Résumé
J'ai lu dans pour la Science d'avril l'article de J.P. Delahaye sur le fameux Jeu de la Vie de Conway. L'algorithme HashLife utilisé dans le moteur de jeu golly pour calculer les générations parait intéressant à étudier. Il est capable d'exploiter les régularités pour économiser aussi bien le temps CPU que la mémoire. Les concepts sous-jacents peuvent être utiles pour des bases de données et des moteurs d'inférences.
Jean-Marc Vanel - Conseil, services, formation, programmation à base de règles, Web Sémantique
Ce blog est libellé ainsi sur Viadeo:
Mon activité dans le Logiciel Libre, la formation, le conseil; l'Intelligence Artificielle, le Web Sémantique, Drools, languages N3 OWL, Java, etc ...
Je débugge mes règles UML-->OWL, et j'écris le résumé d'un séminaire décideurs .
Ecrit aussi mes trucs pour mettre au point des règles en N3 .
http://websemantique.org/PagePrincipale
* Méthodologie Objet : UML 21h
* Modélisation UML
* Méthode (UP)
* Architecture
* Expression du besoin technique Conception Préliminaire
* Conception détaillée
* Conception détaillée de la partie Présentation (IHM)
* Conception détaillée de la partie "Métier"
* Conception détaillée de la partie "Accès aux données"
* Génération de code et reverse-engineering
* Diagramme de classes
* Diagramme de collaboration/séquence
* Diagramme d’états transition
* Diagramme de composants
* Diagramme de déploiement
Formation UML pour "web consultant chef de projet"
http://semantics.univ-paris1.fr/
Un sympathique site en Français:
Il faudrait que je m'inscrive là :
http://websemantique.org/TechniquesEtOutilsPourLeDeveloppeur
Aussi : http://planete.websemantique.org/
Tout comme je maintiens un plan de développement pour Déductions, je devrais avoir un Plan "affaires".
Ce matin j'ai ajouté plein d'entrées dans mon agenda Google pour les Séminaires LIAFA. D'abord un manque d'intelligence criant: il fait un rappel par défaut 10mn avant , alors qu'il sait que je suis à Versailles, à une bonne heure de Paris 13. On est loin de big brother pour l'instant! Bon, ensuite j'ai voulu régler le délai de rappel par défaut: pas moyen !
Voir : Intelligence manquante dans une IHM, Exemple de comportement (in)intelligent, General GUI principles
J'ai toujours pensé que les comportements sur évènements devaient être configurables.
En fait cela revient à atténuer, ou effacer, la frontière entre configuration et programmation.
De toute façon une "programmation" déclarative ressemble à de la configuration.
Mais il faut que la configuration comme la programmation soient plus intuitives, plus intelligentes, avec des capacités de recherche.
Au sujet des capacités de recherche, une bonne fonctionalité est le petit moteur de recherche sur les réglages dans eclipse. Par contre sur le code source c'est trop limité; cela demanderait tout un article; par exemple trouver les classes C1 qui produisent une classe C2.
Un point important, si l'on veut que l'utilisateur final modifie les comportements, est qu'il faut des gardes -fous. L'utilisateur ne doit pas pouvoir modifier les "fondamentaux" de l'application. C'est à dire qu'il ne doit pas créer des contradictions avec certaines contraintes embarquées dans l'application. Par exemple un bouton marqué "enregistrer dans l'agenda" ne peut pas ne pas enregistrer.
Ceci étant, il y a deux moyens: soit on re-vérifie les contraintes à l'exécution (coûteux), soit on calcule a priori la contradiction entre le nouveau comportement et une des contraintes: plus difficile, mais beaucoup plus satisfaisant. Là on a besoin d'un moteur d'inférence capable de raisonner sur un programme. Mais on sait que trouver la contradiction peut être indécidable.
Tout ce savoir de base sur le temps, l'espace, les personnes ... et les rendez-vous, demande un effort important pour être formalisé d'une façon réutilisable dans plusieurs contextes. Les notions en question sont par exemple: une personne ne peut pas être en plusieurs endroits, un rendez-vous est associé à un endroit, il faut un certain temps pour se déplacer, etc.
Il existe plusieurs ontologies de haut niveau (SUMO, MILO, Dolce, BFO, OpenCyc, ... ) qui ont des points de vue différents sur le monde, et qui sont à un niveau d'abstraction très élevé (voir http://jmvanel.free.fr/computer-notes_2008.html#Upper ). Il faut les réutiliser à bon escient.
A terme la valeur ajoutée en informatique ne sera plus dans les lignes de code, mais dans la connaissance formelle en amont des lignes de codes. Encore faut-il avoir des moyens fiables de transformer la connaissance en logiciel opérationnel. Et c'est ce à quoi nous nous employons. Cela passera entre autres par l'écriture d'ontologie et des règles sur les objects logiciels eux-mêmes. A ma connaissance, cela n'a jamais été fait, sinon à des fins purement descriptives.
175 rue du Chevaleret, 75013 Paris
Voir plus bas ma liste de laboratoires de recherche en IA .
Contexte: nous avons un noyau d'ontologies et de règles en logique Notation 3 (basé sur RDF), et de moteurs d'inférence, offrant la génération de formulaires et d'applications à partir d'un modèle métier et d'un minimum de spécification annexes.
Quel serait le profil de vos stagiaires ?
Quel type de tâches ?
Il y a de nombreux thèmes de stages :
Donc il y a place à la fois pour des profils d'informaticiens classiques, et pour des stagiaires avec des connaissance en programmation logique .
Je dois passer à la vitesse supérieure avec Déductions & Cie ; la priorité n'est plus de montrer à tout prix des fonctionalités; il faut soigner l'infrastructure : restructurer , ajouter plein de tests , créer des outils et des passerelles annexes : POJO, UML, RDFS ;
et pour cela il faut d'abord avoir des tuyaux (pipes) pour enchaîner les traitements en logique N3 .
Bien sûr ces tuyaux seront spécifiés dans un petit langage N3 .
C'est l'occasion de commencer à occuper un vaste territoire, en l'occurence créer des ontologies pour les concepts de l'ingéniérie logicielle.
Par exemple personne ne s'est encore préoccupé de standardiser un modèle et un format de fichier pour un IDE du genre de EulerGUI, ou Protégé, etc ...
Je vais lancer un dialogue là-dessus.
Pas mal pour se faire connaitre; et pas très compliqué ...
(ça porte conseil, une petite course à pied )
Dans la rubrique nettoyage , il faudra remplacer le maximum du comportement des formulaires par de la logique N3 .
J'ai besoin urgent de stagiaires , qu'on se le dise !
Il manquait une classe ... C'est moi qui ai fait l'erreur . J'ai oublié de versionner 2 nouvelles classes.
D'ailleurs un environnement de dev. un peu + intelligent ne laisserait pas passer un commit avec une classe C1 qui dépend d'une classe C2 qui n'est pas versionnée .
Pas besoin d'Einstein pour faire ce genre de raisonnement .
Dès que eclipse aura un service de notification pour les actions utilisateur , beaucoup de choses seront possibles !
Pour l'instant je suis moi aussi dans de la mise au point ...
Les dernières correction sur le moteur Drools a la mano ...
avant d'appliquer des règles sur les règles :) ....
(18:31:43) Luc : C'est cela le problème de bootstrap ? comme le generateur de données de parsing qui à un parser qui utilise des données de parsing qui ne peuvent être généré par le générateur tant qu'elles n'existe pas.
C'est analogue .
Pour traduire des règles N3 en règles Drools, je pense avoir une implémentation de base en N3 , qui va sortir un résultat dans un vocabulaire N3 qui reproduit fidèlement le langage Drools, puis la traduction finale en chaîne de caracractère sera sans intelligence .
Et donc j'utiliserai pour commencer un moteur N3 existant ...
La démarche sera la même pour traduire N3 en Java, etc.
Sauf que là c + simple, car on ne considère là que des faits ( c à d. de simples triplets ).
J'ai déjà expérimenté avec des règles qui sont des requêtes sur la base de règles :) .
En fait mon processeur de bootstrap ce sera Euler, car il est le seul à pouvoir traiter des règles sur les règles .
J'ai pensé à tout ça dans le train ce matin :) ...
Je crois que ça sera + clair quand j'aurai quelques exemples;
(18:44:23) Luc : Je vois qu'il s'agit de tout traiter en IA au plus vite ? Et le parsing de N3 dans tous ça ?
en tous cas c'est la même démarche que pour générer des IHM, on crée des objets et on les remplit de proche en proche .
parsing de N3 dans tous ça ? Il en faut , bien sûr .
Dans l''avenir comme maintenant le traducteur Drools s'appuiera sur un parseur en Java,
maintenant c'est Euler, avec le nouveau traducteur ce sera parser4j , bien sûr .
(18:52:18) Luc : j'avais cru comprendre que la traduction de n3 en drools allait être fait à l'aide d'un moteur d'inférence !
oui
c ce que disais à l'instant
(18:54:51) Luc : Où intervient la parseur de N3 en java ?
Dans l'implémentation finale le moteur Drools va prendre en entrée des objets Java, soit directement issus de parser4j, soit qui auront été préparés pour optimiser .
Pour être + concret : soit des règles utilisateur r1.n3 , disons des règles pour des réductions commerciales .
Le flux serait :
r1.n3 ===> graphe d'objets N3Model ==règles_N3_vers_Drools==> règles Drools r1.drl
puis:
objets applicatifs app.n3 ===r1.drl==> résultat (comportement, validation, présentation, EAI)
Séminaire ce matin à Paris 7 (Diderot)
* Viktor Kuncak (EPFL, Lausanne) * Automated Reasoning for Reliable Software
Les favoris de Swoop sont ici:
./src/org/mindswap/swoop/favorites.txt
Exposé de HAMDI Fayçal sur un outil d'alignement de taxonomies.
J''ai découvert Falcon, un outil dont je ne peux faire mieux que citer le but :
Falcon is an infrastructure for Semantic Web applications, which aims at providing fundamental technology for finding, aligning and learning ontologies, and ultimately for capturing knowledge from the Web via an ontology-driven approaches.
Signe des temps, c'est la première fois que je télécharge un logiciel Chinois (SouthEast University). Pour tester , j''ai pris deux ontologies:
FOAF: http://xmlns.com/foaf/0.1/
http://www.mindswap.org/ontologies/debugging/university.owl
Pendant une demi-heure, il ne se passe rien avec l'IHM ! :( Il va falloir lire la doc. Falcon.
Le séminaire se trouvait dans les locaux du Microsoft Research-INRIA Joint Centre ( évènements Microsoft Research-INRIA ). Et en plus j'ai rencontré Guillaume Rousse que je connais depuis mes travaux sur les bases biologiques.
Hier c'est une journée peu fructueuse ! J'ai bricolé sur la traduction N3 --> Drools programmé a la mano, et il y a une explosion combinatoire de cas : triplet dans l'antécédent ou dans le conséquent, liste ou pas, liste dans le sujet ou l'objet, variable déjà définie ou pas, function builtin ou pas ... C'est là que le Prolog est commode !
Ou un autre moteur de règle ... Ca se mord un peu la queue !
Bien sûr dès le départ je savais que c'est une preuve de concept ...
Il va falloir arrêter les frais sur cette implémentation du traducteur N3-->Drools ... Et faire quelque de propre, dans l'état de l'art des compilateurs, et même mieux en programmation logique ou à base de règles.
Heureusement je ne suis pas loin de couvrir de quoi faire des démos convaincantes, mais ce sont les builtin qui gachent tout !
Il y en a beaucoup ! Si vous regardez dans euler.yap "builtins" , en 200+ lignes c'est fait ! C'est concis comme un rêve !
Pour information les "builtins" ce sont des fonction qui sont prédéfinies et implémentées en interne par un moteur de logique N3 : mathématiques, logique, chaînes, ....
En fait j'ai un problème de "bootstrap" à ce stade; j'ai besoin d'un moteur de règles pour en faire un ...
L'avantage de Drools tel quel est qu'il absorbe bien les Pojo.
Cependant le langage Drools est un langage mal conçu ... Je traduis un langage plus agréable, N3, en Drools ...
Et en plus on peut récupérer des ontologies existantes (et bientôt aussi EMF, UML, Pojo ). J'ai déjà un traducteur depuis SQL, RDBToOnto, de chez Thales .
A voir : http://introspector.sourceforge.net/
Je me suis inscrit à Solutions Linux le 31 mars. Ce qui est intéressant, c'est que j'ai pu télécharger le fichier ICS pour cet évènement et l'importer dans mon calendrier Google. Mais ce qui ne marche pas encore (ou peut-être avec G. Chrome) c'est de glisser-déposer l'icone depuis la fenêtre Solutions Linux vers le calendrier.
C'est un exemple de ce que j'appelle la compréhension sans protocole (ou compréhension a priori).
This perfectly frequent loop triggers a "DU-anomaly" diagnostoc by PMD !?
int i; while( (i = is.read()) != -1 ) { result.write(i); }
Regression: Si on ouvre à l'avance la fenêtre JavaScript on a ceci:
java.lang.OutOfMemoryError: Java heap space
C'était une excellence conférence ! Hier je suis allé à cette Conférence TAO :
Séminaire Mondeca "Vers une Architecture Orientée Services sémantique" .
TAO, Gate, RDBToOnto, etc, sont des outils prometteurs.
J'ai découvert aussi videolectures, le site de videos scientifiques.
javaws ontopoint.jnlp
Je saisis l'occasion d'écrire le plan de développement de Déductions comme un document N3.
Cette nuit j'ai eu l'idée d'une fonctionalité chouette pour EulerGUI: glisser-déposer une URL ou fichier pour l'ajouter au projet .
C'est fait !
Une petite discussion avec Luc Peuvrier, l'auteur (entre autres ) de parser4j .
11:46:09) Luc : je me demande si la génération de code assembleur ( ou pseudo code ) à partir de l'AST peut être posé comme un problème d'IA.
(11:49:15) jeanmarc.vanel@gmail.com/Home58A22E34: En gros oui . C'est plus long à développer, et les performances sont moins bonnes mais c'est plus robuste et réutilisable. Il y a 2 techniques différentes :
2. est plus performant, mais un peu moins propre.
(11:55:18) Luc : moins propre sans quel sens ?
(11:55:55) jeanmarc.vanel@gmail.com/Home58A22E34: Drools impose de gérer des priorités entre règles, comme le fait XSLT par exemple. Ca peut devenir difficile à gérer. Alors qu'avec 1, toutes les conclusions possibles sont vraies, on n'a pas besoin de priorités pour choisir une seule conclusion pour un antécédent donné. Aussi en logique pure, il est possible d'avoir un ou logique dans la conclusion (je ne m'en sers pas pour l'instant). Par contre avec Drools au peut avoir des règles qui dépassent la logique du 1er ordre, par exemple dire "pour toutes les propriétés d'un objet, faire ceci" . Par exemple actuellement j'ai du code Java ad hoc qui génére du JavaScript à partir de triplets RDF sortant du moteur Euler. Ce serait malcommode, voire impossible à faire avec la logique N3. Par contre avec Drools ça convient bien; je pense réécrire ça en Drools. Ce sera beaucoup plus propre qu'en Java, puisque l'enchaînement des règles est pris en charge par le moteur, pas par le programmeur. C'est déclaratif !
Pour syntétiser : Java < Drools < logique N3
< signifie "plus propre que"
Pour être concret, voici le résultat d'Euler en N3, que je transforme ensuite en JavaScript :
ns2:myWindow a :javax_swing_JFrame. ns2:myWindow a :javax_swing_JFrame.
ns2:myWindow a :javax_swing_JFrame. ns2:myWindow :title """generated by Euler GUI""".
ns2:myWindow a :javax_swing_JFrame. ns2:myWindow :visible true.
ns2:myWindow a :javax_swing_JFrame. ns2:myWindow javam:setSize (300 100).
ns2:myWindow a :javax_swing_JFrame. ns2:myWindow a :java_awt_Container.
ns2:myWindow a :java_awt_Container. ns2:myWindow a :javax_swing_JFrame.
ns2:myWindow a :java_awt_Container. ns2:myWindow :title """generated by Euler GUI""".
ns2:myWindow a :java_awt_Container. ns2:myWindow :visible true.
ns2:myWindow a :java_awt_Container. ns2:myWindow javam:setSize (300 100).
Le JavaScript correspondant est:
myWindow = new javax.swing.JFrame(); ; myWindow.title = "generated by Euler GUI" ; myWindow.visible = true ; myWindow.setSize( 300, 100 ) ;
Il me semble que votre problème de générer de l'assembleur à partir de l'AST (Abstract Syntax Tree) est du même genre. Donc vous pourriez faire ça avec Drools. Un truc bien avec Drools est que c'est très utilisé, c'est mûr. Et il y a du répondant sur le chat IRC ! Il y a des bons didactitiels pour Drools ... Et un plugin eclipse, c'est facile de s'y mettre . Vous installez le plugin, et vous avez tout . C'est très adapté pour traiter des objets JavaBeans .
Hier j'étais au Séminaire du Labo. d'Intelligence Artificielle à Paris 6 Saint-Denis (là où j'étais allé pour le General Game Playing), sur "Rendus expressifs" (traitements d'images). J'y retourne lundi.
J'irai à ce Séminaire à Jussieu le 9 février 11h : Viktor Kuncak * (EPFL, Lausanne) * Automated Reasoning for Reliable Software .
A l'inria Rocquencourt, le 11 mars , j'irai écouter "le nudging direct et retrograde pour l'assimilation de données" .
Lundi 26 sera bien rempli avec Saint-Denis à 14 heures, et Villenaneuse (si possible ) à 15h30 : La plateforme Why de vérification déductive de programmes C et Java
Suivi mardi 27 par le Séminaire Mondeca "Vers une Architecture Orientée Services sémantique" .
Jussieu - Paris 7, LIAFA == Laboratoire d'Informatique Algorithmique: Fondements et Applications . 175 rue du Chevaleret, 75013 Paris, à l'angle de la rue Clisson, Métro Chevaleret. Il se trouve au sixième étage, dans l'aile A.
Laboratoire Preuves, Programmes et Systèmes - CNRS UMR 7126
Equipe Intelligence Artificielle et Systèmes d'Inférence (IASI)
a project in the interface between linguistic semantics, metaphysics and philosophy of mathematics;
13 rue du Four 75006 Paris
J'ai envoyé ces nouvelles avant Noël. Qu'en est-il maintenant ?
Comme on peut voir dans mon journal en Anglais, j'ai surtout travaillé sur sur un cas réaliste de bon de commande. Notamment comment avoir une forme limitée de raisonnement par défaut ( utiliser l'ID comme label quand il n'y a pas de label RDF ). Et aussi prendre en compte les propriétés des classes parentes. Autrement tout ceci dessous reste à faire :( .
Je fais beaucoup de plomberie, mais ça commence à couler dans mes
tuyaux ! :)))))))))
Cette simple ligne dans java_projection-rules.n3 : :GUIHelper javam:addFieldBehavior ( ?JTEXT_FIELD ?Property ) . permet d'ajouter le comportement au champ de saisie, c'est à dire de stocker la donnée quand le champ perd le focus ( http://deductions.svn.sourceforge.net/viewvc/deductions/n3/java_projection-rules.n3?view=markup) . Parce que GUIHelper a été exposé au moteur JavaScript, et que le namespace javam: indique un appel de méthode java . Pour l'instant ce comportement est codé en dur en Java. Mais plus tard il pourra être configurable, ou même implémenté en règles logiques. Pour l'instant je vais avancer sur la route de ma POC (Proof of Concept), qui est de créer un éditeur CRUD simple. Ca veut dire:
Un petit cas d'utilisation intermédiaire serait d'implémenter un formulaire de saisie pour un questionnaire pour les utilisateurs d'EulerGUI. Il faudra donc exporter l'application Swing + JavaScript générée ( pour l'instant tout se passe dans EulerGUI ). Et puis sauver les données en N3 dans l'application générée . Bien sûr on aimerait bien, pour cet usage, exporter l'application en PHP, qui serait déployé sur SourceForge ... Ca viendra ! Il faudra d'abord restructurer java_projection-rules.n3 pour créer une couche supplémentaire avec des widgets abstraits généralisant Swing et HTML. Cette couche sera utile aussi pour la génération SWT avec Wazaabi2 d'Olivier Moïses, ou une génération GWT, etc . A part ça il y a pas mal d'améliorations dans EulerGUI qui facilitent la vie. Notamment le source généré JavaScript apparaît dans la console JavaScript. Pour l'instant j'utilise le moteur Euler + Prolog Yap de Jos De Roo, qui est 1000 (sic!) fois plus rapide que le moteur Euler + Prolog en Java JLog . Je laisse de côté le moteur Drools, qui est encore plus rapide, mais nécessite encore un peu de mise au point (il marche dans les cas simples, mais pas avec la génération d'application de Déductions) . Dommage, parce que, grâce à Maven, tout ce qui est 100% Java est très facile à livrer. Pour le moteur Euler + Prolog Yap, je n'ai pas pris le temps d'écrire une procédure d'installation. Mais vous pouvez toujours déjà installer Maven et Yap ;) . Et si vous voulez installer un snapshot, faites-moi signe, je ferai ce qu'il faut. Je vais aussi écrire un How-to pour Déductions. Surveillez le Wiki Déductions. Bon Noël à tous Je pars une semaine à Cracovie le 26 ; je fais face à des pressions pour ne pas emporter d'ordinateur ... Mon agenda : http://www.google.com/calendar/embed?src=jeanmarc.vanel%40gmail.com&ctz=Europe/Paris |
Ed Merks, l'auteur de EMF, a fait quelques diagrames qui synthétisent EMF:
http://ed-merks.blogspot.com/2008/06/was-gany-good-to-you.html
Il est encore un peu tôt pour introduire un niveau widget de convergence détaillé . C'est à dire une ontologie (basée sur Java Swing) qui soit une convergence de Swing, SWT, Qt, etc.
J'ai fait la validation pour les types simples, rougissant ce qui n'est pas valide dans les champs de saisie.
Mes prochaines étapes: les champs multi-valeurs (listes ou ensembles), les champs correspondant à des propriétés objet (au sens OWL, EReference au sens EMF), sauver l'état courant en N3 dans l'application générée.
Je lis avec intérêt le fil de discussion que mon message "Pourquoi encore C++ ?" a déclenché .
C'est le premier, Mayeul, qui a fait la meilleure réponse, en insistant sur l'accès aux resources de l'OS et du matériel bien meilleur en C/C++ .
J'ai appris ceci:
Le jdk1.6.0_07 possède un outil sympa pour (entre autre) profiler: jvisualvm. Savoir l'utiliser est un must à mon avis.
Mon profil sur Google groupes est un peu minable: 4 messages, mais il n'y a pas tous les messages de quand j'étais jmvanel@free.fr .
Un grand merci à Fabien LE LEZ pour sa réponse claire et complète sur "choix d'une machine de développement sous Linux ".
Merci à Luc Peuvrier de m'avoir indiqué une série d'articles de Pirmin Lemberger :
Je partage globalement le scepticisme de Pirmin sur le Web Sémantique en soi (1.) . Mais il ne faut pas jetter le bébé avec l'eau. Dans un domaine restreint, mais encore très vaste, les spécifications associées au Web Sémantique (RDF, OWL, N3) peuvent être très utiles. Ce domaine est celui du développement logiciel. Je prétends que RDF et OWL sont de meilleures repésentations du monde et des concepts que UML, EMF, Java Pojo, SQL, etc. D'abord parce qu'ils ont été faits pour ça; la logique de description à la base de OWL cristalise des décennies de recherche en représentation des connaissances. Et ensuite parce ce sont des vrais formats d'échange: stables, clairement spécifiés, avec de nombreux outils, avec des milliers de modèles réutilisables sur le Web, et des moteurs de recherche (Swoogle). Par contre, ce qui manque ce sont des outils pratiques pour réutiliser ces modèles dans des applications de gestion ou scientifiques standards.
Je partage également les réserves de Pirmin sur les API et les cadres (frameworks) Java (2.) , et l'idée que le progrès vient par les individus, pas par les collectivités. Dans l'histoire de Java, un moment crucial a été la spécification Servlet. Ca a été la première spécification qui s'est écartée de l'Orienté Objet et a inauguré les fichiers de configuration XML. Il n'y a rien dans un fichier de configuration qui ne soit exprimable par une API, mais réciproquement une spécification d'un fichier XML n'est pas directement une API . Et en plus la spécification Servlet a été dès le départ incomplète, puisqu'on pouvait seulement instancier des servlets, mais pas instancier un serveur.
Je respecte la volonté de Pirmin de revenir à des fondamentaux Java (Essential Java). Mais cela exige un vrai projet Open Source, sinon un framework honi ;-) . Cependant la façon de se sortir de difficultés du développement n'est pas de revenir à une pureté originelle Orientée Objet. Il me semble que les Design Patterns sont en fait un moyen de contourner les limitations de Java et des autres langages OO .
Ce que je propose, c'est de mettre beaucoup plus de sémantique et des moteurs de raisonnement dans le développement logiciel . Mais il ne s'agit pas de faire table rase du passé, mais plutôt de compléter et emballer les bibliohèques et cadres (frameworks) existants avec des annotations qui permettront de les trouver , les relier et de les interchanger beaucoup plus facilement . Et ceci ne sera pas limité à Java. En particulier, PHP est une plateforme de choix pour le Web, car on trouve des hébergements gratuits de qualité suffisante, ce qui n'a jamais été le cas pour Java. C'est pour réaliser tout ceci que j'ai commencé le projet Déductions, qui s'appuie sur l'environnement de développement EulerGUI .
A SUIVRE ......... MDA .......
Merci à Olivier Moïses de m'avoir parlé de OSGi. Je ne peux que coller le dialogue:
JMV >> j'ai besoin de qq'chose qui charge incrémentalement et paresseusement les jar au fur et à mesure des fonctionalités utilisées ; par exemple en utilisant les repo. Maven .
11:33 Olivier: ça s'appelle osgi ;-)
11:34 moi: un petit tutorial pour le même prix ?
11:36 Olivier: ya de la matière : http://www.aqute.biz/OSGi/Presentations
A l'intersection de "Web Semantique" et OSGi , j'ai trouvé ceci :
http://blogs.talis.com/n2/archives/143
A SUIVRE .........
Encore un autre exemple d'intelligence manquante dans une IHM.
Je fais un virement sur Internet (banque postale). Il n'y a que 2 comptes ( courant et épargne ) . Ayant choisi l'un des comptes, l'autre est déterminé.
He bien non, il faut le choisir. En plus dans une liste déroulante, alors que des boutons seraient plus appropriés (il faut être très riche pour avoir plus de 5 comptes actifs ).
Ca fait longtemps qu'il n'y a pas eu d'entrée ici! Difficile d'être au four et au moulin, en Anglais et en Français, sur les projets et sur les blogs.
Depuis des mois mes projets ce sont:
Je fais beaucoup de plomberie, mais ça commence à couler dans mes tuyaux ! :)))))))))
Cette simple ligne dans java_projection-rules.n3 :
:GUIHelper javam:addFieldBehavior ( ?JTEXT_FIELD ?Property ) .
permet d'ajouter le comportement au champ de saisie, c'est à dire de stocker la donnée quand le champ perd le focus. Parce que GUIHelper a été exposé au moteur JavaScript, et que le namespace javam: indique un appel de méthode java .
Pour l'instant ce comportement est codé en dur en Java. Mais plus tard il pourra être configurable, ou même implémenté en règles logiques. Pour l'instant je vais avancer sur la route de ma POC (Proof of Concept), qui est de créer un éditeur CRUD simple.
Ca veut dire:
Un petit cas d'utilisation intermédiaire serait d'implémenter un formulaire de saisie pour un questionnaire pour les utilisateurs d'EulerGUI. Il faudra donc exporter l'application Swing + JavaScript générée ( pour l'instant tout se passe dans EulerGUI ). Et puis sauver les données en N3 dans l'application générée . Bien sûr on aimerait bien, pour cet usage, exporter l'application en PHP, qui serait déployé sur SourceForge ... Ca viendra ! Il faudra d'abord restructurer java_projection-rules.n3 pour créer une couche supplémentaire avec des widgets abstraits généralisant Swing et HTML. Cette couche sera utile aussi pour la génération SWT avec Wazaabi2 d'Olivier Moïses, ou une génération GWT, etc .
A part ça il y a pas mal d'améliorations dans EulerGUI qui facilitent la vie. Notamment le source généré JavaScript apparaît dans la console JavaScript.
Pour l'instant j'utilise le moteur Euler + Prolog Yap de Jos De Roo, qui est 1000 (sic!) fois plus rapide que le moteur Euler + Prolog en Java JLog .
Je laisse de côté le moteur Drools, qui est encore plus rapide, mais nécessite encore un peu de mise au point (il marche dans les cas simples, mais pas avec la génération d'application de Déductions) . Dommage, parce que, grâce à Maven, tout ce qui est 100% Java est très facile à livrer. Pour le moteur Euler + Prolog Yap, je n'ai pas pris le temps d'écrire une procédure d'installation.
Mais vous pouvez toujours déjà installer Maven et Yap ;) . Et si vous voulez installer un snapshot, faites-moi signe, je ferai ce qu'il faut.
Un petit compte-rendu bref ...
Les prés.: http://www.mdday.fr/spip.php?rubrique20
Le clou de la journée c'était Ed Merks, le créateur de EMF et eCore.
L'insupportable stupidité des approches modèles : info ou intox ? (en anglais).
Il a rappelé que UML est un modèle très complexe ( après avoir
travaillé 2 ans dessus, je ne peux qu'approuver ).
Il a rappelé que le code généré par EMF à partir d'un modèle est aussi
optimisé que possible.
Le MD c'est une femme anorexique dans des vêtements excitants :-) (Ed dixit ) .
Voir son blog: http://ed-merks.blogspot.com/
J'ai raté le début de Didier GIRARD - Présentation: Model Driven : Ca marche !
Dommage , c'est un très bon conférencier ...
Ce qui m'intéresse, c'est qu'il a fait un DSL (Domain Specific Language) pour les formulaires de gestion ( basé sur Struts Layout et taglib ) .
J'ai remarqué l'idée courante comme quoi le DSL s'inscrit dans une démarche "d'industrialisation" . Je dis non aux usines logicielles. Le logiciel est et restera longtemps encore un artisanat. C'est autant un travail d'auteur que d'ingénieur, et ça le sera plus encore dans l'avenir.
Ensuite Grégory Weinbach de Object Direct a insisté sur la modélisation applicative, indépendante de la technologie d'IHM, et distincte des modèles de domaine (exemple choisir dans une liste). Ses "pattern applicatifs" sont des profils UML. Dans la foulée, le représentant de Merck a parlé de l'utilisation de ces techniques chez Merck.
Philippe Desfray, de Objecteering, un éléphant de l'Orienté Objet en France, a présenté son IDE qui se veut un fédérateur de modélisation à
l'échelle de l'entreprise. A noter qu'il y a une version gratuite (mais pas OSS). Il insiste sur la traçabilité ( chaque ligne de code doit être justifiée par un élément métier ). Il ne parle presque pas de MD. Il insiste sur les "techniques de cadrage" à partir d'un dictionnaire de concepts textuels, mais aucune velléité de se relier à des éléments linguistiques. Dans la foulée, le représentant de la DGME( Modernisation de l'Etat) a parlé de leur utilisation de l'outill Objecteering. En gros, ils entrent leurs données, puis sortent des XSD et des .doc , et c'est tout . La DGME s'appuie sur sur une francisation de l'UMM.
UN/CEFACT's Modeling Methodology (UMM): Overview
UN/CEFACT's Modeling Methodology (UMM) is a UML modeling approach
to design the business services that each partner must provide in order to
collaborate. It provides the business justification for the services to be
implemented in a service oriented collaboration architecture.
Thus, a primary vision of UN/CEFACT is
to capture the business knowledge that enables the development of
low
cost software based on service
oriented architectures (SOA) helping the small and medium
size
companies (SMEs), and emerging economies
to engage in eBusiness practices.
Techniquement, ce sont des profils UML.
Voilà une belle source de modèles pour moi .
Ensuite vint François Bonnet de Lyria / W4 . Ici, pas de prétentions à
une belle technique, des fonctionnalités. Lyria est un générateur de
formulaires, avec beaucoup de connecteurs ( SQL, etc ). Ils viennent
de fusionner avec W4, qui offre une infrastructure générique pour les
processus métier ( BMPL ). Techniquement les formulaires sont dans un
XML propriétaire, et rendus par un interpréteur. La personalisation se
fait par redéfinition de méthodes Java. Pour moi le BPM est du
fliquage des employés; le travail leur arrive choisi par la machine,
et les statistiques fournies sont du type nombre de dossiers/jour. Je
ne sais même pas si l'on peut définir des stat. personalisées. Le
processus "ne stocke pas l'information", il ne peut pas donc offrir
une intelligence adaptative (le bon serviteur). Une jolie blonde de
Structis (groupe Bouygues) a présenté les applications.
Après il y eut Kermagoret de BlueXML. Ils font de l'OSS, et même du
"logiciel durable", grâce à des modèles indépendant des technologies.
Ces gens concourent dans la même catégorie que moi :-) . J'ai déjà
croisé Kermagoret car nous avions un client commun, lui qui faisait du
Cocoon, et moi avec la base XML eXist . Une collaboration sera
peut-être possible. A noter qu'ils sont gavés de subventions . Leur
client est la SEM Pays De la Loire http://www.sem-paysdelaloire.fr/ (
Société d'Economie Mixte ).
Frédéric Madiot de MiaSoft est plus dans le logiciel de manipulation
de modèles ( comme Sodius ). Ils ont un environnement de développement
de template de génération ( basé sur eclipse ), par exemple traduire
Swing en GWT (Google Web Toolkit). Ils sont contributeurs eclipse,
dans le nouveau projet MoDisco:
(for Model Discovery) is an Eclipse GMT component for model-driven
reverse engineering.
Leur client est Philippe Laurel de Thalès Raytheon (TRS); ils générent
du code à paritr de modèles UML.
Aussi contributeurs eclipse, et même "membre (viril?) stratégique",
vient OBEO. Ils ont fait EMF compare, SCA, etc. Ils présentent Agility
un assistant de rétro-ingénierie, avec une application chez Atos:
traduction de Forté en Java . Je les ais vu aussi à Eclipse Now You
can, où ils présentaient un créateur générique d'éditeur graphique à
partir d'un modèle EMF quelconque.
J'ai raté la présentation M$ sur les DSL ( http://blogs.microsoft.fr/fmerand/archive/2006/03/02/21033.aspx ).
A propos on sent à travers toutes les présentations que UML est là comme fonctionnalité obligée, mais que les efforts portent partout sur les DSL.
Enfin Sodius, qui est plus dans le logiciel de manipulation de modèles
que dans les outils pour utilisateurs finals. Ils vendent leurs
composants de traduction, transformation et de rendu à tout les grands
du logiciel UML.
Ca se confirme que Nantes est une pépinière pour la modélisation ;
Bézivin était là d'ailleurs.
Sodius présentait MDWorkbench ( http://www.mdworkbench.com/ ), qui est
un outil de type couteau Suisse pour les architectes techniques, qui
intègre tous les formats possibles, et tous les types de
transformations ( impératives, et déclaratives à la QVT ). Il y a une version gratuite :-) .
Encore un autre exemple d'intelligence manquante dans une IHM.
Je fais un virement sur Internet (banque postale). Il n'y a que 2
comptes ( courant et épargne ) .
Ayant choisi l'un des comptes, l'autre est déterminé.
He bien non, il faut le choisir, en plus dans une liste déroulante (
alors que des boutons seraient plus appropriés )
Entendu à la radio ==> réforme carte judiciaire ==> améliorer efficacité de la justice ==> système expert ==> objections: justice inhumaine, erreurs, problème de responsabilité ==> remèdes: 1. avoir un système tel que que les juristes eux-mêmes peuvent le programmer ; 2. le système sera capable de dire, et de justifier (tiens un mot de la famille de justice) si le cas est hors des cas prévus; 3. le système expert ne supprime pas l'intervention humaine, mais c'est une aide et un gain de temps; 4. instaurer une responsabilité des experts juristes qui ont fait le système
Dans les idées de système expert, j'imagine un système de forums qui classifie et confronte automatiquement l'information, pour exemple une association de consommateurs qui entrent des apréciations sur des produits et services, éventuellement à un niveau local.
Je viens d'écrire un petit programme en Prolog qui crée un graphe aléatoire; je vais pouvoir faire d'intéressantes mesures de performance.
Marco m'a indiqué le framework web gwt de google. Le client lourd est de retour, et son assembleur clé javascript, voir les exemples GWT .
Après avoir regardé le showcase je me suis dit: un exemple de plus d'une collection de widgets, comme il en existe en Java, Qt, GTK, WxWidgets, JSP, etc.
Ma démarche serait d'abstraire ces concepts en un groupe d'ontologies, plus des règles qui permettraient d'appliquer le(s) widget approprié à un objet concret (ou à une classe).
J'ai mis un .mm (c'est à dire un fichier pour Freemind ) dans http://jmvanel.free.fr/uml/development-uml-tools.mm
Je lis cet article de l'auteur de Antlr:
http://antlr.org/article/1100569809276/use.tree.grammars.tml
J'ai arrangé sur mon répertoire MP3 les noms incorrects:
for f in *.OK do echo ${f/\.OK/} ; mv $f ${f/\.OK/} done sync
Hier j'ai lu le début de la spec. QVT (Query, View, Transform ) de l'OMG . D'habitude je suis réticent vis-à-vis des techniques de l'OMG, mais là il y a qq'chose à creuser . C'est un pas de plus par rapport à XSLT ...
http://www.omg.org/cgi-bin/doc?ptc/2005-11-01
Il y a le projet ATL qui offre une implémentation proche de QVT; voici la doc. :
http://java.sun.com/products/jmi/
jboss
rules remplace Drools .
Présentation :
Object/Relational
Mapping with Hibernate
PDSTab:
Je redécouvre SWOOP, un éditeur OWL en Java de l'université du Maryland. Comparé à Protégé, il est moins complet, mais assez simple et ergonomique. Il est plus adapté à l'exploration de plusieurs ontologies, alors que Protégé est adapté à la cr&tion d'ontologies. Les bookmarks sont vraiment très commodes .
Le langage
d'ontologie Web OWL, Guide : traduction "officielle" en Français du W3C
.
http://www.ce2006.org/ 13th ISPE
INTERNATIONAL CONFERENCE ON CONCURRENT ENGINEERING:
RESEARCH AND APPLICATIONS
http://www.cs.umbc.edu/aaai06/ Artificial Intelligence and the Web
Protégé 2006 Conference
XML Prague 2006
CP 2006 Twelfth International Conference on Principles and Practice of Constraint Programming September 25 - 29, 2006 Nantes, France http://www.sciences.univ-nantes.fr/cp06/
Workshop on Nature Inspired Cooperative Strategies for Optimization NICSO 2006 29-30 June 2006 Granada, Spain ** MOTIVATION ** It's well known that biological entities, from single cell organisms -like bacteria- to humans, often engage on a rich repertoire of social interaction that could range from altruistic cooperation through open conflict. One specific kind of social interaction is "cooperative problem solving" (CPS), where a group of autonomous entities work together to achieve certain goal. Examples of Nature-inspired coordination/cooperation strategies include, but are not limited to, Artificial Ants Colonies, Artificial immune systems, Amorphous computing, Evolvable systems, Membrane computing, Quorum computing, Software Self assembly, Swarm intelligence, etc. The purpose of NICSO 2006 is to promote deeper investigations and a vigorous exchange of ideas about exciting and emerging new research areas in optimisation. In particular, we seek contributions that are inspired by nature and that encompass a range of spatio-temporal scales, for visionary conceptions of information processing and computation as pertaining to cooperation/collaboration mechanisms in the context of problem solving. More Information: http://www.nicso2006.org
FOIS-2006
International Conference on Formal Ontology in Information Systems
http://www.formalontology.org/
Que faire quand on n'a pas de bonne conception?
améliorer et restructurer l'architecture existante ( refactoring )
retarder le moment de l'implémentation, en avançant sur les points où l'on sait avancer, notamment :
formaliser les spécifications ( peut-être à la fin les spécifications formelles seront-elles interprétables par un moteur logiciel , ou par un générateur de code )
essayer de repérer les points d'extensions ( concept popularisé par eclipse )
préciser le modèle métier, bien sûr, et autres UMLeries, notamment les diagrammes de cas d'utilisation et de séquence
extraire des spécifications quelques fonctionalités essentielles, et les implémenter le plus simplement possible, à la eXtreme Programming
Avec une recherche sur :
SUMO CYC Bremen dolce
j'ai récupéré des références intéressantes:
Nicola Guarino sur DOLCE: http://ontolog.cim3.net/file/resource/presentation/NicolaGuarino_20060202/DOLCE--NicolaGuarino_20060202.pdf
State of the art semantic interoperability for distributed user ...
Semantic Web in UbiComp - SOUPA (Standard Ontology for Ubiquitous and Pervasive Applications)
Je m'aperçois qu'un de mes articles de 2004 : Intelligence Artificielle, gestion des connaissances, langage naturel était sans références.
Par ailleurs j'extrais mon article de la semaine dernière "Compréhension sans protocole préalable" dans une page à part . Reste à compléter : éditeur sémantique générique, et langages de règles.
Il y a aussi des présentations:
Stratégies de persistence pour une application Java , où j'explore la possibilité d'utiliser une base de connaissances (KB) comme support de persistence, au même titre qu'une base Orientée Objet ou Hibernate
Développement logiciel : Quel avenir ? De l'horlogerie à la sémantique , où je me hasarde à quelques prédictions ...
Et en Anglais: AFAIRE
Pendant que j'y suis, je rassemble mes écrits concernant Spécification et idées de logiciels :
2004-01-13 - Generic JavaBean editor (implémenté )
my projects and ideas ( beaucoup de points , mais esquissés )
simulation générique avec visualisation 2D : projet ecolosim sur sourceforge
http://www.tsfjazz.com/titre-en-cours/ : choisir WinAmp ; ça ouvre XMMS
http://www.radiofrance.fr/services/aide/difflive.php#ogg : ouvrir un des URL dans XMMS .
J'ai regardé ce qu'il y a comme bibliothèques pour le protocole POP : http://www.columbamail.org/
En fait javamail semble tout à fait adapté. Je pars du de l'exemple GUI .
Le but est de filtrer les spams sans les télécharger. Peut-être qu'il faudra
utiliser le protocole IMAP. Par exemple je reçois beaucoup de mail suspects
avec des pièces attachées de type application/octet-stream .
J'ai envoyé ce matin un mandat par Western Union, à ma fille à Madrid .
J'ai écrit sur un formulaire papier des choses qui étaient déjà sur mon
ordinateur . Puis (laborieusement) l'employé des Postes a recopié mon
formulaire sur son ordinateur . Voilà le genre de choses qui arrivent tout le
temps en ce XXIe siècle. Et dire qu'on parle d'Ere de l'Information! En
vérité c'est encore le Moyen Age, et pas qu'à la Poste.
C'est l'occasion d'expliciter des réflexions que je mène depuis des années,
autour de XML, RDF, des ontologies, et des architectures applicatives.
LIRE TOUT L'ARTICLE
"Compréhension sans protocole préalable"
Un moteur de recherche sur les ontologies :
http://swoogle.umbc.edu/index.php?option=com_frontpage&service=search&queryType=search_swd_ontology&searchString=money&searchStart=1
Chercheraient-ils à se faire racheter par Google ? :-)
Je ré-installe mon scaner HP PSC 750 sur Fedora . La commande lsusb est
dans le package usbutils .
Le "comment faire" ( howto ) :
http://hplip.sourceforge.net/install/step1/index.html
Fini deux jours de formation sur C++ , pour de sympatiques
stagiaires du CNRS, qui font des volcans, et des simulations moléculaires.
Liens C++
http://jmvanel.free.fr/c++/liens.html
Les présentations ( inclus dans un cycle de formation sur le développement
orienté objet, les bonnes pratiques et les bons processus ) :
http://jmvanel.free.fr/formations/cycle.html
Les exemples ;
cpp_elementaire.zip <http://jmvanel.free.fr/c++/cpp_elementaire.zip>
05-Apr-2006 22:36 15k
(je vais ajouter ceux du dernier jour ce week-end ) .
Découvert le langage SWRL , langage de requêtes à la Prolog pour une base connaissances OWL ( voir SWRL FAQ de Protégé ) . Hélas, pour l'instant, ce n'est qu'un éditeur, il n'y a pas de processeur associé . C'est pour le prochain build de Protégé . De plus SWRL ne parait pas très puissant; ne peut pas avoir de requêtes avec une expression référençant plusieurs champs.
Je mets à jour l'article d'avant hier, après avoir commencé un test avec
Protégé. Je me suis aperçu que les contraintes possibles sur une classe OWL
sont très simples: pas d'inégalités possibles sur les valeurs numériques ou
dates, encore moins d'expressions générales comme en XQuery , ou en UML avec
OCL (Object Constraint Language).
Explorer ces aspects sur la programmation à base d'ontologies :
aspect méthodes OO à partir d'une ontologie; générer une API ;
classifier les méthodes: accesseurs, modifieurs, structuraux, observation, fabriques, ...
IHM d'un point de vue sémantique : un bouton c'est toujours un bouton, il faudrait capturer cette sémantique (action etc) et l'utiliser pour générer du code, ou générer directement apparence et comportement ;
comment parcourir un graphe d'objets pour en créer un autre ?
exemples concrets de raisonnement dans de vraies applications
gestionnaire de mails
création formulaires
tarification à partir de règles
J'ai essayé EMF avec Java annoté . Ca a l'air intéressant . On part d'une interface Java annotée, et on peut régénérer les classes après modification manuelles, Il y a d'autres manières de générer du code Java à partir d'une définition de plus haut niveau :
dans une base Orientée Objet ( ex. EyeDB ), à partir d'une source ODL
avec AndroMDA , à partir d'une source XMI
Octopus, un générateur de code Java à partir de UML+OCL
plusieurs solutions avec Protégé
En fait cette présentation est en préparation depuis juin. Ce matin, j'ai l'impression que les pièces du puzzle se mettent en place. Je réalise plusieurs choses:
on n'a pas toujours besoin de moteur de règles ajouté avec Protégé, car les facilités pour définir les classes par des contraintes logiques, ainsi que le modèle observateur intégré donnent des possibilités certes plus restreintes mais utiles ( il faudrait discuter de ça avec l'auteur de Drools, celui qui écrit + vite que je parle )
Dans une ontologie, les classes sont définies par des descriptions qui indiquent les conditions qui doivent être satisfaites par un individu pour qu'il soit un membre de la classe. L'héritage (multiple), les champs et les associations (langage UML) font partie de la description, mais il y a plus. Les puissants concepts de la théorie des ensembles sont disponibles. Cependant les contraintes possibles sur une classe OWL sont très simples: pas d'inégalités possibles sur les valeurs numériques ou dates. Par exemple on aimerait définir un concept de "mauvais payeur" comme étant un "client" ayant une "facture" sans "paiement" depuis plus de 2 mois, mais ce n'est pas possible. Et c'est grâce à cela qu'on tire le véritable bénéfice de l'approche. D'une part, on peut, si disponible, réutiliser des ontologies par domaines métier. D'autre part, par des raisonnements sur les classes et sur les individus, on peut déduire les appartenances d'un individu. Ensuite, via un modèle obversateur simple, on peut déclencher des actions. Et enfin, on a des langages de requêtes comme SPARQL (spécialisé OWL), PAL, KIF, Jess, Prolog, ou Algernon . Mais il faut dire qu'on peut faire beaucoup de choses en matière de requête en définissant une classe ad-hoc et en demandant les individus y appartenant.
ayant vu que UML est plus expressif que Java, et qu'une ontologie est plus expressive qu'un diagramme de classes d'UML, la question n'est pas tant de réutiliser des ontologies pour définir des classes métier Java, mais d'utiliser au mieux la grande expressivité des ontologies.
Java est le "legacy code" de demain.
En Java presque tout est figé à la compilation, au moins les interfaces. On pourrait utiliser des dynamic proxy pour générer des classes qui correspondent aux classes d'ontologie. Les classes "de base" de l'ontologie seraient représentées par des interfaces. L'intérêt serait d'utiliser Java pour la couche présentation et les obversateurs de l'ontologie.
Après ces réflexions, une recherche avec :
dynamic
proxy java ontology class
amène une moisson intéressante:
un article d'un blog Sun: http://blogs.sun.com/roller/page/bblfish?entry=java_annotations_the_semantic_web
le projet RDFReactor : du sérieux, 7
développeurs :
RDFReactor views the RDF data model through object-oriented Java
proxies.
It makes using RDF easy for Java developers.
le projet Jastor : génération de code source Java
A FAIRE
tester performances de Protégé : requêtes ( en définissant une classe ad-hoc ) avec stockage en base
tester RDFReactor
tester (re)chercher ponts UML ==> OWL ( plugins XMI et UML ? de Protégé )
choisir un exemple à peu près réaliste : GRC (Gestion de la Relation Client), facturation téléphone, ...
détailler l'archi. Protégé : Jena , OKBC, raisonneurs et DIG interface , plugins, etc... ; cf mes liens Protégé
rédiger une formation sur "la programmation basée sur ontologies avec Protégé"
Je continue ma présentation sur la persistence en
Java.
Après avoir vu le problème d'activation des objets avec db4o , j'ai posé des
questions sur la liste
eyeDB . Je pense que, vu l'architecture eyeDB, il n'a pas ce problème
d'activation des objets en suivant les références. Ceci parce qu'il n'utilise
pas de POJO, mais des classes générées. Hibernate est correct aussi , cf
parag. 4.3.1 "Persistence by reachability" dans "Hiberante in Action" :
Persistence by
reachability guarantees referential integrity; any object graph can
be completely re-created by loading the persistent root object. An application
may
walk the object graph from association to association without worrying about
the
persistent state of the instances.
Je dois aussi, pour avancer ma présentation sur la persistence en Java,
écrire deux examples CRUD + requête avec Protégé, montrant comment on
peut utiliser Protégé comme n'importe quelle infrastucture de persistence
(pas évident !). Je regarde Protege
Programming dans la documentation Protégé - OWL , et je vois que
l'API OWL, bien que proche par les concepts et étendant l'API Protégé
originelle, est différente:
renommage et "déprécation" de méthodes
interface centrée propriétés
Le "CRUD" de Protégé se trouve documenté dans Basics,
et les requêtes dans Querying
the OWLModel .
Je vois des projets passer à Java 5 : Protégé, db4o . A quand eXist ?
Créer un logiciel, c'est comme écrire une pièce de théatre, on le fait en pensant aux acteurs.
J'ai écrit une présentation de 30 transparents sur la persistence en Java (au format OpenOffice 2 bien sûr), couvrant beaucoup de sujets: Hibernate, mais aussi les bases Orientées Objets (OODMS), les bases XML, les bases de connaissances, etc . Ce n'est pas fini ...
Je viens de découvrir db4o ( db4objects
) , une autre base objet, 100% Java sous licence GPL . Il y a aussi une
documentation impressionante au premier abord, mais assez verbeuse et pas très
synthétique . Le modèle économique est celui de MySQL, avec double license.
Contrairement à eyeDB , le stockage de
POJO est possible . Ca parait simple et propre . En lisant attentivement la
doc. , je vois cependant ( parag. 7.2.1. Activation depth , pas en ligne )
qu'avec une liste chaînée d'objets, on ne peut pas naviguer sur la liste en
partant d'un objet récupéré . Enfin, on peut, mais il faut faire un appel à
la base :
db.activate(readout,1);
avant de parcourir la référence en mémoire :
readout=readout.getNext();
Ceci signifie que db4o ne contrôle pas ses objets comme Hibernate pour aller
chercher dans la base quand c'est nécessaire . Ca me parait un défaut majeur
de db4o . C'est très intrusif, et on ne décharge pas le programmeur du souci
de persistance .
Je comprends pas que , depuis le temps , le gens de GNU et gcc n'ont pas
fait qq'chose pour accélérer les compils . Je pense que l'intanciation d'un
compilateur via make à chaque fichier fait mal .
Pendant ce temps je lis
http://doc.eyedb.org/manual/html/GettingStarted/node6.html
Collé de mon journal :
I'm glad to see that I'm at a higher level than Java declarations , quite at an
UML abstraction level :
class Person { string firstname; string lastname; int age; Address addr; Person * spouse inverse Person:pouse; set<Person *> children; };
With or without the * makes the same difference
as in C++ ; it has also the same semantics as in UML an aggregation versus a
composition .
Ca me fait comme un ballon d'oxygene de voir comment marche cette base objet ;
le langage interprété pour créer les object, et faire les requêtes , OQL ,
c'est réconfortant de savoir que ça existe .
Maintenant il faut voir le mapping Java . Déjà je crois qu'on ne peut pas
utiliser des POJO comme avec Hibernate .
Question posée sur la liste : eyeDB
and POJO
Request ID |
Summary |
Open Date |
Priority |
Assigned To |
Submitted By |
1459472 |
2006-03-27 17:32 |
5 |
nobody |
Des bonnes pratiques en tous genres , extraites de bons livres ( hélas
seulement des noms ) :
http://rearchitect.wordpress.com/2006/02/12/software-design-principles-mined-from-books-and-papers/
Un tableau de correspondance entre symptômes ("Bad Smells") et remèdes :
TWiki .
People . SmellsToRefactorings
Dans un des projets que je suis, nous mettons tous les documents avec les sources sur CVS. Pour l'instant, nous n'avons pas de serveur Web pour le projet (c'est d'ailleurs un projet Java Swing). Il y donc besoin d'un outil à la google pour chercher dans des répertoire s de travail CVS. Lucene est l'outil standard Java. Il faut résoudre les problèmes suivants:
exclure des fichiers .class , etc
prendre en compte correctement les fichiers binaires OpenOffice, .xls, .doc, etc
Prise en main de Lucene;
http://lucene.apache.org/java/docs/demo.html
IHM Swing Luke:
Luke - Lucene Index
Toolbox
J'ai écrit un petit script pour créer un index HTML (rustique!) pour la racine de mon serveur , à partir de la configuration Apache :
# cd /etc/httpd/conf # cat faire-index.sh grep '^Alias' httpd.conf | \ sed 's/".*//' | \ sed 's/Alias /<a href="/' | \ sed 's/"\(.*\)/\1">\1<\/a><br\/>/' \ > index.html cat index.html echo Si OK taper: mv index.html /var/www/html/
Poussé par les nécessités projet, je reviens sur ce thème .
Voir Solutions d'agenda partagés (2005-11-29)
.
Depuis lors Mozilla Calendar fait des snapshots assez réguliers , mais ce sont
des snapshots de Sunbird, la version autonome . Or il faut avoir la liaison
avec les Contacts et le lecteur de courrier .
Le point essentiel est que la description fine des tâches, et des bugs, et
des fonctionalités qui leur sont associées, est indépendante de l'aspect
administratif et tableau de bord . Pour ce dernier aspect, c'est le format
d'échange ICalendar qui sera utilisé . Pour le reste, la description fine des
tâches, l'association avec le fichier ICalendar se fait via un URL .
On a donc de multiples possibilités pour partager, diffuser et mettre à jour
tout ceci :
on peut tout mettre dans un dépôt CVS ; grâce à une structure de répertoires bien définie, les URL de tâches et de réunions pourront être relatifs
les bugs peuvent être gérés:
avec un éditeur XML et un format XML spécialisé, s'il en existe
avec un éditeur spécialisé non Web ( Swing e.g. )
avec un traitement de texte plus un gabarit
les options sont à peu près les mêmes pour les fonctionnalités et les réunions
pour les fichier ICalendar, chacun peut les publier à sa façon : répertoire partagé, serveur Web personel ou partagé, site Web personnel d'entreprise ou hébergé, voire mail
via Mozilla Thunderbird, KMail, evolution, (outlook) on peut préparer une réunion et envoyer une invitation aux participants
je ne sais rien sur le protocoles de notification pour les calendriers, mais je pense que l'IETF a prévu quelque chose .
Using the STATE Design Pattern in Java - Steven John Metsker.
J'ai trouvé une excellente présentation CVS de Montréal : CVS
Help Session , que je peux reprendre à peu près telle quelle . Mais bien
sûr j'ai des compléments :
CVS compléments JMV .
Je viens de lire le numéro spécial de la Recherche sur le calcul intensif . Ca me rappelle beaucoup de souvenirs ! On y parle beaucoup de matériel , et assez vaguement de logiciel . Réduire et maîtriser le complexité, en calcul scientifique comme ailleurs, passe par une conception logicielle propre et nette, appuyée sur une ontologie métier explicite .
Quand j'aurai envie (!) d'utiliser sendmail , voici ce que je pourrai lire
:
http://www.linux-france.org/article/mail/sendmail/sendmail.html#toc2
Je regarde les plugins eclipse pour CVS . Je trouve ceci, qui remplace la
fonctionalité graphe de WinCVS :
http://versiontree.sourceforge.net/
En passant je tombe sur :
Insectivore - http://www.zclipse.org/projects/insectivore/ qui réalise
une gestion de bugs à la bugzilla dans eclipse . Ce serait très bien si ça
marchait ! Le projet ne semble pas maintenu, comme le montre la liste de
courrier . Dommage ! C'est une voie prometteuse.
En regardant Insectivore, je tombe sur Scarab . Tiens tiens, il est hébergé par
le même site que ArgoUML ! Il y a
même plusieurs guides en français datant de décembre !
http://scarab.tigris.org/servlets/ProjectDocumentList?folderID=1963&expandFolder=1963&folderID=0
Les bugs de Scarab , comme pour tous les projets de tigris.org , sont gérés
par Scarab . On peut donc voir la bête en vraie grandeur : Issue tracker . Voici un
rapport de bug typique :
http://www.solitone.org/scarab/issues/curmodule/100/tqk/0/template/ViewIssue.vm/id/SCB1381/eventsubmit_dosetissueview/foo/action/ViewIssue/tab/1
J'ai réussi l'installation de scarab sans problèmes ! http://localhost:8080/scarab/
Ici une liste des projets Open Source de geqtion de bugs :
http://opensourcetesting.org/bugdb.php
Je suis curieux de savoir les dernières nouveautés de Hibernate 3.1, et en
particulier si les "generics" (généricité) de Java 1.5 sont supportés .
Rien vu dans la doc. officielle
Hibernate French 3.1 ; par contre ce journal est intéressant :
http://blog.hibernate.org/cgi-bin/blosxom.cgi/2005/09/08#genericdao
Toujours un outil agréable, plus mûr que eclipse WTP ou OpenOffice 2 dans sa spécialité . Les greffons, tel que l'outil de diagramme ("graph") sont maintenant dans la distribution . Java, open source :-) ; plus de raisons d'utiliser MS Access !
Il s'agit d'un boitier USB sans disque Enermax EHD 350, dans lequel j'ai branché un disque Western Digital 200 Go. Ayant branché tout, je regarde ce que dit dmesg :
usb 1-2: new high speed USB device using ehci_hcd and address 24
scsi6 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 24
usb-storage: waiting for device to settle before scanning
Vendor: WDC WD20 Model: 00BB-22GUC0 Rev: 0811
Type: Direct-Access ANSI SCSI revision: 00
SCSI device sde: 390721968 512-byte hdwr sectors (200050 MB)
sde: assuming drive cache: write through
SCSI device sde: 390721968 512-byte hdwr sectors (200050 MB)
sde: assuming drive cache: write through
sde: unknown partition table
Attached scsi disk sde at scsi6, channel 0, id 0, lun 0
usb-storage: device scan complete
De ça je peux deviner le nom du périphérique : /dev/sde .
Je peux alors lancer parted :
# parted /dev/sde
mklabel msdos
mkpartfs primary ext2 0 100000
quit
Ce qui veut dire une partition primaire de 100 Giga-octets. Comme parted n'a pas voulu faire un système ext3, je le refais autrement :
[root@zamia ~]# umount /dev/sde1 [root@zamia ~]# mkfs.ext3 /dev/sde1 mke2fs 1.38 (30-Jun-2005) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 12812288 inodes, 25599569 blocks 1279978 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=29360128 782 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 24 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
On peut alors créer les répertoires :
mkdir /media/usbdisk/jmv mkdir /media/usbdisk/guest chmod o+rwx /media/usbdisk/guest chown -R jmv.jmv /media/usbdisk/jmv
J'installe le paquet Fedora kdesdk , pour avoir Cervisia (client CVS sur Linux ) . Dans la foulée , je mets à jour ma page "Comment démarrer avec CVS" .
J'essaye le dernier snapshot de Mozilla Calendar (sur Windows seulement ! ), pour voir si on peut ajouter des participants à une réunion à partir du carnet d'adresses . Hélas non, pas encore . C'est joli, mais pas de progrès substanciels depuis novembre dernier. Mais c'est très utilisable .
Pour Jean-Luc, je regarde les possibilités de
synchronisation avec Palm . Il y a une page ici pour parler de ces
développements :
http://wiki.mozilla.org/Calendar:Device_Sync
En gros le développement n'a pas commencé , mais il y a un planning
aboutissant à un version stable en Avril : palmsunbirdsync
D'après cet article, il est possible de récupérer les rendez-vous d’Outlook en passant par le format intermédiaire « .ICS » . Mozilla Calendar exporte ses données dans divers formats dont « .ics », « .vcs », « .rtf », « .html ».
Le Massachusets Institute of Technology a mis en ligne ses cours ( OpenCourseWare ) :
http://ocw.mit.edu/index.html
C'est de très bonne qualité.
Traduction d’une présentation de Gavin King sur hibernate et de
Dennis Leung :
www.e-coz.org/section/repository/currentdata/Présentation/Hibernate.ppt
Je conseille en ce moment un client a qui a une IHM Swing avec une base de données. Dans cette optique, je lis les présentations sur le site JGoodies . Je lis tout ce que je peux sur le bonnes pratiques en matière d'IHM :
conception et ergonomie
un cours du MIT
conception logicielle : livres :
"Java Desktop Live" de Scott Delap (Desktop Java Live Blog) ; citations :
Swing Second Edition, par Matt Robinson , chez Manning
Je viens de remarquer l'application modèle J2EE / Spring appfuse de Matt Raible .
L'auteur de PMD vient de sortir un livre !
Pour faire des applications de type collaboratif qui soient vraiment flexibles, il faudrait:
des modèles de conception
des modèles métier
des cadres d'application (frameworks)
Rien pour l'instant pour les réunions Java à Paris :
http://ossgtp.xwiki.com/xwiki/bin/view/Main/WebHome
Par contre après-demain jeudi à SparklingPoint une réunion sur l'ergonomie du logiciel .
Free sans la FreeBox : possible , voir :
http://mon.adsl.chez.free.fr/modemdegroupe/spedtoucheusb/config.html
Pour préparer ma formation Spring (
SpringFramework ) , j'ai installé le dernier eclipse 3.2M3 avec SpringIDE
et le dernier WTP 1.0M9 ; détails ici :
eclipse/my-eclipse-plugins.html
Formation et conseil donnés à IRD sur les solutions d'agenda partagés (
voir ici groupware/ ).
Je découvre Aethera
, un client mail et calendriers, qui tourne sur Linux, Windows et Mac, basé
sur Qt . C'est probablement la solution à mon problème, qui est d'avoir un
client sur Windows pour organiser des réunions via le courriel au format
ICalendar . Mais attention, il essaye de faire son système de fichiers
virtuel. Le chargement de mes contacts a pris de nombreuses minutes, alors que
c'est instantané avec KDE . Ca a été encore pire avec l'importation d'un
dossier de mails de Mozilla qui fait 100Mo. Là ça n'a pas marché; il a pris
toute la mémoire plus le swap , il a chargé la machine à 22 . Ca n'est pas
encore Aethera qui va remplacer Mozilla . Il n'y a pas de filtre de spam;
évidemment on peut utiliser un filtre extérieur à la SpamAssassin . Pas de
news non plus . Par contre il y a une vision intéressante, qui rejoint la
mienne , de gestion globales des données personnelles. On peut ajouter des
notes à tout .
Articles:
CMS
A tester : le CMS wordpress.org ; avantage: on peut envoyer des contributions par mail .
Le hit-parade des CMS en PHP : http://www.opensourcecms.com/index.php?option=content&task=view&id=388&Itemid=143
les CMS classés par language d'implémentation : http://www.la-grange.net/cms
A VOIR : http://www.opencms.org/, en Java, qui a une impressionante liste de références
A LIRE: ESB ce n'est pas une maladie des bovins, c'est "Enterprise Service Bus" :
http://xmlfr.org/actualites/decid/051109-0001
Je crée des transparents pour ma formation
CVS.
je voudrais avoir plus de choix pour les GUI composants, est-ce que quelqu'un connait des siets qui en proposent ? (Si possible open source et gratuits) Merci, Vincent
Paul wrote:
> Ici il y a une liste en français des meilleures API Java :
> http://java.developpez.com/outils/api/#graphique
Cette liste est intéressante, mais elle est trop grande pour être à jour.
Par exemple il y figure Jakarta ORO, qui est démodé depuis que les
expressions régulières sont dans Java .
Je propose une recherche sur SourceForge.net :
http://sourceforge.net/search/?type_of_search=soft&exact=1&forum_id=0&group_id=0&atid=0&words=gui+java&Search=Search
J'ajouterai que les meilleures interfaces graphiques ce sont celles qu'on ne
développe pas. Il est par exemple possible de construire génériquement à
l'exécution un formulaire de saisie à partir d'un objet Java:
Explications et copie d'écran ici :
http://jmvanel.free.fr/computer-notes.html#mozTocId826972
téléchargement :
http://sourceforge.net/projects/ecolosim/
Parmi les additifs pour la suite Mozilla :
https://addons.mozilla.org/extensions/?application=mozilla
J'ai installé Web Developer 0.9.4 :
https://addons.mozilla.org/extensions/moreinfo.php?id=60&application=mozilla
Si je suis dans ce métier, c'est parce qu'il y a de
fantastiques aventures à vivre. Sinon je ferais autre chose, comme concevoir
des jardins, naturaliste, musicien, ... La convergence d'Internet et de tous
les autres réseaux vers un espace unique, l'avènement des dispositifs
intelligents partout (téléphones, assistants personnels, domotique,
transports, médecine, ...), celui de l'intelligence artificielle et de la
connaissance formalisée, les modes de collaboration du logiciel libre, vont
faire avancer l'informatique à une vitesse encore insoupconnée. Et au coeur
de tout ça: le logiciel, et pas le logiciel commercial, le logiciel libre,
seul capable d'apporter aux utilisateurs la stabilité, la visibilité et la
réactivité dont ils ont besoin. Seul capable aussi de réunir souplement et
efficacement des grands utilisateurs à la recherche de fonctionalités, tout
en évitant les pièges, les coûts commerciaux et la fermeture sur soi-même
des éditeurs.
Je parle de logiciel au sens large, incluant les sources de
connaissance, les ontologies. Le PHP n'est pas l'avenir, ni même Java et C#,
dont le pouvoir d'expression était déjà dépassé par Eiffel dans les
années 80 . Si on a besoin de modèles de conception (Design Patterns) en
Java, c'est justement parce que son pouvoir d'expression est trop limité. Par
exemple la fabrique poussée à l'extrême a donné naissance au moteur Spring; eclipse a lancé un nouveau modèle de
conception, le point d'extension . Les langages courants ne sont pas
assez expressifs. Mais je ne m'attends pas à un nouveau super-langage, parce
qu'en même temps le paradigme du développement est en train de changer. Les
sources Java, PHP, Python, et C++ actuels sont le "legacy code" de demain. Il
est bien clair que ce n'est pas le langage de programmation qui pose problème.
C'est bien sûr la qualité du code source source, où les bonnes pratiques
sont la plupart du temps négligées. Mais c'est surtout la dépendance par
rapport aux bibliothèques "standard" de chaque langage. On le voit bien quand
il y a portage. Ce qui fait le coeur de Java (idem pour Phyton , C#, etc), ce
n'est pas le langage, ni le compilateur, ni la machine virtuelle, qui ont tous
été implémentés plusieurs fois de façon conforme. Ce qui n'a jamais été
"imité", c'est sa bibliothèques "standard", même si le projet classpath
(gcj) s'en rapproche. Bien sûr c'est un travail très lourd. Mais il y a aussi
le fait que la sémantique de ces bibliothèques "standard", bien que toujours
à peu près semblable, n'est pas explicitée en terme de connaissance
formalisée. Par exemple un bouton d'interface graphique en Java Swing, en SWT,
en GTK, en Qt, en TCL/TK ou en WxWidgets c'est toujours la même chose, il y a
un libellé, un rendu graphique, un conteneur graphique, et des fonctions de
rappel (le comportement). Mais à l'heure actuelle, il n'y a pas moyen de
retrouver cette sémantique derrière les sources qui dépendent de ces
bibliothèques. Ceci nous ramène au sujet de l'Intelligence Artificielle
(IA).
Le développement logiciel tend depuis quelques années vers une
séparation rigoureuse, au niveau du code source, entre l'aspect procédural
(toujours plus réduit) et l'aspect déclaratif. C'est ceci que l'Intelligence
Artificielle a depuis longtemps réalisé, la séparation entre l'application,
le moteur d'inférence (générique), les règles et ontologies, et les faits
(réunis dans la notion de base de connaissance). En fait les techniques de
l'Intelligence Artificielle sont prêtes pour les développements logiciels
«tout-venant», en informatique de gestion par exemple. On ne s’en rend pas
encore compte parce que les maîtres d’ouvrage se polarisent sur les
techniques reconnues (quel mauvais critère quand on voit l’échec de la
technologie EJB!). Ils pensent qu’un logiciel sera plus maintenable parce
qu’il utilise Java plutôt que des techniques plus confidentielles. Les
maîtres d’oeuvre, eux, sont obnubilés par le « coût de journée » de
l’informaticien. La maintenabilité est le cadet de leurs soucis. On sait,
bien sûr, que le coût total du logiciel est dominé par la maintenance. Mais
les rôles sont ainsi répartis qu’on anticipe peu cette phase de
maintenance. Et c’est en phase de maintenance qu’un logiciel basé sur des
ontologies, sur un langage naturel formalisé, révèle sa supériorité.
D’abord parce que le volume de code spécifique est très réduit. Mais
surtout parce que la traçabilité est excellente entre concepts de base et
implémentation, entre fonctionnalité et implémentation.
Techniquement, il y a plusieurs signes qui témoignent de cet avènement de l’IA dans le courant principal de l’informatique :
les moteurs d’inférences, moteurs à base de règles et raisonneurs ont gagné en maturité et performance depuis Prolog; il existe de multiples moteurs en logiciel libre;
il y a un format d’échange reconnu, OWL;
il y a de plus en plus d’ontologies réutilisables par domaines métiers, et aussi des ontologies de haut niveau (représentant la connaissance de base sur l’univers matériel et conceptuel)
il y a un moteur logiciel fédérateur (framework) capable de jouer pour l’IA le rôle d’eclipse ou d’Open Office : Protégé
Repéré les notes de Ludovic Maître sur MDR avec ArgoUML
:
http://www.ubik-products.com/ubik/en/projects/argomdr.html
Presentation in
French: Spring Framework, by Thierry Templier
...
Thierry Templier has made available a comprehensive presentation on Spring which he gave to the French
OSS-Get-Together group.
Je développe pour un client qui fait du temps réel un additif simple pour eclipse
CDT .
La page d'accueil pour le développement d'eclipse 3.2 :
http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/jdt-core-home/r3.2/main.html
Activités sociales
Je viens de m'inscrire pour la réunion de demain sur le Wiki du groupe OSS
Get-Together Paris :
http://ossgtp.xwiki.com/xwiki/bin/view/Main/22septembre2005
http://www.parinux.org/activites/
J'ai regardé ce qui est disponible dans la direction de tests automatisés , écrits par des développpeurs et testeurs variés :
utiliser JMeter pour générer des tests en batch : OUI , c'est possible, sous la forme de tâche Ant : http://www.programmerplanet.org/ant-jmeter/ : note : c'est dans la distribution de JMeter
pouvoir agréger différents types de tests ( shell , Java , JMeter) : pas encore cherché, mais on n'a pas forcément besoin de ça: on sait agréger des scripts (valeur de retour booléenne pour chacun), on sait agréger des tests Java grâce à JUnit, et des tests JMeter grâce à JMeter.
Je suis tombé aussi sur Cactus (sans me faire mal ;-) ) de Apache.org . Il a
le tort de faire du test de l'intérieur; Cactus ce sont des
servlets de test qui interagissent avec les servlets à tester. Outre qu'il
n'est pas possible de tester des sites Web quelconques non Java, ce n'est pas
la bonne architecture. C'est le cas aussi du projet http://httpunit.sourceforge.net/ .
Ce n'est pas en soi une mauvaise architecture, mais pour une application Cocoon
ou XQuery, ça ne convient pas.
En regardant ce portail , Open
Source Testing, je suis tombé sur le projet Anteater :
qui va dans le bon sens :
The type of tests you can write using Anteater are:
Send a HTTP/HTTPS request to a Web server. When the response comes back, test that it meets certain criteria. You can check for HTTP headers and response codes, and validate the response body with regexp, XPath, Relax NG, or contentEquals tests, plus some binary formats. New tests can be easily added.
Le hic, c'est que la dernière version date de 2003 . Mais c'est une preuve
d'existence, il y a certainement d'autres projets similaires.
Je vous laisse pour ma tâche de développement. Je vais à cette occasion
utiliser JMeter pour spécifier et valider .
En ce moment j'étudie drools; je suis
toujours à la recherche d'un exemple de règles pour générer des
formulaires.
Artificial
Intelligence: A Modern Approach
[PDF] Combination
of DROOL rules and Protégé knowledge bases in the ONTO
...
hydrus.org.uk
- Deleting spam from a POP3 server
J'ai deux utilitaires intéressants que je dois retrouver et publier:
itérateur générIque JavaBean avec un modèle visiteur (voir 2004-11-12 )
interfaces générIques d'afficheurs-éditeurs, avec implémentations standards:
public interface GraphDisplayer { public void setGraph(Graph graph); public JComponent getJComponent(); public void setGraphLayout(Layout l); }
(voir graph/spring-jung.html )
XMLEditor
Ces temps-ci je fais de l'optimisation XQuery pour un client qui développe un CMS (Content Management System). Ce week-end j'ai fait de la restructuration ( Refactoring ) sur eXist .
J'ai découvert la page d'un enseignant d'Angers :
http://tahe.developpez.com/
avec pas mal de resources pépagogiques sur Java et autres, en particulier cet
artivle sur l'injection de dépendances dans Spring :
http://tahe.developpez.com/java/springioc/
J'étudie les plugin (greffons) d'eclipse. Le mieux est de lire la doc.
officielle, complète avec tous les Javadoc :
http://help.eclipse.org/help30/index.jsp
C'est une copie de la doc. incluse dans l'aplication.
J'ai commencé par utiliser le wizard inclus dans eclipse pour créer un plugin
échantillon "Hello world".
J'ai découvert
, un site qui présente 130 Javadocs de projets Java open source. Il y a
eclipse en particulier, mais pas eXist.
J'ai vu sur linuxfr.org
que le dernier Fedora Core 4 qui vient de sortir comporte eclipse 3.1 compilé
avec gcj . Intéressant ! Ca peut résoudre les plantages que j'ai avec eclipse
3.1 sur Mandriva , avec différents JDK (le meilleur étant IBM).
Exemple concret d'une règle de type système expert:
Si j'ai dans mon carnet d'adresses de courriel un certain nombre d'adresses
PPP@SOCIETE.fr, et que l'une d'entre elles a un champ "Organisation"
renseigné, je peux en déduire que tous ces contacts dont le courriel se
termine par @SOCIETE.fr appartiennent à cette même organisation.
VMThread eclipse crash linux
Bug 79964
- Eclipse crashes frequently giving exit code - 255
And it's a lot faster than Sun JRE with -Xint ;-) http://www-106.ibm.com/developerworks/java/jdk/linux140/
IBM SDK for 32-bit xSeries (Intel compatible)
Version 142 SR1a
eclipse -vmargs -Dosgi.locking = java.io
Ces dernières semaines ont été occupées par :
un développement sur la base de données XML eXist pour un client Français qui avait besoin d'améliorer les performances
une formation de 3 trois jours sur les Services Web, centrée sur Java et Axis 1.2, avec des compléments sur eclipse 3.1 RC1 et WTP
Je compile le dernier Axis 1.2. Surprise ! Ca ne compile pas avec Java 1.5, à cause d'une bêtise: ils n'ont pas implémenté les nouvelles functions spécifiées par l'API DOM.
comptabilité http://www.gnucash.org/fr/ BNC ??
Essayé le dernier GanttProject 1.11.1 à partir des sources. Il y a une erreur dans le build.xml qui empêche d'exécuter , il faut que ce soit ainsi dans la cible "prepare" :
<copy todir="${build.dest}"> <fileset dir="${data.dir}/resources"> <exclude name="dtd/**"></exclude> <!-- <exclude name="language/**"></exclude> --> </fileset> </copy>
Heureusement ça a été corrigé dans le CVS:
http://cvs.sourceforge.net/viewcvs.py/ganttproject/ganttproject/build.xml?rev=1.85&view=auto
JJe parcours la liste des Java Specification Requests
(JSR) , je tombe sur ceci ????
Je lis la nouvelle spécification JSR de l'API pour la gestion de la
persistence et la correspondance object/relationelle.
C'est la dernière fois que j'accepte une mission de développement en équipe
sans le minimum vital:
un référentiel CVS,
une certaine quantité de tests automatisés,
une dose raisonable de restructurations comprise et acceptée,
des spécifications écrites et/ou un accès facile à une autorité qualifiée sur les fonctionalités
Lors de ma dernière mission, il n'y avait rien de tout cela! En bref il faut se raprocher au maximum des bonnes pratiques eXtreme Programming (voir Extreme Programming: A Gentle Introduction ).
Il était temps de tester Lucene ! Je veux évaluer le produit, et surtout
comparer avec une base données XML telle que eXist (dont je suis un développeur). Je
commence par exécuter la démo. de base :
About the basic Lucene
demo and its usage
Les commandes que j'ai tapées: ant; ant jar-demo # indexation du répertoire des sources de Lucene (un exemple comme un autre): java -cp build/lucene-1.5-rc1-dev.jar:build/lucene-demos-1.5-rc1-dev.jar \ org.apache.lucene.demo.IndexFiles ./src # interrogation de l'index en ligne de commande : java -cp build/lucene-1.5-rc1-dev.jar:build/lucene-demos-1.5-rc1-dev.jar \ org.apache.lucene.demo.SearchFiles
Le dialogue résultant :
Query: stopword Searching for: stopword 1 total matching documents 0. ./src/java/org/apache/lucene/analysis/de/WordlistLoader.java
Je regarde à quoi ressemble la base de données sur disque :
$ ls -l index total 364 -rw-r--r-- 1 jmv jmv 359108 avr 24 12:36 _8i.cfs -rw-r--r-- 1 jmv jmv 4 avr 24 12:36 deletable -rw-r--r-- 1 jmv jmv 28 avr 24 12:36 segments $ du -s index src 368 index 3832 src
Soit un rapport 1/10 entre la taille de l'index et celle des fichiers bruts. Je détruis le répertoire index/ pour indexer maintenant un ensemble de fichiers XML avec lequel j'ai déjà fait des tests de performance avec eXist. Le temps d'indexation, mesuré par la commande time, est :
37,62s user 11,24s system 20% cpu 3:57,64 total
C'est 6 minutes pour eXist. L'interrogation de l'index en ligne de commande est très rapide à l'oeil. Elle dure 300 ms pour eXist. Je modifie
src/demo/org/apache/lucene/demo/SearchFiles.java long t0 = System.currentTimeMillis(); Hits hits = searcher.search(query); long t1 = System.currentTimeMillis(); System.out.println(hits.length() + " total matching documents; " + (t1-t0) + "ms elapsed." );
pour imprimer le temps écoulé. Il n'y a pas photo! L'interrogation dure 66ms avec Lucene, et 1ms la deuxième fois. Si on pouvait réutiliser Lucene dans certaines parties de eXist!
Je viens de récupérer mon portable après plusieurs semaines de
réparations. RCB m'en avait prêté un autre, sous XP. Ca fait du bien de
revenir sous Linux, même si cygwin, Mozilla et eclipse m'aidaient.
Après un contact avec un serveur DHCP peut-être inamical, j'ai configuré à
la main mon portable :
/sbin/ifconfig eth0 10.0.0.222 netmask 255.255.255.0 route add default gw 10.0.0.1 dev eth0
Ce site n'est mal, parmi bien d'autres :
Linux
Tutorial - Linux Network Administration
Ras le bol de Mandrake Cooker, il faut se mettre à jour plusieurs fois par
semaine, et on n'est pas à l'abri de mauvaises surprises, surtout si on est
resté des semaines sans mises à jour. Je suis repassé à la version Mandrake
10.1 pure et simple. J'ai utilisé le site
http://easyurpmi.zarb.org pour
configurer les medias (sources de paquetages) pour urpmi et rpmdrake; la mise
à jour par le réseau est bien commode.
Le portail des projets Java, open source et autres :
java.net
J'ai mis quelque peu à jour ma
présentation sur les architectures Web et Serveurs d'applications (au
format OpenOffice bien sûr).
Devant préparer une formation sur EJB, c'est l'occasion de passer en revue les
ressources francophones en supports de formation.
Cours et Tutoriels Java - Club d'entraide des développeurs ...
Ecole Supérieure en Sciences Informatiques (ESSI) / Université de Nice - Sophia Antipolis
Didacticiel "Développons en Java" de Jean Michel DOUDOUXconsultable en ligne
http://www.denverjug.org/meetings/meetings_04.jsp : les présentations des réunions du Java User Group de Denver (Ha si on avait ça à Paris)
A LIRE: ce cours sur les Systèmes d'inférences: http://www.lifl.fr/~routier/enseignement/si.html
Il y a une nouvelle version 2.7 de XSB (voir plus bas Prolog et bases relationnelles). J'ai aussi essayé XQuark Bridge, qui offre une vue XQuery de bases relationnelles .
Echange avec un ancien collègue:
Je travaille à la refonte du système d'information en technologie J2EE.
Pour l'instant, nous en sommes aux spécifications et justement j'étais en
train de me demander comment faire le mapping objet/relationnel (pas envie
d'employer les EJB entity).
C'est jouable de baser un nouveau système la-dessus?
C'est très raisonnable pour ces raisons:
Spring encourage à développer des objets métier indépendants de la partie présentation (Web ou autre) et accès aux données (Hibernate, iBatis ou autre). Ceci permet de les tester facilement et rend le projet aussi peu dépendant que possible du framework
Spring intègre autour de son noyau conteneur d'objets un "best-of" des autres frameworks (mais tout est interchangeable) :
son propre framework Web MVC, fait après Struts donc meilleur, on peut changer de vue (JSP, Velocity, XSLT, ...) sans changer ni controleur ni modèle
intégration Hibernate et iBatis pour l'ORM
transaction et sécurité déclarative comme avec EJB
- excellente documentation sur le site et avec les deux livres de Rod Johnson
JavaComptoir - Blog sur J2EE et la vie en général.
Gurus, gourous, et
experts
La référence est l'Article Inversion of Control
Containers and the Dependency Injection pattern, par Martin Fowler; voir en
particulier Setter
Injection with Spring.
Les avantages de l'injection de dépendances:
développer avec des interfaces
unifier tous les mécanismes de création d'objets
Les problèmes de l'injection de dépendances:
utiliser deux langages de développements: les beans en XML, et le Java; on n'a pas les commodités d'eclipse pour accéder aux objets globaux
en fait on a revisité la notion de variable globale, avec des facilités en plus, mais on n'a pas les commodités d'un outil d'édition pour la configuration
Une solution serait d'utiliser une syntaxe comme BeanShell, suffisament proche de Java pour définir la configuration des objets. Il semble qu'il y ait ceci dans le "sandbox" de Spring. Mais il n'y a pas d'éditeur avec complétion pour BeanShell. Par contre j'ai trouvé en cherchant ça un plugin eclipse similaire à BlueJ: BluEclipse .
En continuant les essais sur "Prolog et bases relationnelles", je dois
tester ODBC indépendemment du moteur Prolog. J'ai utilisé ODBCConfig et
DataManager du paquetage unixODBC-gui-qt pour configurer unixODBC et avoir une
vue d'ensemble des bases.
J'ai aussi fait marcher postgresql avec le client SQuirrel, l'URL étant:
jdbc:postgresql://localhost/test
où "test" est le nom de la database.
Pour ODBC l'URL est simplement:
jdbc:odbc:post1
où post1 est le nom du "User DSN" que j'ai donné à la même base PostGreSQL
dans ODBCConfig.
J'ai ainsi deux fenêtres dans SQuirrelL SQL avec la même base PostgreSQL, une
avec le pilote ODBC via le pont JDBC-ODBC, l'autre avec le pilote JDBC direct.
Je dois dire que JDBC direct marche mieux. Avec JDBC-ODBC, on peut faire des
requêtes SQL, mais l'affichage de "Content" dans l'onglet "Objects" donne un
ArrayIndexOutOfBoundsException.
Difficile de savoir si c'est un défaut e unixODBC, JDBC-ODBC, ou SQuirelL.
Je ne suis pas pas arrivé à faire tourner un autre client odbc. J'ai essayé
Daft, mais il a besoin de tclodbc qui s'installe mal malgrès ces conseils .
Suite à une discussion avec Michel Verdier, je regarde les bibliothèques graphiques. Je vais sûrement ajouter des implémentations dans ma pierre de Rosette des IHM. En effet je viens de trouver deux bibliothèques graphiques pour Java. Bien sûr Swing est très bien, mais il y a des soucis de licence (voir l'article de Linux Magazine de ce mois).
Java-GNOME is a Java binding for GTK and GNOME. It is implemented as a JNI layer that delegates the Java calls to the underlying native libraries.
Web page : http://java-gnome.sourceforge.net/
wx4j: A Java Binding for
wxWidgets - wx4j is a Java
binding for wxWidgets providing a Java GUI toolkit using
native widgets.
Je lis la fin de "J2EE dévelopment without EJB", l'application exemple JPetStore. Je vérifie que ma vision d'un objet transactionnel comme emballage (modèle décorateur) autour d'un objet métier simple (POJO) est bien réalisée par Spring.
En lisant Rod Johnson je me demande si iBATIS ne serait pas capable de fédérer des bases de données. Voici à quoi ressemble la configuration iBATIS:
<sqlMap namespace="Person"> <select id="getPerson" resultClass="examples.domain.Person"> SELECT PER_ID as id, PER_FIRST_NAME as firstName, PER_LAST_NAME as lastName, PER_BIRTH_DATE as birthDate, PER_WEIGHT_KG as weightInKilograms, PER_HEIGHT_M as heightInMeters FROM PERSON WHERE PER_ID = #value# </select> </sqlMap>
Les noms après "as" sont bien sûr les propriétés JavaBeans; simple, mais
il fallait y penser. On voit qu'on peut entrer n'importe quelle requête SQL
pour remplir l'objet Java.
Il y a aussi un outil intéressant sur leur site, sql2ibatis , qui
génère le code Java et tout le reste à partir de déclarations SQL (create
table).
En lisant le manuel, je vois qu'iBATIS n'est pas fait pour fédérer des bases
de données (pas plus qu'Hibernate). Tous ces outils agissent sur une
source JDBC ou DataSource. Il faut chercher des outils qui manipulent
plusieurs sources JDBC ou DataSource.
En cherchant "federate several datasource jdbc" sur google je trouve
ceci:
Daffodil
Replicator Daffodil Replicator is a powerful Open Source data replication
tool that allows bi-directional data synchronization between heterogeneous
databases – Oracle, SQL Server, Postgre SQL, Derby, Daffodil DB –
supporting JDBC drivers, triggers and
procedures.
Daffodil est une suite de produits intéressants en Java sous license GPL, avec
notamment une base au standard SQL 99 qui concurrence HSQLDB (ex-Hypersonic).
Mais ce que je cherche pour l'instant est un "simple" agrégateur de bases
JDBC. En cherchant davantage je tombe sur ce projet ObjectWeb
:
C-JDBC -
Clustered JDBC gives your applications a transparent (no code modification)
access to a cluster of databases even if your database engines are not
cluster-aware.
Là l'accent est mis sur l'aspect "cluster", c'est à dire tolérance de
pannes, répartition de charge, haute disponibilité. Tout cela est plus
compliqué qu'un "simple" agrégateur de bases JDBC. Je commence à espérer
que ce n'est pas si compliqué à réaliser. Il
faudrait en savoir plus sur les dernières specs JDBC et SQL.
J'ai publié une question
"federate several datasources" dans news://comp.lang.java.databases
Il y a des réponses.
PostgreSQL
Replication
Il faut aussi que j'examine plus avant XSB pour sa capacité à faire de la Programmation Logique en s'appuyant sur les faits pris dans une base relationnelle. J'ai compilé, installé, et exécuté sans problème XSB-2_6 . Ensuite XSB fonctionne comme n'importe quel Prolog; cf ma page prolog-getting-started .
cd /usr/src/w/XSB/build ./configure --with-odbc ./makexsb xsb [xsb_configuration loaded] [sysinitrc loaded] [packaging loaded] XSB Version 2.6 (Duff) of June 24, 2003 [i686-pc-linux-gnu; mode: optimal; engine: slg-wam; gc: indirection; scheduling: local] | ?- import odbc_open/3 from odbc_call. yes | ?- odbc_open(post1,'jmv',''). | ?- import odbc_sql/4 from odbc_call. yes | ?- odbc_sql(post1, [], 'select * from my_table', Resu).
A SUIVRE ....
SWI-Prolog a aussi une interface ODBC , moins
riche.
Il est temps pour une Grande Unification des sources de données: relationnel,
Objet, Ontologies; comme Java a été en son temps la normalisation d'un
ensemble d'idées Orientées Objets.
Une sélection de projets ObjectWeb :
Apollon -
Generation engine able to build graphical user interfaces (GUI) from DTDs and
customization models. This makes the GUIs adapted to the edition of XML
documents.
XQuark - The
XQuark project provides a set of Java components for extending J2EE platforms
with XML-based, heterogeneous information integration capabilities, using the
XQuery language
JOTM -
JOTM (Java Open Transaction Manager) is a fully functional open source
standalone transaction manager that implements the XA protocol and is compliant
with the JTA APIs.
JORM -
JORM (Java Object Repository Mapping) is an open source adaptable persistence
service.
MEDOR
- MEDOR stands for Middleware Enabling Distributed Object Requests The MEDOR
project, lead by France Telecom R&D allows the expression, optimisation and
evaluation of queries on heterogeneous distributed objects. MEDOR Distributed objects Request
Manager.
DataVision DataVision
is a database reporting tool similar to Crystal Reports. It supports many data
sources (JDBC, files) and many output
formats (HTML, XML, PDF, LaTeX, comma- and tab-separated files, DocBook).
Drag-and-drop GUI editing. Reports stored as XML.
Eclipse Project 3.1 Draft Plan
Précisions sur les différents dialectes XMI
et UML, et autres formats pour les méta-données UML.
J'ai mis à jour mon vieil article de 2002 "Languages
pour la metadonnée - une vue d'ensemble".
Le modeleur UML en Python Coral
est prometteur. Il comprend XMI 1.2 ET XMI 2.0 . Il y a un shell Python dans
l'interface graphique, et un visualiseur de diagrammes. Mais il y a très peu
de docs.
Petit problème à l'installation, mais on peut le lancer à partir du
répertoire de construction:
rpm --recompile ~jmv/distribs/linux/coral-0.7.6-1.src.rpm ............. Building libraries symlinks...done Traitement des fichiers: coral-0.7.6-1 erreur: Fichier non trouvé: /var/tmp/coral-buildroot/usr/share/man/man1/coral.1.gz erreur: Fichier non trouvé: /var/tmp/coral-buildroot/usr/share/man/man1/coral-start.1.gz Erreur de construction de RPM: Fichier non trouvé: /var/tmp/coral-buildroot/usr/share/man/man1/coral.1.gz Fichier non trouvé: /var/tmp/coral-buildroot/usr/share/man/man1/coral-start.1.gz
Même ce dimanche après-midi, j'ai eu une réponse sur Coral !
IDEE: utiliser un modeleur UML comme éditeur de correspondances
objet-relationnel.
Exadel ORM ne marche pas .
Si ça continue, je vais abandonner mon gvim! Voilà que le dernier eclipse
(Version: 3.1.0, Build id: 200411050810 ) a un éditeur
générique XML, avec complétion des balises en fonction du contenu,
catalogues des DTD, éditeur XML Schema.
Le plugin EMF est capable de lire un fichier MDL de Rational Rose. A partir de
ça, l'extension JET paut générer du code Java avec un bon niveau de
réglages.
En parcourant le site de Martin Fowler (http://www.martinfowler.com/books.html#ap : M. Fowler lui-même dit que son bouquin est vieux ), je trouve plusieurs documents qui se rapportent un peu à mon vieux rêve: trouver un site référentiel de conceptions métier:
narrative , collection of patterns (party, etc )
J'ai déjà travaillé 2 semaines sur un contrat de cartographie du système d'information, dans le domaine des Télécoms. Je fais de la rétro-conception UML de bases relationnelles existantes, interrogeant aussi des experts métiers. J'aimerais bien trouver un outil open source de fédération de bases relationnelles (EII = Enterprise Information Integration ) analogue à DB2II de IBM.
EAI = Enterprise Application Integration est different de EII . Les EAI sont des plaques tournantes basées sur le modèle publication-abonnement, avec des messages vus comme XML, plus des fonctionalités de transformation par rapport à un format pivot. L'archétype de l'EAI c'est Biztalk . Tandis que les EII agissent au niveaux des bases relationnelles.
Voir aussi ma page spéciale sur bases relationelles .
basicquery basique, comme son nom l'indique; mais il marche
squirrel-sql : probablement le meilleur de tous, avec ses additifs (plugins); en plus l'écureil est mon animal préféré
DB Visual Editor Gaudí : parait intéressant, mais je ne suis pas arrivé à le faire marcher; ne semble avoir été testé qu'avec PostgerSQL :-(
DbModeller est un excellent outil graphique simple en Java pour créer un schéma de base de données. Il peut lire et écrire du SQL, et se connecter sur une base pour récupérer le schéma.
On suppose qu'on a une base currompue ou presque vide. Les commandes sont les suivantes:
rm -rf $PGDATA/.* $PGDATA/.* sudo -u postgres initdb /etc/init.d/postgresql start
Si on a le message :
Initialisation de la base de données :You are required to change your password immediately (password aged) Changing password for postgres (current) UNIX password: su: Mot de passe incorrect.
il faut réinitialiser le mot de passe de l'utilisateur posgres :
passwd postgres
Mes pages d'experts :
J'ai regardé les commons Apache, il y a à boire et à manger. En particulier
j'ai remarqué jxpath ( http://jakarta.apache.org/commons/jxpath/
) . C'est une bonne idée que j'aurais aimé avoir !
Dans cet ordre d'idées je voudrais voir au moins un de ces outils basés sur
JavaBeans avec un modèle itérateur + visiteur, sinon je le fais . Il y a
plein d'outils qui bénéfifieraient d'un itérateur JavaBeans
réutilisable:
Castor et les autres liaisons (bindings) Java-XML: XMLBeans, Zeus
jxpath
éditeurs / visualiseurs tels que ma classe ecolosim.beans.BeanPeelerPane ( projet ecolosim.sf.net )
J'apprends Hibernate dans la nouvelle traduction de la documentation en
Français . Mon but est , entre autres, de voir comment l'utiliser comme
une brique d'un outil de EII (Enterprise Information
Integration ). Au premier regard, ce ne semble pas être le cas, il
n'y a qu'une seule base connectable, ou alors un pool (DataSource).
Dans un autre ordre d'idées , il y a XSB , une implémentation
Prolog qui permet de se connecter à une base relationnelle; je cite:
This interface allows Oracle tables to be accessed from
XSB's environment as though they existed as facts. All database accesses are
done on the fly allowing XSB to sit alongside other concurrent tasks.
Our interface gives an Oracle programmer all the features of Prolog as a query language including intensional database specification, recursion, the ability to deal with incomplete knowledge, inference control through the cut operation, and the representation of negative knowledge through negation.
Je télécharge eclipse 3.1M3 ; comme d'habitude pas mal de nouveautés, par exemple le support Java 1.5 avance .
J'ai un fichier apparemment en XMI 1.1 et UML 1.3 sortant d'un outil que charitablement je ne nommerais pas. Il commence par:
<!DOCTYPE XMI SYSTEM 'UMLX13-11.dtd' > <XMI timestamp="Wed Nov 03 10:02:40 2004" xmi.version="1.1" xmlns:UML="href://org.omg/UML/1.3"> <XMI.header> <XMI.documentation> <XMI.exporter>Unicorn System</XMI.exporter> <XMI.exporterVersion>3.1.7.100.4-000.0</XMI.exporterVersion></XMI.documentation> <XMI.metamodel xmi.name="UML" xmi.version="1.3"></XMI.metamodel></XMI.header> <XMI.content> <UML:Model isAbstract="false" isLeaf="false" isRoot="false" isSpecification="false"
Ce qui donne ce message avec ArgoUML:
[Warning] Resource 'file:/home/jmv/contrats/acp/UMLX13-11.dtd' not found. Default XMI DTD will be used instead.
[Error] Illegal element 'UML:Namespace.ownedElement'
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
at org.argouml.kernel.Project.addModel(Project.java:626)
Tandis qu'un fichier sortant de ArgoUML se présente ainsi:
<?xml version="1.0" encoding="UTF-8"?> <XMI xmi.version="1.0"> <XMI.header> <XMI.documentation> <XMI.exporter>Novosoft UML Library</XMI.exporter> <XMI.exporterVersion>0.4.20</XMI.exporterVersion> </XMI.documentation> <XMI.metamodel xmi.name="UML" xmi.version="1.3"/> </XMI.header> <XMI.content> <Model_Management.Model xmi.id="xmi.1" xmi.uuid="127-0-0-1--57eff9f4:fedf915d4c:-8000"> <Foundation.Core.ModelElement.name>untitledModel</Foundation.Core.ModelElement.name> <Foundation.Core.ModelElement.isSpecification xmi.value="false"/> <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/> <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/> <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/> <Foundation.Core.Namespace.ownedElement> <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="127-0-0-1--57eff9f4:fedf915d4c:-7ffe">
Il y a un outil de conversion commercial avec version gratuite : Meta
Integration Model Bridge .
Autres outils XMI - UML :
Argo2Ecore converts UML models created with ArgoUML (www.argouml.org) to the Eclipse UML dialect Ecore (see www.eclipse.org/emf). It allows users to create graphical UML models using ArgoUML and then use the EMF codegenerator to generate java code
XMILinker takes a set
of input XMI files and produces one XMI output file. Each
XMI file contains metadata model elements. Some model elements are
exported defined; that is,
they are defined within the model for use with other models. Other model
elements are imported -
used in the model but not defined. Finally, a code generator uses the
linked model as XMI input
and generates differend kinds of source code output files, depending on
the generator stylesheets.
The XMILinker is based on XSLT.
samples/webapp-minimal
Comme expliqué dans lib/readme.txt
export spring=/usr/src/usr2/spring-framework-1.1
cd samples/webapp-minimal/lib
ln -s $spring/lib/j2ee/servlet.jar .
ln -s $spring/dist/spring.jar .
ln -s $spring/lib/jakarta-commons/commons-logging.jar .
cd ..
ant warfile
Formation donnée sur Corba en Java (ORB
du JDK) et C++ (OmniORB) sur RedHat .
Dans la foulée je compile l'ORB ACE + TAO (ACE_wrappers).
Hier j'ai fini le plan de cours pour un grand organisme de formation sur:
Pendant que j'y suis, je vais expliciter de sujets de séminaires pour introduire des développeurs expérimentés à des sujets techniquement mûrs mais encore mal connus :
Web Sémantique et représentation des connaissances: Protégé, OWL, ontologies
liaison XML-Objet: Castor, XMLBeans, JAXB, XStream , Zeus, ...
les frameworks Java open source: Spring, PicoContainer, etc ... : une alternative à la lourdeur EJB, mais utilisables aussi pour des projets légers grâce à l'injection de dépendances (= IoC Inversion of Control)
l'analyse syntaxique: les ancêtres Lex et Yacc, les arbres syntaxiques (AST), les outils Java Antlr et JavaCC, les grammaires disponibles, la suite gcc, le langage naturel
Voir détails dans ma page formations rubrique séminaires .
Avant-hier exposé très intéressant de Marc Godin aux
Praticiens
De Paris de XP-France sur:
Lightweight framework for Lightweight methodologies
?
Les frameworks (traduction Française ?) de type Spring ou PicoContainer répondent à deux problèmes de base dans n'importe quel développement basé sur des interfaces (au sens Java du mot, pure virtuel en C++):
pouvoir configurer quelle implémentation on associe à une interface
en plus de 1. , pouvoir configurer les implémentations qu'on instancie
Le tout se fait par des fabriques, lesquelles sont configurées au début de
l'exécution par du code ou du XML.
L'inversion de contrôle (IoC), alias injection de dépendances, veut dire
ceci: c'est le framework, et non le code utilisateur qui appelle les
constructeurs et les setXXX(). Ces frameworks sont donc non intrusifs, i.e. ils
n'exigent rien de particulier des classes métier, qui sont des POJO (Plain Old
Java Object). POJO est devenu un mot à mode.
Au dessus de ce socle, Spring a ajouté plein de briques spécifiques Spring ou
venant de l'extérieur. Le tout arrive à avoir les mêmes possibilités qu'un
serveur d'application (JBoss, ObjectWeb-Jonas, WebSphere, WebLogic, ...). En
particulier, on peut configurer les transactions de façon déclarative, sans
coder.
Au sujet des frameworks, on aurait pu parler d'un autre problème de base
dans n'importe quel développement: comment ajouter des fonctionalités sans
avoir à parcourir tout le code pour savoir où s'insérer. En fait,
idéalement, on aimerait ajouter une fonctionalité sans aucunement modifier le
code existant. Le framework eclipse, avec ses plugins et la notion de point
d'insertion, le permet. Bien sûr, il n'y a pas de miracle, les nouvelles
fonctionalités ne peuvent être ajoutées qu'aux points d'insertion prévus à
l'avance. Bien sûr, c'est particulièrement adapté à une IHM, où les
nouvelles fonctionalités se greffent nécessairement à des objets graphiques
déjà existants (menus déroulants, palettes de boutons etc).
Pour faire la liaison avec les conteneurs à injection de dépendances, on peut
dire que c'est un pas de plus. Non seulement le framework prend en charge le
choix et la configuration de l'implémentation, mais en plus il instancie ces
implémentations dans le bon contexte.
Un autre sujet intéressant, sur lequel je n'ai aucune piste. Ces modèles de
conception "injection de dépendances" et "point d'insertion" sont tellement
utiles qu'on pourrait les ajouter dans un langage de programmation. Ce serait
une façon de réduire la "fracture sociale" du développement où chacun
utilise son framework, alors qu'ils ont en fait beaucoup de concepts en
commun.
Quelques outils et URL cités par Marc:
Article Inversion of
Control Containers and the Dependency Injection pattern, par Martin
Fowler
Jakarta Tapestry .. exploits the dynamic nature of the Java language, leveraging the JavaBeans API, as well as servlets and other J2EE technology
Groovy ... is designed to help you get things done on the Java platform in a quicker, more concise and fun way - bringing the power of Python and Ruby
detail java formatter ??
Savant permet de gérer, un peu comme Maven, les dépendances par rapport à des projets externes qui changent fréquemment
XStream - Java to XML serialization, and back again : dans la lignée de Castor, XMLBeans, etc
Code Generation Library - Code Generation Library - CGLib is a powerful, high performance and quality Code Generation Library. It is used to extend JAVA classes and implements interfaces at runtime
ActiveSOAP - Home - easily embeddable, StAX based framework for working with document centric Web Services, REST services and for implementing high performance SOAP intermediaries
Gurus, gourous, and experts (version mise à jour)
Behind the Times - Edd Dumbill
Metaphorical Web (Kurt Kagle)
??? autres
Bouquins
Domain-Driven
Design: Book
Book Review: J2EE Development without EJB Patterns of Enterprise Application Architecture (P of EAA).
J'ai téléchargé le nouveau Netbeans avec Java 1.5 . Ca marche assez bien.
Pour mettre au point des servlets et des JSP ça marche bien. Alors que la
semaine précédente j'avais galéré avec Lomboz sur eclipse, qui marchait de
façon intermittente. NetBeans est livré avec un Tomcat 5.0.28 qui marche bien
ensemble. L'application web déployée est dans le sous-répertoire
build/web
du projet courant. NetBeans n'arrive pas à lancer Mozilla. L'URL de
l'application web est à copier depuis l'onglet "nom du projet (run)".
On peut déployer des fichiers .war ici :
$HOME/.netbeans/4.0beta2/jakarta-tomcat-5.0.28_base/webapps
Je finis de préparer ma formation services Web . Il y a
plein de question qui n'ont pas encore trouvé leur place là-dedans:
sécurité, WS-I, REST versus SOAP.
J'ai mis à jour mon agenda, avec en particulier les
prochaines réunions de mes communautés .
Damned! J'ai encore raté le rendez-vous de sparklingPoint : échanges sur
l'e-business et la gestion de contenu. Communauté
d'échanges d'expériences. Ce devait être diablement intéressant,
avec le PDG d'IdealX qui a parlé du logiciel libre. Il faut d'ailleurs que je
fasse une page sur mes communautés .
J'ai aussi ajouté une page sur cygwin, le sublime
environnement qui permet d'avoir 80% de Linux par-dessus Windows.
très simple http://etna.int-evry.fr/cours/java/Eval/OLD_sc/test1.html
moins simple http://www.pactenovation.fr/general/Contenu/test.html
Cherchant un éditeur PHP, j'ai trouvé Quanta+. Il a la complétion des noms
de fonction.
PyDBDesigner
Une présentation de l'accés aux données (modèle de conception DAO) à http://www.corej2eepatterns.com/Patterns2ndEd/DataAccessObject.htm, ou, de façon plus complète à http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html,
La bonne syntaxe pour les dates avec MySQL:
drop table reservations; create table reservations ( date_res datetime PRIMARY KEY, personne varchar(100) NOT NULL ); select * from reservations; insert into reservations VALUES( '2004-08-30', 'Robert' ); insert into reservations VALUES( '2004-08-30 12', 'Berthe' );
La perle de perl CPAN (http://cpan.uwinnipeg.ca/mirror)
:
Avec cette forme vous pouvez indiquer d'où vous voulez chercher
des téléchargements (ceci exige des biscuits d'être permis).Votre
arrangement de courant est http://cpan.uwinnipeg.ca/cpan. Le lien
de multiplexeur de http://cpan.uwinnipeg.ca/cpan essayera
de vous réorienter à un miroir voisin de CPAN, basé sur votre pays
d'origine.
Un petit article intitulé " Développement d’une ontologie 101 : Guide pour la création de votre première ontologie" (traduction d'une doc. pour Protégé).
Plugin Java pour mozilla :
cd /usr/local/mozilla/plugins
ln -s
$JAVA_HOME/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so .
Hier j'ai essayé le plug-in jambalaya livré avec protégé. Protégé est un éditeur
d'ontologies. Jambalaya présente des vues sous forme de graphe, avec les
positionnements classiques: arbre horizontal ou vertical, algorithme du
ressort, étoile. J'ai quand même eu un plantage de la JVM en chargeant SUMO
dans Jambalaya ...
Si on veut essayer:
http://www.thechiselgroup.org/jambalaya/install
: Running Jambalaya
En fait ce groupe de recherche Australien a plein de projets intéressants,
notamment un plugin pour eclipse. Mais je n'ai pas trouvé de source :-(( .
Un article intéressant sur KIF, le langage neutre utilisé pour
développer SUMO:
http://www.cs.umbc.edu/kse/kif/kif101.shtml
Les questions que je me pose à ce stade:
qu'y a-t-il comme moteur d'inférence pour KIF?
qu'y a-t-il comme traducteur de/vers KIF: OWL, XMI, DAML, prolog, Scheme?
y a-t-il des facilités pour créer des requêtes?
comment peut-on connecter une base relationnelle à un moteur d'inférences?
qu'est ce qu'il y comme ontologies métier et comment les intégrer?
J'ai écouté la présentation sur l'Ontologie SUMO (allongé au soleil sur la terrasse). Celle dont le lien est en bas de la page SUMO (http://ontologyportal.org/). Je pense que mes petits-enfants auront en collège des cours là-dessus, alors que maintenant c'est un sujet pour quelques thésards.
Protégé est un éditeur d'ontologies OWL et CLIPS. J'essaye de charger un fichier RDFS simple. Et ça fait traceback !?! Il faudrait peut-être essayer le plug-in RDF. En fait ce truc est opensource :-( .
L'IHM pour les requêtes est mauvaise, elle mêle la création de requetes avec l'exécution de requetes.
J'utilise à nouveau ArgoUML après plusieurs mois. Je fais ma première contrainte OCL:
context Table inv used : classes -> size + functions -> size > 0
ce qui veut dire en Français: "dans le context de la classe Table on a l'invariant suivant: la somme des cardinalités des associations classes et functions est > 0".
Je constate que la génération Java est tout à fait insuffisante. Heureusement il y a d'autres projets OSS qui s'occupent de ça. Créer des instances d'objets n'est toujours pas possible (pas plus qu'avec umbrello). Et umbrello (UML 1.???) n'est pas interopérable avec ArgoUML (UML 1.3).
En IA et ontologies, il n'y a pas en général pas de différence explicite entre concept et instance, c'est plutôt considéré comme une généralisation au même titre qu'une généralisation entre concepts (héritage en OO).
D'habitude on travaille au niveau M0 au sens MOF (instances, objets); le niveau M1 (classes) est figé, mais cela dépend de l'application. On peut avoir des applications qui manipulent (en création et modification) plusieurs niveaux en même temps:
gestion de catalogues électroniques de marchandises
repositories (référentiel, réceptacle)
entrepôts de données
Si on travaille sur plusieurs niveaux d'abstraction, il faut pouvoir ajouter dynamiquement du comportement, i.e. des implémentations de méthodes.
Certains langages interprétés comme Python facilitent le travail sur plusieurs niveaux d'abstraction. Il suffit de générer un source de méthode et d'utiliser la fonction eval() pour l'ajouter à une classe. Cependant en Java on peut faire l'équivalent en chargeant dynamiquement une classe qui vient d'être compilée par programme. L'antatage de Java c'est bien sur d'avoir une vérification des types dès la compilation (et après aussi la JVM fait des vérifications).
En fait je sens venir une formation sur les métadonnées, théorique et pratique: comment brasser au mieux SQL, RDFS, MOF/UML, IDL, langages Java - C++, XML Schema, ontologies (KIF, DAML etc). Il faudrait parler des outils: éditeurs, navigateurs, raisonneurs, valideurs, gestion. Et des catégories d'application: raisonnement, fusion de données/métadonnées, référentiels, bases de connaissance.
Une présentation intéressante sur la convergence UML et ontologies:
MDA Standards for Ontology Development . p. 46, 58 <<< à réutiliser; Protégé ne semble pas faire XMI??
Languages pour la metadonnée - une vue d'ensemble - Jean-Marc Vanel 2002 (serait à mettre à jour !)
Questions que je me pose:
peut-on utiliser n'importe quel meta-modèle de niveau M2 (e.g. CWM, Ontology Definition Metamodel, initiative OGM), et s'en servir :
dans un éditeur tel que ArgoUML
pour mélanger des modèles basés sur des méta-modèles différents?
pour générer de l'IDL, et de là du code Java ou autre?
pour faire du raisonnement
Ca fait longtemps que j'ai envie d'essayer de faire un repository (référentiel, réceptacle) de XML Schema avec eXist. Avec le projet de référentiel d'entreprise dans lequel je travaille en ce moment, l'idée supplémentaire est de stocker aussi les métadonnées SQL et applications. Pour cela, il peut etre bon de réutiliser les standards OMG: CWM, MOF, XMI.. Cela pose pas mal de questions:
langage de requetes ? A priori XQuery, mais pourquoi pas OQL?
quelle architecture de collections (répertoires) dans eXist? Chaque application au premier niveau, ou tables/ et classes/ au premier niveau (plutot la 2ème solution)?
quels cas d'utilisation?
comment indiquer les relations entre concepts?
l'équivalence entre champs de base de données
généralisation-particularisation (héritage) entre tables
implémentation: bibliothèques à trouver: importation dans la base :
source ==> XMI ou AST (voir PMD)
créer un XMI à partir d'une base relationnelle (introspecter la base avec JDBC)
comment trouver les associations entre tables et programmes?
fonctionalités:
chercher les classes/tables
par leur nom (avec joker)
par le nom d'un champ
par association (profondeur donnée) à partir d'une classe/table donnée
chercher les classes (comme eclipse)
par nom, par nom de méthode
Je mets à jour mes additifs (plugins) eclipse suite à eclipse 3.0 :
pydev (Python)
lomboz (serveurs Web Java, JSP, etc); voir mes commentaires ci-dessous
sangam (développement en paire à distance, eXtreme Progamming) http://sangam.sourceforge.net/plugin/site.xml
PMD ne marche pas bien, peut-etre parce que j'ai gardé le workspace ancien ...
PHPEclipse-072004.zip - http://sourceforge.net/projects/phpeclipse/
Je fais aussi mon marché dans les nouveautés eclipse sur le site eclipse-plugins.2y.net :
XML Schema GUI engine (JaxFront)
Je réalise que c'est une preuve de dynamisme des projets que d'avoir un plugin eclipse, tout comme autrefois d'avoir un build.xml. A tel point que les projets qui n'en ont pas vont bientot etre soupçonnés d'etre peu actifs et peu au courant de l'actualité.
Je me penche sur la spec. CWM pour répondre à ces questions:
apports par rapport à XMI ?
cas d'utilisation?
D'une manière générale, ce qui me fascine dans ce genre de concepts, c'est le serpent qui se mord la queue, ici par exemple:
MOF s'auto-décrit;
CWM définit (enfin je suppose) des API pour transmettre dans un réceptacle des méta-données définies par lui-meme
site intéressant: www.cwmforum.org
Je regarde les ontologies DAML disponibles:
http://www.daml.org/ontologies/keyword.html
Finlement ça se rapproche beaucoup de ce qui depuis des années est mon Saint-Graal (voir OO + free software = synergy [dream] ): avoir des Conceptions Réutilisables, voire simplement des Schema de bases de données, pour les objets courants de l'informatique de gestion. Seulement je cherchais ça sous forme XMI/IDL/Java/C++. Mais finalement un langage dédié à la repréentation de la connaissance comme DAML-OIL est mieux adapté. On doit pouvoir en extraire des interfaces Java, alors que la transformation inverse créerait une déperdition d'information.
J'avais depuis quelques mois ce bouquin sans avoir le temps de le lire:
J2EE et les Design Patterns, de Alur, Crup & Malks.
Je l'ai ouvert parce qu'un développeur (Frédéric ) m'a parlé du Modèle de
Conception DAO (Data Access Objects). Je crois que maintenant je vais le lire
en entier.
Publié sur la liste de courrier http://fr.groups.yahoo.com/group/xp-france/
En attendant des contrats plus rémunérateurs, je m'occupe d'un projet
open source, eXist (http://exist-db.org/),
une base de données XML 100%
Java. C'est un projet hébergé sur sourceforge.net.
Il y a eu des problèmes de qualité récemment (accès concurrents etc).
Il y a des problèmes liés au fait qu'il y a un seul développeur qui fait
90% du source.
Il y a des problèmes liés aux utilisateurs qui ne savent pas toujours
faire des rapports de bugs et encore moins sous la forme JUnit.
De toute façons, le nombre de tests JUnit (20) est insuffisant.
Pour arranger ce dernier point, j'essaye dans la liste de discussion de
pousser les utilisateurs à faire des rapports de bugs sous la forme
JUnit. J'ai écrit une page pour aider:
http://jmvanel.free.fr/exist/howto-test.html
Pas encore de succès depuis quelques jours...
Bien sûr quand je fais une correction, j'écris le JUnit correspondant.
Mais Wolfgang ne travaille pas (encore ?) comme ça...
Alors mes questions:
d'autres témoignages sur XP et open source ?
suggestion d'outils pour faire de la programmation par paire à distance ?
Cela pourrait être un éditeur de source où l'on peut:
éditer à distance
voir en tant réel les modifs de l'autre, colorées
voir le point d'insertion et la souris de l'autre
pouvoir écrire des "commentaires de session" positionnés dans le source (pour ne pas polluer ce source avec des commentaires normaux qui ne serviraient qu'au dialogue entre les deux programmeurs)
Une application X-Window peut-être?
Je viens de donner une formation sur les Design Patterns et le Refactoring en
Java, avec eclipse 3.0 bien sûr. Il y a un exemple de publication -
abonnement avec une (petite) base de données géographiques, avec une version
en ligne de commande et une version Swing, et une huitaine d'autres exercices,
dont certains basés sur mon environnement de simulation 2D ecolosim.
Tout comme Bruce Eckell, je ne suis pas satisfait de la présentation donnée
dans le livre de E. Gamma et Cie. Etant mathématicien, je me suis intéressé
à la structure plus qu'à l'intention. J'ai présenté les Concepts derrière
les Design Patterns :
Délégation
Enrober un comportement dans un objet
Principe de Hollywood (alias callback, rappel)
Nous avons abordé aussi CVS, JUnit,
eXreme Programming, Ant .
Présentations: Modèles de Conception (Design Patterns);
Refactoring (restructuration de code), le tout au
format OpenOffice.
Ce jour est à marquer d'une pierre blanche. Dans ma boîte aux lettres, en
plein mois de juillet, je trouve un propectus pour me vendre du matériel
informatique. Du banal; oui mais en première page, un PC à 299 Euros,
vendu avec MandrakeLinux 10.0 Discovery (pas préinstallé apparemment),
et sans Windows. Allez, un peu de pub., ils s'appelent planète Saturne.
Depuis le temps que j'attendais cela! Je pense que ça va faire boule de neige
et qu'on va voir les grandes marques s'y mettre. Qui va commencer ?
Suite aux dernières formations que j'ai données (Java débutants, C++, PHP), voici quelques réflexions et pistes pour améliorer les choses.
Le grand problèmes est l'hétérogénéité des stagiaires:
rend les choses difficiles: les plus avancés perdent de l'ordre de de 30 à 50% de leur temps, et les moins avancés se découragent si on aborde des thèmes pour lesquels ils n'ont pas les bases
fatigant pour le formateur, qui doit quasiment faire deux formations en même temps
et surtout, cela rend la réussite de la formation aléatoire
Lié à ce problème de l'hétérogénéité, il y a deux problèmes connexes:
l'information préalable sur les acquis des stagiaires
un découpage suffisamment fin des sujets
Voici quelques remèdes possibles:
bien distinguer les niveaux et leur progression, à une granularité plus fine (voir cursus.sxi , ou cursus.ppt )
meilleure organisation dans le temps, avec des sessions à effectifs plus homogènes
donner à chaque stagiaire un crédit formation qu'il va dépenser dans des modules appropriés
installer progressivement une site Web de suivi des formations et des compétences des stagiaires
ceci permettra au minimum au stagiaires de ne pas ressaisir au stylo leur profil à chaque formations (ce qu'il faut c'est les fidéliser, non?)
ceci permettra au formateur d'anticiper sa formation
ensuite on pourra permettre aux stagiaires de modifier leur profil eux-mêmes
le profil des stagiaires sera aussi mis à jour automatiquement à l'issue d'une formation
enfin le responsable formation pourra avoir une interface de requêtes pour avoir une vue d'ensemble de ses "administrés"
également souhaitable serait une gestion des sessions de formation et des crédits formation par stagiaire
bien sûr une page de saisie pour des demandes spécifiques serait bienvenue,
Cela va aboutir à une formation de meilleure qualité, et décharger un peu plus les responsables formation. Accessoirement ce serait une vitrine des compétences du centre de formation.
Comme je travaille beaucoup sur eXist, une base XML 100% Java et open source, il était naturel de s'intéresser à hsqldb (http://hsqldb.sourceforge.net), le pendant de eXist en relationel. Anciennement appelée Hypersonic DB, cette base est très petite (le jar ne fait que 260k) mais assez complète. Il y a une petite IHM, qu'on lance comme ceci:
java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManager
Il y a 4 façons de faire tourner hsqldb:
en mémoire
"embarqué", i.e. dans la même JVM, mais données sur disque
en client serveur, avec son propre protocole de sockets
comme une servlet, c'est à dire que hsqldb présente la base avec un protocole HTTP
Voir "Running HSQLDB" dans http://hsqldb.sourceforge.net/doc/guide
C'est vraiment commode pour mettre au point un programme Java qui utilise une base relationnelle, sans se casser la tête avec les permissions, les mots de passe, la sécurité réseau.
Le protocole est indépendant du format de données. Les métadonnées et la propriété intellectuelle doivent pouvoir etre ajoutés de manière uniforme quel que soit la donnée atomique.
Cabri ?
Recherche sur Internet:
mapping relational XML open source agregation
gestion historique modifications des bases de données: historical database
>>>>>>>>>> Ci-dessus une flèche en SVG ajoutée avec amaya <<<<<<<<<<
Mon touchpad fonctionne ! Sur mon portable Clevo/notebook Computer D410V. Un extrait de mon /etc/X11/XF86Config-4 :
Section "ServerFlags" AllowMouseOpenFail # allows the server to start up even if the mouse doesn't work EndSection Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/mouse" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" Identifier "Mouse2" Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/psaux" Option "ZAxisMapping" "4 5" EndSection Section "ServerLayout" Identifier "layout1" InputDevice "Keyboard1" "CoreKeyboard" InputDevice "Mouse1" "CorePointer" InputDevice "Mouse2" "SendCoreEvents" Screen "screen1" EndSection
Les collections du Museum
Par Nicolas Bailly
Maitenant on a des formulaires de saisie en Java.
"On finira jamais, donc c'est pas la peine de commencer".
authentification PGP pour les fournisseurs de données
désaccords sur noms et classification: vote versus autorité (mais qui désigne l'autorité compétente?
absence de clé unique pour les taxons?
déjà la notion d'espèce n'est pas vraiment rigoureuse
un URL stable peut tenir lieu de clé unique (c'est garanti par les mécanismes du WEB);
cet URL avec d'autres associés à un groupe taxonomique serait maintenu par une autorité auto-proclamée
des informations (description, historique) seraient lisibles à cet URL par l'homme et par la machine
le problème ultimement est un problème de travail coopératif sur le Web
il suffit de découper les problèmes par rapport à des groupes taxonomiques suffisament petits confiés à des groupes de travail
il est temps de s'intéresser à l'aspect production des données
en cas de désaccord il peut y avoir des groupes parallèles, c'est le nombre de réferences qui tranchera
possibilité de calculer des indices de similarité à partir des descriptions
cas d'utilisation
relations possibles entre taxons
inclusion stricte
intersection vide
synonymie
quels sont concrètement les problèmes pour fusionner ITIS et GBIF?
24 millions d'enregistrements
GBIF = 14 employés, budget 1.5 millions $ /an
Risques:
persistence & et unicité des identificateurs: il y a des problèmes: index
SMIB = Système mondial d'information sur la biobiversité ?
On peut retirer l'information à tout moment (exemple information sensible), mais pour l'instant cela n'est pas retiré des caches.
pas de protocoles sécurisés pour les informations sensibles.
Services d'hébergement: une base de donnée par organisation.
Tout le code est sur le CVS de sourceforge.
Pas d'images avant 2006! JMV: pourquoi cela pose-t-il des problèmes?
ENBI =? European Network Biodiversity ; projet Enropéen à durée déterminée.
Problèmes avec les noms de pays: anciens pays
Zamia pseudoparasitica : épiphyte
permien: coléoptères, mouches
Togo: 460 espèces horticoles
IRD: Chevillotte: herbier de Guyane (140 000 specimen), Nouméa, Tahiti
ITIS: base centralisée pour USA, Canada, Mexique; plantes OK
species2000: fédération de DB, associé à ITIS
CDROM 350000 noms ITIS+species2000
nomenclature: intersection non vide avec GBIF, animosités
Tela-botanica
Partenariat Fédéral sur l'information en Biodiversité.
SITI services XML
passerelle ICSOB: moteur de recherche sur spécimens etc
avant Biocase DIGIR: TSA, REMIB
index de métadonnées: identification taxonomique, lo, lat, date, source
association entre séquences de gènes et spécimens ==> lien avec bases génétiques et moléculaires.
Species Bank
Kew bouquin euphorbiaceae,
Pour compléter les idées du 2004-04-27 (organiseur d'idées), il faudrait considérer l'apport de RDF, comme formalisation mais aussi comme format de stockage dans la base, et bien sur comme format d'échange. Les triplets considérés seraient:
ressource: la note, a priori définie par son URI
propriété: au-sujet-de (alias se-rattache-à)
valeur: un sujet déjà défini, aussi un URI
Il faudrait voir si dans OWL ou ailleurs il n'y a pas des Schema RDF déjà définis pour ces choses. Il faudrait voir aussi si il n'y a pas des choses à récupérer dans Protégé, l'éditeur RDF Java Open-Source. Il faudrait aussi spécifier comment réutiliser ce que j'ai avec JGraph, XML et XQuery.
Egalement pour l'implémentation il faudrait voir si mon Modèle de Conception "XML + comportement" tient la route. C'est à dire que les objets ont une double nature: ils implémentent org.w3c.Node (en fait Element ou Document), et d'autre part un comportement "métier".
NoteStorage {
store(Node, String)
}
Il faudrait trouver des choses sur le mapping objet-relationnel en C++, ainsi que sur les timer et le threads.
Après 3 jours de formation sur Java débutant, je m'aperçois qu'il est plus facile d'expliquer l'héritage et le polymorphisme que l'encapsulation. Je m'aperçois ausi que meme si le livre "Conception Objet en Java avec BlueJ" est excellent en tant que livre, comme inspiration pour une formation courte ça ne suffit pas.
Ajouté le 2004-06-19:
En fait Java n'est tout simplement pas un langage pour programmeur débutant, ou alors il faut l'aborder avec BeanShell, si Java est le but final. Si Java n'est pas le but final, on peut débuter en programmation avec Python.
Je mets à jour ma copie CVS de gcc 3.5 . Je vois que quelques dizaines de choses ont changé, comme :
gcc/libjava/javax/swing/RepaintManager.java
Plus je pense à gcc, plus je vois son importance dans la lutte entre le logiciel libre et le reste, et aussi dans la lutte d'influence plus feutrée entre les acteurs du libre. RedHat prend une part importante dans la suite gcc. C'est un bon choix, car gcc permettra à terme de mélanger les langages et les plateformes plus simplement et plus efficacement que tous les bytecodes et les RPC du monde.
http://java.sun.com/developer/technicalArticles/releases/j2se15/
Un petit échantillon qui mélange la généricité, l' "auto-boxing" et la boucle for améliorée:
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, new Integer(42)); int total = list.get(0); // i n'est pas l'indice, c'est le contenu for (Integer i : list) { System.out.println( i ); }
Maintenant que j'ai une machine à 2.4GHz, j'essaye de compiler un snapshot de gcj ( gcc-3.5-20040606 ). Je suis la recette ici:
Et ça ne marche pas !!!! Après 2 heures de compilation juste pour le bootstrap il y a une erreur! Sans doute dans un Makefile:
/usr/bin/ld: cannot open java/awt/event/.libs/ComponentAdapter.o: No such file or directory make[3]: *** [libgcj.la] Erreur 1 make[3]: Leaving directory `/usr/src/compile/objdir/i686-pc-linux-gnu/libjava'
Le problème c'est que c'est CompOnentAdapter.o qui existe, et je ne sais pas pourquoi. Il ont bien raison de recommander un accès par CVS au source! (http://gcc.gnu.org/snapshots.html). C'est ce que je fais, et, après trois heures de compilation, je peux faire un Helloworld.
unset CLASSPATH /home/jm/usr2/gcc/bin/gcj --main=HelloWorld HelloWorld.java export LD_LIBRARY_PATH=/home/jm/usr2/gcc/lib ./a.out
Maintenant pour essayer les nouvelles implémentations swing, il faut encore configurer le toolkit GTK. Voir les options "AWT-Specific Options" dans :
http://gcc.gnu.org/install/configure.html
Donc finalement je dois tout recommencer avec:
../gcc/configure --enable-threads=posix --prefix=/home/jmv/usr2/gcc \ --enable-shared --enable-languages=c++,java --with-x \ --enable-java-awt=gtk,xlib make bootstrap; make; make install
Les développeurs de g95 ont le bon gout de mettre un binaire linux pc presque chaque jour de leur compilateur (http://www.g95.org/). D'autre part avec l'accès CVS on peut avoir leurs fichiers f90 de test (http://sourceforge.net/cvs/?group_id=5179). Tout ça m'a l'air de bonne facture, et le projet semble avancer au quotidien. Je ne sais encore si je vais pouvoir l'utiliser pour ma prochaine formation Fortran 95.
Je mets à jour mon Mandrake 10 community avec les 3 CD de Mandrake 10 officiel que j'ai téléchargé (en 3 fois 3 heures) de mon ancienne école, l'ENSET de Cachan ;-) . Je grave :
/usr/bin/cdrecord -v gracetime=2 dev=/dev/hdc speed=8 -dao driveropts=burnfree \ -eject -data -raw96r /tmp/isos/Mandrakelinux10.0-Official-Download-CD3.i586.iso
Devant faire bientot une formation sur C++ pour des stagiaires devant faire de la maintenance applicative, ça m'a donné à penser que beaucoup de thèmes sont communs avec l'intégration d'applications open source. Voici donc un programme adapté à ces besoins: une sélection d'outils en tous genres, et de méthodologies: refactoring, rétro-conception, tests...
Ayant eu des déboires avec Lomboz + eclipse 3.0 M8, je recommence tout en suivant à la lettre la procédure: Installation, Concepts, J2EE projects, adding modules. En particulier il faut faire attention à appuyer sur "Apply" pour les définitions de serveurs, et à utiliser bin/ et src/ comme répertoires de construction et de source du projet eclipse.
Ensuite :
on crée un projet J2EE, dans lequel
on ajoute une application Web, dans laquelle
on ajoute une servlet
Que fait Lomboz pour nous ?
Lors de la création de l'application Web et des servlets, le fichier WEB-INF/web.wml est créé avec les bonnes infos. Mais il n'y a pas de mise à jour prévue par formulaire, il faut éditer le XML, mais le plus embetant est fait: créer ce fichier.
Dans le répertoire associé à l'application Web, Lomboz ajoute un build.xml qui fait le déploiement.
Lomboz et Jonas marchent bien ensemble, car ils sont de la meme provenance: le consortium ObjectWeb; surtout Jonas déploie et élimine rapidement une application Web.
L'embryon d'une formation "panorama des langages" (format OpenOffice), une espèce d'arbre généalogique.
Ma formation Services Web a été reportée à fin septembre. Je viens de préparer un programme de formation pour Ada 95 sur 5 jours. La communauté Ada, bien que relativement réduite, rassemblée autour de l'entreprise ACT, est bien vivante. Il y a toutes les bibliothèques et les outils qu'il faut, et pour travailler en open source. Ada n'a pas d'embuches, c'est très amical pour le programmeur. On peut se concentrer sur la conception. Cela fait penser à Eiffel.
J'ai un nouveau portable à 2.4GHz, un Nitteo / Clevo de Taiwan. J'ai mis pour l'instant Mandrake 10.0 Community, mais j'ai des plantages quotidiens, et le touchpad n'est pas reconnu. Je mets tout ça sur le compte du noyau 2.6 ...
Nouveaux thèmes de formation:
gcj
JavaBeans
Association Libre Cours : sous ce joli nom, il y a plein de cours informatiques. Ils ont ont une présentation sur Web Services.
Plus puissant que Java, plus propre que PHP et Perl, orienté objet ... Python est incontournable. Voici un didacticiel en Français . Et maintenant, il n'y a plus qu'à consulter la documentation: Python Library Reference .
Voir aussi Numerical Python
Il faut installer le paquetage python-docs; ainsi la fonction help("nom_de_commande") marchera :
apt-get install python-docs export PYTHONDOCS=/usr/share/doc/python-docs-2.2.3/html
Pour faire des IHM, Tk est intégré, voir la doc Tk.
Comme je prépare une formation services Web (WS), je regarde les WS avec Python (il faut bien montrer WS avec d'autres langages que Java) :
PyAxis PyAxis is a Python program for creating and deploying web services written in Python to Apache Axis, the Java SOAP server (pas encore testé).
Il faut d'abord aller chercher et installer les dépendances:
Ensuite je ne peux mieux faire que citer l'échantillon de source:
QUICK START
A simple "Hello World" http SOAP server:
import SOAPpy def hello(): return "Hello World" server = SOAPpy.SOAPServer(("localhost", 8088)) server.registerFunction(hello) server.serve_forever()
Et le client correspondant :
import SOAPpy client = SOAPpy.SOAPProxy("http://localhost:8088/") print client.hello()
On voit que l'aspect dynamique de Python est mis à profit. Pas besoin des étapes laborieuses d'un appel WS en Java avec l'API Sun officielle !
C'est un pont avec Java, un Python implémenté en Java : Jython .
java -cp /home/jmv/distribs/ jython-21 # IHM d'installation
cd /home/jmv/install2/jython-2.1 # répertoire de Jython installé
cp jython ~/bin
Mais que peut-on faire exactement avec Jython ? Appeler toute classe Java avec la syntaxe Python :
>>> from java.util import * >>> h = HashMap() >>> h.put("75", "Paris") >>> print h.get("75") Paris
Cela ressemble pas mal à ce qu'on peut faire avec BeanShell :
bsh % h = new HashMap(); bsh % h.put("75", "Paris"); bsh % print (h.get("75")); Paris
Beanshell gère bien les 4 flèches du clavier; il accepte du Java standard comme du Java simplifié sans déclarations. Mais Jython permet d'avoir à la fois la puissance de Python et celle de Java. On peut aussi à l'inverse Appeler toute classe Python depuis Java, à condition de préparer une classe emballage (délégation) en Python qui appelle la classe Python souhaitée et étend java.lang.Object .
Après avoir bataillé quelques jours avec Alma, qui a un analyseur syntaxique totalement fait main, je regarde, enfin, quelque chose de plus standard. Il y a JavaCC qui a une grammaire pour C++. Voici le récit de mes tests avec JavaCC pour C++.
Pour la première fois j'ai compilé eclipse; ça a pris 1h15 sur mon vieux 500MHz Celeron :-(( . Il est temps de changer ! Je voudrais mieux comprendre le source, à la fois pour utiliser son API d'arbre syntaxique, et parce qu'un logiciel conçu par quelques membres de la bande des 4 doit être intéressant.
Un script qui fait une page HTML statique avec un répertoire de photos,
parfait pour mettre en ligne un CD de photos :
http://opengallery.sourceforge.net/
Un très beau projet! Je peux à la fois l'utiliser pour corriger les
exercices de mes filles, et comme bibliothèque Java dans mes projets. Et il y
a une IHM qui sait faire du MathML!
jscl-meditor -
java symbolic computing library and mathematical editor
Un simple Control-A Control-E (E comme Expand) sur cette expression :
(x-a) * (x+sqrt(2)) * (x*a*sqrt(2) -3x)
donne ceci:
3*a*x^2-3*x^3+3*a*x*sqrt(2)-3*x^2*sqrt(2)-a^2*x^2*sqrt(2)+ a*x^3*sqrt(2)-a^2*x*sqrt(2)^2+a*x^2*sqrt(2)^2
Mais il y a mieux; Control-T factorise et récupère l'expression initiale. De plus Control-Q permet de simplifier l'expression développée :
-2*a^2*x+5*a*x^2-3*x^3+3*a*x*sqrt(2) -3*x^2*sqrt(2)-a^2*x^2*sqrt(2)+a*x^3*sqrt(2)
Bien sûr, il y a Maxima que j'utilisais déjà dans les années 80. Mais
là c'est très simple à utiliser, et c'est un modèle Java Orienté Objet de
l'algèbre.
A noter que Mozilla 1.7beta affiche bien ce MathML sur le wiki
de meditor : Trigonometric_identities
Car il y a même un Wiki en PHP sur meditor !
A noter aussi que la documentation n'est que dans la distribution, pas sur le
site.
On veut mettre de l'ordre dans ses notes et ses idées. On
peut utiliser un graphe sémantique où on peut tracer des liens d'un
article-élément d'information vers un sujet. C'est conceptuel; tracer un lien
n'est pas (toujours) le plus simple gestuellement. Un choix dans un menu, un
DnD dans un classeur, la saisie d'un sujet au clavier peuvent être mieux. A la
wiki, le seul fait d'écrire un nom de sujet qui n'existe pas peut le
créer.
L'idée sous-jacente est qu'une note se rattache à plusieurs sujets.
C'est la richesse de ces sujets qui fait la structuration du graphe sémantique
(houlà ça devient hermétique ;-) ). Je veux dire que si on n'a que 3 sujets
tels que sexe, drogue, et Rock'nRoll (ou client contact proposition) c'est un
peu pauvre. Par exemple en ce moment je m'intéresse à ces sujets:
infrastructures collaboratives
architectures multi-langages
utilisation conjointe de données XML et de concepts et langages orientés objets
éditeurs XML
architectures à composants genre Avalon, eclipse
binding XML Java
application des outils et concepts sémantiques et IA
Mais j'ai aussi client - contact - proposition, ça enrichit
;-) . Ces réflexions rentrent dans la dernière catégorie, sémantiques et
IA. Une analyse linguistique de la note peut permettre de suggérer un ou
plusieurs sujets. Si c'est du XHTML ou du XML, l'analyse linguistique va
être remplacée ou enrichie par l'analyse des balises en rapport avec leur
contenu. Par exemple un hyperlien vers happypenguin.org sera révélateur de
préoccupations à la fois ludiques et logiciel libre.
Si on veut partager ses notes avec d'autres, il convient
d'utiliser des standards, tels que OWL, TopicMaps. Et là on rentre dans le
sujet "infrastructures collaboratives".
Vu les nombreuses possibilités pour crééer un lien, on aura plusieurs clients: Web, GUI, ligne de commande, de plusieurs styles. Et le serveur sera accessible de plusieurs façons: embarqué, RMI, Corba, WS. Mais que doit faire le serveur ?
stocker des notes, a priori en XML (XHTML si on n'a ou on ne veut pas de contraintes de structure, ou XHTML avec texte seul); date, auteur seront enregistrés en même temps, par exemple en RDF
ajouter un sujet
associer un sujet à une note
requêtes: par sujets; par auteurs; requêtes XQuery partant sur le conenu des notes
exporter / importer
partager: permet d'agréger des bases
On peut utiliser eXist qui fait déjà beaucoup de choses. La conception consistera surtout à choisir judicieusement comment stocker auteurs, sujets, et les associations note-->sujet .
post sur news:comp.lang.java :
extensions Java pour composants analogue à Avalon et eclipse
API pour éditeurs XML
continuer essai de ObjectWeb (+ Bonita)
classification des moteurs de collaboration (Tutos, Spip, Wiki divers, XPlaner, gforge-sourceforge-savannah, ...)
exemples d'applications eXist - XML:DB :
adaptateur (= emballeur = wrapper) relationnel (dans les deux sens)
base de données mail
aspirateur de site Web - emballeur de site
valideur générique (XML Schema, Relax NG, Schematron, ....) comme emballeur au niveau XML:DB
implémentation XML:BDB en mémoire, basée sur DOM + peut-être JNDI
réfléchir à une architecture générale pour une application qui a besoin de naviguer de proche en proche dans une base XML (peut-être avoir un contexte session dans la base elle-même)
rendre plus générique mon moteur de recherche XML ( XML query engine: http://jmvanel.free.fr/protea.html - Worldwide Botanical Knowledge Base http://wwbota.free.fr/ )
pouvoir définir un générateur de requête XQuery par collection, tout comme on a actuellement une feuille de style par collection
traduire en XQuery la page XSP
Describe here who you are!
Je suis un inventeur d'informatique. Je prends des bouts d'abstractions,
quelques implémentations, et je concrétise C'est une cuisine
goûteuse...
Terminé une semaine de formation sur Linux, et 2 jours sur Cocoon.
En parlant avec mon fils de jeux en réseaux, je me suis dit que l'idée d'être plusieurs sur un même monde est intéressante. Avoir des tanks (bzflag) ou des mitraillettes (doom) et se tirer dessus n'est que l'une des choses qu'on peut faire dans un même monde. On peut envisager des "jeux" où on construit ensemble. La métaphore peut être une maison, une carrière et des loisirs comme les Sims, ou une ville comme Cesar II, Simcity ou Lincity.
Et puis alors j'ai pensé à des applications d'entreprise. Le monde sera (par exemple) un projet de conception d'un nouveau produit.
Il ne faut pas se limiter à un seul aspect, tel que hardware, software, fonctionnalités, simulations, mesures, équipes, … On sait bien que tout est connecté et dépendant de tout. Pour montrer tout sans être perdu et pouvoir naviguer rapidement, le paradigme ZIP de Jef Raskin s'impose. Ayant une formalisation de tout ça sous forme de graphes de sujets (topics), on doit pouvoir représenter aussi ça sous forme de :
ZIP (zoom interface paradigm, voir la fin de http://humane.sourceforge.net/humane_interface/summary_of_thi.html
"site map" d'un site Web
visualisation sous forme de graphe
Ce ne sont que des isomorphismes.
Le tout est de bien choisir la métaphore visuelle pour chaque sujet.
Il faut bien sûr pouvoir intégrer des informations et des applications tierces (CAO, gestion de projet, CVS, webapp J2EE, services Web, ...).
Comment j'ai défini le poste que je cherche sur lea-linux.org:
Projets novateurs où l'on cherche la créativité au niveau fonctionnel et
architecture.
Voir mon profil sur lea-linux.org : http://fr.lolix.org/search/cv/cv.php3?id=6339
Classiquement les conceptions Orientées Objet se présentent de la sorte, avec l'exemple d'un compte en banque:
compte.lireMontant(); compte.déposer(500);
On remarque que cela ne correspond pas, comme on le lit parfois, à une tournure linguistique "sujet-verbe-complément". Un schéma plus conforme à cette intuitoin du langage naturel serait:
client.déposer(compte, 500);
Cette délégation permet de rendre explicite qui fait l'action. En terme de
gestion de la sécurité, ce genre de mécanisme permetrait de remplacer la
gestion des permissions par les EJB. Mais au coup par coup il faudrait avoir
des fabriques qui créent des objets comme client ou compte avec les
bonnes permissions. Pourquoi pas ? De toute façon la création des objets est
le point faible dans un langages comme Java, c'est pour ça qu'on a inventé
les modèles de conception "fabrique" et "fabrication".
Il faudrait donc avoir un point de passage obligé pour la création des
objets, une sorte de contexte - fabrique universelle. Celle-ci renverrait un
objet décorateur autour d'un objet métier "pur sucre". La décoration (qui
gère les permissions ou autre préocupation transversale) pourrait être
implémentée en POA (Programmation Orientée Aspect). Mais une simple
délégation peut le faire aussi. Et l'avantage de la délégation est d'être
dynamique.
La séquence serait donc:
on accède, avec un certain rôle et/ou identité, à une fabrique d'objets métiers
on accède aux objets métiers "décorés" avec les permissions
on appelle les méthodes métier
Ce genre de "fabriques de décoration" peut aussi prendre en charge les objets distribués à la Corba/RMI.
Reçu commande d'une formation sur Cocoon pour Alstom. Il va falloir mettre à jour la présentation, et parler de eXist.
J.B. Onofré, auteur de l'article dans Linux Magazine: Vous trouverez les
sources sur le WebCVS :
http://cvs.nanthrax.net/cgi-bin/viewcvs.cgi/jboss_linuxmag/
Il y a Download tarball <http://cvs.nanthrax.net/cgi-bin/viewcvs.cgi/jboss_linuxmag.tar.gz?view=tar>
en bas de la page.
Une suite de questions / réponses avec J.B. Onofré, auteur de nombreux
articles dans Linux Magazine.
JMV>>>>>
Je me pose des questions sur les alternatives possibles à EJB qui seraient basées au maximum sur les constructions Orientées Objet de Java, ainsi que des modèles de conception tels que Décorateur, sans conventions de nommage à la JavaBeans, ni éventuellement génération de code à la RMI/Corba.
Je ne comprends pas tout à votre question :)
Je m'adresse à qq'un de haut niveau pour mes interrogations qui ne le sont pas
moins.
EJB est déjà basé sur les constructions objet Java (il y a l'héritage,
polymorphisme, etc), le concept le plus important dans les EJB étant la
séparation entre interfaces et implémentation.
Rassurez-vous, je sais ce qu'est un serveur d'app. EJB; j'ai lu le
Monson-Haefel.
Mais je manque de pratique.
Decorator est une Design Pattern "classique" dans Java (les I/O sont
manipulées sont forme de Decorator) mais je vois pas bien son
application dans les EJB.
Un décorateur est une possibilité pour réaliser un conteneur d'objets
métiers similaire à un Serveur d'App. J2EE.
Conceptuellement l'objet métier serait décoré de façon à prendre en compte
la sécurité, les transactions, etc.
Une autre possibilité à partir de Java 1.5 est d'utiliser la généricité
pour implémenter les fonctions d'un serveur d'app.
Dans cet ordre d'idées je sais que JBoss 4. fait du tissage Orienté Aspect.
Les conventions de nommage "à la JavaBeans" sont principalement
utilisées dans les Entity afin de cacher l'implémentation des fields et
les mapper au SGBD.
Je n'aime pas les conventions de nommage "à la JavaBeans". Ca fait bidouille. Ce sont des palliatifs pour des choses qui devraient être soit dans le coeur du language (voyez eiffel, il n'a pas besoin de getXXX() ), soit alors être mises en oeuvre à l'aide d'interfaces et de fabriques.
Personnellement, j'utilise les EJB Session (stateless et stateful) dans
pratiquement toutes mes applis. Par contre pour les Entity, selon
l'appli, j'utilise soit les BMP (c'est de plus en plus rare), soit les
CMP, soit Hibernate, soit JDO/OJB.
A ce propos, voici les prochains articles prévus en rapport avec J2EE :
- CruiseControl (j'espère dans le numéro de mai)
- JBoss 2eme partie avec les CMR, les interceptors et développez ses
propres MBeans
- Hibernate
Volontaire pour relire ...
JMV >>>>>
> Il me semble que à une époque, à l'origine, c'était un élément de la > stratégie de Sun pour enmener BEA, Oracle, IBM et d'autres dans sa > barque. Le but n'était pas de faire une architecture propre et nette. Je suis tout à fait d'accord et même encore, il y a des parties de Java qui ne sont pas nettes. Mais il ne faut pas non plus mettre tout sur le dos de Sun, même dans des consortium comme JDO Experts, les choses ne sont pas nettes :) > Et maintenant on est là avec cette spec. et ses implémentations, face à > .NET, face à PHP, face à RedHat Web Application Framework, et tout ce > qui va venir ensuite. Pendant ce temps, des entreprises achètent du > Websphere et du WebMethods très cher, et se contentent de faire des > servlet et du JSP avec. > Pourquoi ? > Parce que, si des décideurs ont acheté J2EE + EJB, les développeurs ont > du mal à suivre. C'est encore une fois tout à fait vrai :) Je suis toujours aussi surpris du niveau général des développeurs, surtout dans le monde Java. Même dans les outils "classiques" de développement, les gens ont du mal (je pense notamment à CVS ou ant par exemple). > Il ont déjà du mal à suivre l'Orienté Objet, qui reste la base. > Et après on leur dit que c'est loin de suffire, il faut assimiler toute > une façon de faire à la Corba, et pas mal d'autres choses pour faire des > EJB. > Le moins qu'on puisse dire, c'est que les specs EJB ne permettent pas de > faire simplement les choses simples. Oui mais la puissance est au rendez-vous. C'est sur que si concevoir des EJB afin que ces derniers soient utilisés que par une seule webapp se trouvant sur le même serveur, je ne vois aucun intérêt. Autant faire du PHP. Il faut bien garder à l'esprit que J2EE ne révéle sa puissance que lorsqu'on se trouve dans une optique trois tiers avec les clients (et je dis bien LES) se trouvent distants du container d'EJB, lui même distant du serveur de base de données. > > Et les décideurs ont du mal à comprendre que l'intérêt d'une spec. comme > J2EE, c'est de pouvoir changer de crémerie (de Websphere à JBoss ou > ObjectWeb). Oui c'est exact mais il faut reconnaitre qu'à l'heure actuelle la portabilité des serveurs d'application n'est pas optimale. Par exemple, passer une application de JBoss à Websphere n'est pas simple (les descripteurs des CMP sont très différents par exemple pour le mapping).
> Alors justement est-ce que les nouvelles specs EJB vont prendre en > compte ces descripteurs ? Clairement non. Les descripteurs spécifiques sont propres aux serveurs d'application et donc sont périphériques. De plus, il y a des problèmes autre que dans les descripteurs. Je pense notamment à toutes les extensions EJB-QL comme on peut les trouver dans WebLogic. Lorsqu'on passe d'un EJB-QL étendu à un EJB-QL pur, bonjour les problèmes :) JMV >>> > Pendant que j'y suis, que pensez-vous du nouveau projet Geronimo, porté > chez apache.org par entre autres David Monson-Haefel et JBoss ? > http://incubator.apache.org/geronimo/
Je trouve le projet intéressant mais avec des réserves. La réaction de Marc Fleury et Gavin King a été pratiquement sans équivoque. Déjà la license pose problème entre la GPL de JBoss et l'Apache License de Apache. Ensuite quelle valeur ajoutée va proposer Geronimo par rapport à JBoss si le container est majoritairement basé sur JBoss. En gros, j'attends de voir. Le gros avantage de Geronimo est son appartenance au groupe Apache. Par exemple, un serveur comme Jonas est de très bonne qualité et pourtant ne connait pas un engouement énorme (ce que je trouve dommage). Wait and see donc :)
Passé à Mozilla 1.7beta; installé Webmin pour régler le parefeu et
protéger mes ports que je vais ouvrir avec JBoss. Un petit didacticiel sur
iptables est ici :
http://www.siliconvalleyccie.com/linux-hn/iptables-intro.htm
Présentation WWBKB à la FING : presentation-fr-wwbkb.sxi - presentation-fr-wwbkb.ppt
Je parcours la Javadoc de ccm-core-5.2.1. C'est bien ce que j'avais compris. C'est une alternative radicalement différente à l'utilisation des EJB. Il y a une modélisation objet des notions de role, utilisateur, persmission (com.arsdigita.kernel.permissions). C'est une approche qui me va; cependant l'ouverture du code est médiocre: il y a très peu d'interfaces Java.
Je suis l'article de Onofré sur Linux Magazine. J'ai fini l'installation
(page 28).
Sur Fedora, addgroup n'existe pas, et adduser est different. Il doit utiliser
Debian. J'utilise donc redhat-config-users .
Publié sur news:fr.comp.lang.java
Le 03/31/2004 09:40 PM, M a écrit :
......
> 2)
> Pour la partie stockage de données, j'aimerais m'afranchir d'un sgbd, il
> n'y en pas vraiment besoin vu la simplicité des données et des
> opérations dessus, et donc utiliser des fichiers plats. J'avais pensé à
> un stockage dans des fichiers XML. Connaissez vous des solutions simple
> pour mettre cela en oeuvre ?
Utilisez l'API XML:DB :
XML:DB Initiative: API for XML Databases
http://www.xmldb.org/xapi/
Ele est suivie par au moins 2 produits open source: eXist
( http://exist.sourceforge.net/ dont je suis un des développeurs) et XIndice
de apache.org .
Il y a aussi des produits commerciaux comme Software AG Tamino.
XML:DB c'est un peu le JDBC des bases XML.
Et ce qui est intéressant, c'est que l'implémentation de référence de l'API
XML:DB est tout simplement basée sur un système de fichiers, donc vous pouvez
commencer petit et embarquer une base XML par la suite si nécessaire.
Des API qui ressemblerait au requêtes SQL ?
Avec eXist vous avez Xquery (spécifié par le W3C) qui est un sur-ensemble de
XPath. Ce sont des languages de requête spécialement faits pour XML. XQuery
est de plus un véritable langage de programation orienté XML, qui permet de
faire simplement les choses simples.
Avec eXist vous avez aussi XUpdate, qui sert à faire des mises à jour des
documents XML.
Je sors la version 0.2 de http://sourceforge.net/projects/ecolosim/
Finies les formations Corba et le restant de la formation Java à l'IRD.
Je regarde Java 1.5 : J2SE 1.5.0 Beta 1 Documentation
Je prépare une formation sur Corba .
J'en suis déjà à une semainde de tergiversations de Wanadoo. Voici le
problème :
J'ai depuis plus d'un an un abonnement ASDL 512 chez Wanadoo.
Je faisais marcher plusieurs programmes serveur sur ma machine personnelle,
accessibles depuis Internet pourvu qu'on connaisse l'adresse IP,
tels que ssh, HTTPd, un serveur Java sur le port 8080.
Certains utilisateurs de mon site se sont plaints d'avoir une connexion
refusée.
Alors que si je me connecte sur mon adresse IP personnelle non fixe telle que
81.50.251.238,
ça a toujours marché.
Je soupçonne Wanadoo d'avoir changé sa politique ou d'avoir des problèmes
intermitents.
Il semble qu'à certains moments, mon site n'est plus accessible, au moins
depuis certains domaines IP.
Je souhaite avoir un état des problèmes; ou pouvoir discuter avec une
personne compétente.
Je souhaite que ce genre de problèmes soit indiqué en temps réel dans les
pages support.
Vous pourriez par exemple faire tourner périoquement des scripts qui font un
ping depuis un ensemble de sites non-wanadoo vers une adresse IP personnelle
wanadoo.
Ou alors s'il existe un moment de tester cela moi-même je souhaiterais le
connaître.
Merci à Frédéric Salach qui m'a mis sur la piste :
trouver un proxy publique <http://www.proxy4free.com/page1.html> et
parametrer le proxy dans ton navigateur... c'est tout.
J'ai testé 2 des adresses IP mentionnées avec konqueror, après avoir
configuré le "serveur de proximité", et voilà :
Impossible de se connecter à Serveur de proximité 80.225.251.61 sur le port
8080
Je ne me suis pas découragé, après avoir vu que ça répondait à ping. J'ai
lancé nmap, et là j'ai vu ceci :
Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at
2004-03-14 10:44 CET
Interesting ports on netcache0-lds.as9105.net (80.225.251.61):
(The 1651 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
23/tcp open telnet
80/tcp open http
135/tcp filtered msrpc
439/tcp filtered dasp
445/tcp filtered microsoft-ds
514/tcp open shell
J'ai donc vu que le proxy était sur le port 80 et non 8080. J'ai reconfiguré
konqueror. Et ça marche!
Je vais pouvoir faire un petit script avec wget pour tester mon site :
export http_proxy=http://80.225.251.61 mkdir tmp ; cd tmp wget --recursive --level=1 --span-hosts http://jmvanel.free.fr/protea.html cd .. ; rm -rf tmp
Encore quelques questions:
- comment savoir lequels tout de suite quels proxy utilisent le port 80, ou
8080?
- que veut dire "transparent" et "anonymous" dans la colonne "Type" ?
- Faut-il s'inscrire prélablement sur certains sites ?
- lequels recommanderiez vous?
Mon premier essai réussi d'OCR, avec gocr intégré à xsane, en
numérisation mode trait, résolution 300. On voit que seule la police
majoritaire passe bien.
l26 GuIDE Du NATuRALTsTE EN DoMBEs
QUE_ ESr lE _cBON Er_NG__.?
Même si l'ornithologue et le chasseur ne s'intéressent pas également aux
mêmes oiseaux, leur souhait commun est de disposer d'étangs aussi riches
que possible, en espèces comme en individus. Au-delà de l'ìndifférence,
ou de l'empirisme, il est donc permis de i'interroger sur les critères
défi-
nissant un {_ bon étang}} pour l'avifaune nidificatrice, pour en optimiser
l'aménagement et la gestion. C'est la question à laquelle Michel Bournaud
et ses colIègues (1980, 1982) ont tenté d'apporter réponses, en étudiant
(pen-
dant deux années consécutives, 1977 et 1978, à raison de 8-10 visites en
belle saison), 36 étangs ( + 10 gravières) dans 5 districts de la régìon
Rhône-
Alpes : Dombes et Forez (l l étangs chacun), Bresse, Ile Crémieu et Bas-
Dauphiné (4 ou S étangs). Les auteurs ont noté l'avifaune présente (au
total
61 espèces), mais ont également relevé de nombreux paramètres, morpho-'
Iogiques et botaniques, permettant de définir le milieu dans l'espoir d'en
saisir le déterminisme écologique.
Blackboard Systems: The Blackboard Model of Problem Solving and the Evolution of Blackboard Architectures. AI Magazine 7 (2): 38-64. "The first blackboard system was the HEARSAY-II speech understanding system (Erman et al.,1980) that evolved between 1971 and 1976. Subsequently, many systems have been built that have similar system organization and run-time behavior. The objectives of this article are (1) to define what is meant by 'blackboard systems' and (2) to show the richness and diversity of blackboard system designs."
Je suis arrivé presque à la fin samedi.
J'ai dîné avec les membres de PLF.
Dimanche j'ai écouté JOnAS, GCJ (même posé des questions),
SmallEiffel.
J'ai mis le javadoc de Alma 0.41 sur un de
mes sites :
http://perso.wanadoo.fr/jmvanel/docs/
C'est intéressant de comparer avec la javadoc d'eclipse (seulement version
2.0) :
http://download2.eclipse.org/downloads/documentation/2.0/html/plugins/org.eclipse.jdt.doc.isv/reference/api/index.html
La partie intéressante est : org.eclipse.jdt.core.dom
The Java DOM is the set of classes that model Java program as a structured
document.
Si on veut récupérer les générateurs de Alma pour s'en servir à partir
d'eclipse (c à d. faire un plug-in d'eclipse qui sache générer tout ce que
Alma sait générer), il faudrait faire une façade
com.memoire.agl autour de org.eclipse.jdt.core.dom .
Et si on veut récupérer les analyseurs syntaxiques de Alma dans eclipse, il
faut faire la façade inverse, i.e. présenter com.memoire.agl à la sauce
org.eclipse.jdt.core.dom .
Je ne sais pas si c'est facile.
Dans une université Australienne j'ai trouvé des cours sur UML, design
patterns, etc:
http://cs.anu.edu.au/student/comp2110/archive-2002/lectures/
Ma base de données botaniques avec la flore de Chine (Etat du projet Worldwide
Botanical Knowledge Base http://wwbota.free.fr/ ) tourne en ce
moment:
protea.html - Essayez-la !
10 000 espèces avec un moteur de recherche mieux que google! Il faut faire
connaître ce projet et cette technique, qui peut servir à toutes sortes de
besoins documentaires et autres.
On entre des requêtes de la forme:
nom_d_organe_ou_de_rubrique:mot_cherché_dans_cette_rubrique ...
- Pas d'espace autour de :
- Autant de critères qu'on veut, séparés par des espaces
On clique ensuite sur "Submit Query".
Exemples:
flower:yellow
flower:yellow bark:white
sepal:hairy liana:
Ceci signifie "une liane avec sépales poilus"
showy
Ceci signifie qu'on cherche le mot "showy" (voyant, spectaculaire) dans toute la description
Pour ne pas entrer au hasard les noms d'organe ou de rubrique, une liste
complète est fournie en bas de page, sous la mention:
Click on element names below ...
Il suffit de cliquer sur un de ces noms pour l'ajouter à la fin du champ de
saisie.
Pour comprendre à quoi ça sert, il faut imaginer qu'on a sous les yeux un
échantillon de plante inconnu.
Trouvé la javadoc d'eclipse (seulement version 2.0) :
http://download2.eclipse.org/downloads/documentation/2.0/html/plugins/org.eclipse.jdt.doc.isv/reference/api/index.html
Une intéressante source de données
géographiques en XML (et autres):
http://dbis.informatik.uni-goettingen.de/Mondial/
Mon premier essai avec USB-storage sur Linux :
/sbin/lsusb mkdir -m 777 /mnt/usb /sbin/modprobe usb-storage mount -t vfat /dev/sda1 /mnt/usb
Avec un noyau 2.6 c'est :
mount -t vfat /dev/sde1 /mnt/usb/
Hier j'étais à la toujours intéressante soirée Carrefour des possibles de la FING (Fondation Internet Nouvelle Generation). J'ai remarqué:
Agora, une divergence du projet Spip, pour les besoins de sites du premier ministre
Dolphian
Sensoria inFluo, malheureusement une technologie totalement propriétaire
Naviplan dryade.net
je recherche un hebergeur accedant l'execution de servlet java. J'en ai trouvé un qui propose un hebergement avec jre coté serveur.; Est ce suffisant pour executer des servlet?
Vincent Brabant wrote:
JeeP a écrit :
y a www.mycgiserver.com
juste que 'We're currently not accepting new users.'
Je m'étais inscrit il y a un an ou 2. C'était
des pionniers de l'hébergement mutualisé Java, et je crois que c'est encore
une denrée rare.
Beaucoup de FAI Français ne savent pas mieux faire, pour supporter Java, que
de proposer une lame, c à dire un serveur physiquement distinct.
Mais mycgiserver ne proposait que 5 Mo par utilisateur, et rien pour supporter
le format war. Pour faire tourner ma base de données botanique avec Cocoon et
eXist c'était vraiment juste ...
Je serais vous, j'irais voir Webwork, alias HMVC :
http://freshmeat.net/projects/webwork/
Bien sûr il n'a pas la notoriété de Struts. Mais c'est quelque chose de
propre et Orienté objet, sans toute la lourdeur de Struts.
C'est aussi un "framework" pour applications Web J2EE. Il est tellement propre
qu'il en est flexible, et il supporte des vues multiples, c'est à dire qu'on
peut brancher ces différentes technologies: HTML, Swing, PDF, XSLT, Applet, et
Velocity, sans changer la logique applicative.
Alfsalim wrote:
Bonjour
Je souhaite realiser une application web (servlet- jsp) en MVC2 , y'a t-il
des exemples d'appli ou de modele afin de me baser dessus.
Comment est réaliser le Controleur ? ca consisite juste a faire des if et
des else suivant la requete reçu ?
Question sur news:fr.comp.developpement :
Je viens après la bataille, et en + c'est pour proposer un bouquin :-( payant
:-(
Mais il est très intéressant parce que ce sont des études de cas très
variées.
Ca se lit comme des nouvelles policières, car on propose une conception, puis
on la démolit, puis une 2ème, une 3ème. Et à chaque fois la solution
paraît bien.
Ca peut ouvrir l'esprit sur la phase d'analyse des objets "métier". UML n'est
qu'un langage graphique, mais là on parle de conception. Et l'intérêt d'UML
c'est de fournir un niveau d'abstraction + élevé que les classes.
# titre. UML par la pratique
# auteur: Pascal Roques
# editeur: Eyrolles
# isbn: 2-212-09280-6
Le 01/29/2004 09:37 AM, Lsom a écrit :
> Connaissez vous un bon tutorial UML, c'est à dire, idéalement pour moi
:
> - en francais
> - qui montre concrètement à quoi sert UML. Sans doute avec des petits
exemples
> - qui donne une vue d'ensemble sans entrer dans les moindres
détails
Question sur news:fr.comp.developpement :
je suis passionnée d'infos, j'interviens plus dans le dépannage, j'ai
des notions de html!!!! mais comme j'aimerais élargir mes connaissances
j'aimerais me lancer dans la programmation!
Je suis un programmeur Java, qui donne aussi des formations.
Et je peux dire que Java n'est pas forcément LE language pour des débutants
complets. Ou alors il faut utiliser une approche totalement originale, http://BlueJ.org un environnement d'apprentissage
de Java fait par plusieurs enseignants, et de préférence le livre en
Français de Barnes et Kölling qui va avec.
On a raison de dire que la programmation, c'est plus complexe que d'écrire des
pages Web.
Mon conseil, c'est tout simplement de commencer avec JavaScript. Il y a un
petit environnement agréable avec Mozilla, et une abondante littérature.
Après, il sera temps de passer à des langages qui n'ont pas la limitation de
tourner essentiellement sur un navigateur (essentiellement mais pas
uniquement), comme PHP, Java, Phyton, voire Perl.
L'avantage de Javascript pour un débutant, c'est son typage faible.
Pas besoin d'écrire:
int mavariable = 3;
pour dire que c'est un entier, comme en Java/C/C++ , il suffit d'écrire :
mavariable = 3;
Bien sûr, ce qui est un avantage pour un débutant, est un inconvénient par
la suite. Mais il faut commencer par des choses simples.
PMD (http://pmd.sourceforge.net/)
je le recommande car il permet de tester le code par rapport à des règles.
Les règles en XML sont configurables. En plus il a la fonctionalité unique de
lister tous les bouts de code qui ont été copiés-collés.
L'outil que j'utilise pour tester en batch l'IHM, sans avoir à cliquer c'est
Abbot (http://abbot.sourceforge.net/).
Je vais essayer d'installer des moteurs de discussion et de gestion de projet
.
Omondo je n'ai pas encore fait tourner. Quand j'ai besoin de concevoir en UML
et de générer du code, j'utilise ArgoUML ouPoseidon, mais je fais pas de
round-trip engineering. Pour "déchiffrer" la conception d'un logiciel inconnu,
j'utilise une combinaison de eclipse (bien mais un peu lent, pas assez
graphique) de SourceNavigator et de BlueJ (excellent pour afficher graphiquement les
relations de dépendance, très rapide).
Je peaufine mon offre commerciale:
http://jmvanel.free.fr/conseil.html
Je lis le journal de Laurent Bossavit :
http://bossavit.com/thoughts/
Je me remets à ma base botanique. Il y a des contacts à ce sujet ...
Ce soir je vais au Carrefour des possibles de la fing .
J'envisage d'aller au FOSDEM à Bruxelles le
21 et 22.
Je me penche sur l'architecture de eXist la
base XML mono-développeur ...
FAQ/Astuces pour Mozilla et Netscape 7
Comment changer d'encodage un fichier :
iconv -f utf-8 -t iso-8859-1 signature.txt > signature-accents.txt
Il y a aussi jv-convert pour les fichiers Java.
Un site très intéressant sur la "vie
artificielle" :
http://www.rennard.org/
J'ai bien apprécié l'applet montrant des algorithmes génétiques appliqués
à des "biomorphes", qui ressemblent pas mal à des plantes.
Il y a avait beaucoup de monde au Salon Solutions Linux. Et même un stand
Microsoft ! J'ai découvert le projet LibreSource de l'Inria, un portail à
la sourceforge mais en Java, avec des idées novatrices par rapport à CVS;
malheureusement pas encore opérationnel. Egalement au stand Inria le thème ObjectWeb, un Consortium qui monte en
puissance sur le territoire de JBoss, un match à suivre.
Et puis j'ai vu pour la première fois Richard
Stallman; je lui ai même posé une question.
Après trois jours de formation donnée à l'IRD,
où nous avons travaillé sur un projet sur sourceforge.net : http://sourceforge.net/projects/ecolosim/
, je vois qu'il est difficile d'utiliser les services CVS de sf.net pour une
formation, car les mises à jour se font 1/2 heure après chaque versionnement
(commit), quand le site CVS n'est pas carrément inactif. Mon prochain projet
sera sur Savannah; il y a certainement
moins de monde, et je sais que le projet de la plate-forme Savannah, issu de
sf.net, évolue plus vite.
Le journal de la formation: http://jmvanel.free.fr/java/formation-5jours/README.html
Le programme des prochaines versions d'eclipse:
Friday February 13, 2004 - Milestone 7 (3.0 M7) - stable build reflecting progress
Friday March 26, 2004 - Milestone 8 (3.0 M8) - stable build
reflecting progress
Friday May 7, 2004 - Milestone 9 (3.0 M9) - stable build -
feature complete - development freeze - lock down and testing begins
The
3.0 release is targeted for June 2004. All release deliverables will be
available for download as soon as the release has been tested and validated in
the target operating configurations listed below.
Utilisé Source-Navigator 5.2b1, c'est bien plus rapide que eclipse pour naviguer dans le source, comme son nom l'indique. Il fait C, C++, Java, Tcl, [incr tcl], FORTRAN, COBOL, et assembleur! C'est écrit en C et TCL/Tk (une autre façon d'écrire des IHM portables), et grâce à ça, il tourne sur Unix, Windows ou Mac.
Je suis tombé par hasard sur l'Institut des
Sciences Cognitives (des Lyonnais aussi!). Il ont un "ATLAS SEMANTIQUE"
de la langue Française.
Dans mon projet Worldwide Botanical Knowledge Base (http://wwbota.free.fr/) j'utilise WordNet dans une analyse sémantique
grossière des descriptions botaniques. Et je n'ai rien en Français.
Donc je leur pose la question. Votre base est-elle disponible en tant que
bibliothèque de sous-programmes pour un projet non lucratif comme le mien?
De plus à un autre titre leur applet qui dessine des diagrammes ensemblistes
de Venn est quelque chose que je cherche depuis longtemps pour pouvoir représenter avec
un diagramme ensembliste les résultats d'une requête sur notre base de
données botanique. Y aurait-il moyen de partager le code ?
Je regarde des demo applet de vie
artificielle sur un site
Japonais spécialisé avec des dizaines d'applets .
appletviewer
http://ai.unime.it/~gp/english/clustering_applet/elbg_demo_applet.htm
&
La recette pour télécharger sur le site sourceforge.net :
rsync --rsh=/usr/bin/ssh --recursive --times --stats --progress * \ jmvanel@shell.sourceforge.net:/home/groups/e/ec/ecolosim/htdocs
On peut aussi avoir un shell en faisant :
ssh -X jmvanel@shell.sourceforge.net
Je remplis la base CVS :
# cd /home/jmv/ird-import # ls ecolosim # cvs -d:ext:jmvanel@cvs.sf.net:/cvsroot/ecolosim \ import -m "Initial import." src jmvanel start
Le contenu de mon répertoire ecolosim apparaîtra donc comme src/ecolosim
dans la base CVS du projet EcoloSim.
Les infos de base pour utiliser les services d'hébergement Web, bases de
données et shell de sourceforge.net :
https://sourceforge.net/project/admin/prweb.php?group_id=99483
Toutes les docs. utilisateur et développeur de sf.net sont là (appuyer sur
GO) :
https://sourceforge.net/docman/index.php?group_id=1
Mon troisième projet sur sf.net !!!!!!!!!!!!!! http://sourceforge.net/projects/ecolosim/
EcoloSim is a Simulation Framework for simple spatial
models in biology and ecology, in Java. Typical problems are behavior of a herd
of cattle, growth of microbe cells and other populations.
Je cherche un nom pour le projet à créer pour l'IRD sur sourceforge... Avec les ingrédients suivants que je cherche sur le Net:
simeco ecology simulation: RIEN avec ces trois, mais le nom est largement pris
ecosim ecology simulation: idem
simAgent : 246 réponses
simuAgent : 3 réponses
ecoAgent : 39 réponses
ecoloSim: RIEN
Une intéressante présentation Canadienne (Française) sur le sujet:
Multi-Agents Systems, Simulation & Soccer Server
NACSE - Northwest Alliance for
Computational Science and Engineering : Ecological
Simulation
Suite à une demande de formation d'un organisme
public dont je tairais charitablement le nom, j'ai regardé comment faire du
JavaScript côté serveur, sans IIS et ASP. A la grande époque de
Netscape, c'est leur cheval de bataille, avoir le même langage côté serveur
et côté navigateur (maintenant iPlanet Netscape Enterprise Server 4.0). Cela
avait une cohérence qui, encore maintenant, n'est pas dans les moeurs. Mais on
sait comment Microsoft a contre-attaqué. Je suis donc allé voir là où moi
qui suis en peu Java-centrique, je n'avais pas encore été, i.e. la liste de
TOUS les modules Apache:
http://modules.apache.org/search
Il y en a quand même 303! Il y a PHP, mod_perl, mod_python et même des
langages plus confidentiels comme mod_ocaml , mod_ruby, mod_scheme. On
trouve des trucs assez exotiques comme steganography, mod_topicmaps (web service interface to topic maps) . La plus grande partie
est encore pour Apache 1.3.x, et non Apache 2.x . Au milieu de tout ça, il y a
Whitebeam, qui se dit "XML based rapid design environment for dynamic web content",
mais sur son site on voit qu'il intègre le moteur JavaScript en C de Mozilla,
SpiderMonkey. Il y
a aussi Rhino (aussi du projet Mozilla), écrit en Java, qui doit être
facilement intégrable dans un moteur de servlets, quoique je n'ai pas trouvé
de référence là-dessus.
Terminé une version de BeanPeeler - Generic JavaBean editor .
Il est temps de se mettre à rsync; même si les disques ne coûtent pas cher, il faut gérer bien ses données:
rsync --verbose --progress --stats --compress \ --rsh=/usr/bin/ssh --recursive --times --perms --links \ --update 10.0.0.246:wwbota.free.fr perso/
J'avance dans le développement d'un éditeur JavaBean générique ( voir
ici une copie d'écran de l'éditeur
JavaBean ). Le source est (pour l'instant) ici :
http://jmvanel.free.fr/java/formation-5jours/jmvanel/beans/
Je suis parti d'un bout de code de 1999 d'un programmeur (scientifique lui
aussi ) nommé John David Taylor. Or, récemment, il a mis ce BeanPeeler sur sourceforge !
J'installe le dernier sourcenavigator, et audacity-1.0.0-2.i386.rpm .
J'essaye d'utiliser alma pour traduire du vulgaire Java en Eiffel. Je lui mets (dans alma) mon build.xml à tout faire. Et voilà les résultat de mes traductions de Java en Eiffel avec alma.
Il y a le dernier ant 1.6. Je le télécharge. Pendant que j'y suis, je fais une petite page ant pour abriter mon build.xml à tout faire.
Je relis la dernière version de "Conception et Programmation orientées Objet", qui avait été mon chemin de Damas en 1995. Du coup j'installe Eiffel, et j'ajoute des tests avec Eiffel dans Java performance compared to C++.
Aujourd'hui, un peu de commercial; j'ai demandé
à paraître dans l'Annuaire des
professionnels du logiciel libre. Ce n'est pas si simple, mon résumé n'a
pas paru assez logiciel libre du point de vue du modérateur :
Je ne peux pas vous intégrer à l'annuaire avec cette présentation.
Elle ne met pas en avant les logiciels libres. De même que votre site et votre
CV.
L'annuaire est pour les professionnels travaillant sur les logiciels libres,
pas avec des logiciels libres.
A suivre ...
J'adhère à root66 , association de loi 1901 basée dans les Yvelines. Elle a pour but de faire découvrir les logiciels libres au public, ainsi que d'aider toute personne ayant des difficultés dans ce domaine. ça me ferait plaisir de connaître d'autres partisans du logiciel libre près de chez moi, et bien sûr de partager mes connaissances.
J'ai regardé :
Swarm, un environnement de simulation, en Objective-C hélas;
NomicMac, un Logiciel libre de gestion comptable pour les entreprises personnelles, en Pascal, qui tourne dans une fenêtre console sur Windows ou Linux, et qui existe depuis 15 ans
OBM , une solution de gestion de la relation client de la société Aliacom
Je dialogue avec l'équipe de raptor, qui fait un éditeur (pas assez) générique de Javabeans (voir essai raptor ici).
J'ai résolu un problème d'impression avec Linux (voir dans notes en Anglais : Printer problem with RedHat Fedora and HP PSC 750 ). Encore un problème d'IHM trompeuse ! Après un coup comme ça, je suis prêt à passer à Debian !
Je regarde le projet Cormas du Cirad, basé sur un paradigme multi-agents. C'est open-source, basé sur une version non open-source de SmallTalk mais gratuite. Voici un intéressant diagramme UML de Cormas . J'ai téléchargé tout ça. Pas très simple déjà, au moins trois trucs pour Smalltalk, puis Cormas. Je n'ai pas vu de vraie documentation de conception, apparemment ils préfèrent faire des formations ... Y-a-t-il seulement le source Smalltalk du framework? Oui, il y a dans Kernel/ un gros fichier de 36 000 lignes et 1.1Mo; peut-être qu'en SmallTalk on peut pas faire autrement ?
Par rapport a .NET est-ce que java fera le poids dans les années à
venir? Ou est ce que cette technologie est vouée à disparaître ?
>>>guichon
>>mauvaise année les trolls
>
> Ah bon ? pourtant la question me semble légitime
> et intéressante, d'un point de vue technologique et commercial.
Il y a des problèmes avec Java, qui sont:
liés à son statut propriétaire, par exemple Java met 0.5 secondes à démarrer contre 0.03 pour Perl (si le source de la machine virtuelle était libre ce serait corrigé, ainsi que pas mal de problèmes)
liés aux limitations actuelles de la techno. Orientée Objet, qu'on cherche à compléter de tous les côtés (programmation Orientée Aspect, Design Patterns, etc)
lié à des choix technologiques de Sun (par exemple les Enterprise Java Beans que je considère plutôt bidouille)
Il y a aussi un mouvement pro-.NET dans le libre que j'avoue mal comprendre
(cf l'éditorial de Linux Magazine de janvier).
Le problème dans les projets concrets avec la moyenne des développeurs avec
Java est que les choses simples ne sont pas assez simples par rapport à PHP ou
Perl. Je le vois bien quand je donne des formations (exemple les chaînes et
les fichiers). Peut-être .NET améliore-t-il cet aspect. Les gens veulent
avoir très rapidement qqchose qui marche. Ils ne voient pas que la conception
(y compris rétro-conception à la XP) est importante.
Il est certain que l'utilisation d'eclipse rend les choses plus faciles, de
même que les nouveautés attendues de Java 1.5.
Mon sentiment est que Sun va finir par mettre la techno. Java en open source ou
en LGPL. Mais Java est devenu qqchose de trop gros et il y a trop d'intérêts
en jeu pour que ce soit facile à gérer. Clairement maintenant Sun n'a pas les
moyens de développer Java aussi vite et aussi bien qu'il faut à lui tout
seul; il ne faut plus qu'il soit seul. Et il y a un effort de simplification,
d'épuration à faire comme j'écrivais plus haut, par exemple pouvoir
distinguer les méthodes principales (primitives) des autres, qui sont des
facilités (helpers) ou des alias avec des arguments différents.
Essayé anjuta , un Environnement de développement Intégré (IDE) C++ pour Linux. Assez ergonomique, avec son repliement de blocs, et sa complétion. Je crois que si j'avais à écrire du C++, je le préférerais à KDevelop (en attendant eclipse/CDT qui n'avance pas vite).
Dans ma longue quête d'éditeur générique JavaBean, j'ai essayé:
raptor : un bon canditat, mais semble trop compliqué pour personnaliser les formulaires par défaut. La version 0.2 ne prend pas en compte les propriétés indicées (exception IllegalArgumentException). Mais les propriétés numériques sont bien prises en compte dans les formulaires. essai raptor ici
J'ai commencé une présentation sur le logiciel libre (au format OpenOffice), à destination des décideurs.
Je serai le jeudi 22 janvier à la réunion
mensuelle à étincelles :
http://sparklingpoint.xmlfr.org/networkg.html#LPI
Cette fois ce sera Antoine Quint du W3C qui parlera de SVG.
Retour de vacances, pas de contrat proche, c'est le moment de mettre à jour mes outils de travail. Je viens d'installer Fedora (disponible en ce moment chez les marchands de journaux) par-dessus RedHat 9.0 . Ça marche très bien, c'est un peu Redhat 9.1 beta . Également j'ai un nouvel écran Iiyama 1600x1200 19', et une carte GeForce 4 de chez Palit.com.tw . Enfin je peux avoir une fenêtre confortable avec eclipse ! Par contre c'est toujours un vieux processeur 500MHz avec une carte-mère Soltek . A ce propos, j'ai fait des mesures de performances pour comparer Java (avec une JVM ou compilé avec gcj) avec C++ .
Très intéressante, cette page des téléchargements
les plus populaires sur sourceforge ! Bien sûr, les plus répandus ne
sont pas les plus intéressants du point de vue de l'informaticien. De plus,
maints projets sont ailleurs que sur SF.NET (apache.org, gnu.org, redhat.com ),
sont inclus dans les distributions Linux, ou sont téléchargeables ailleurs
comme sur download.com .
Signe des temps, le premier, et de loin, est eMule, un partage de fichiers en
licence GPL et C++, mais sur Windows, avec 22 millions. Ensuite on trouve
d'autres logiciels dans cette catégorie, comme CDex, VirtualDub, BitTorrent,
DC++.
Ensuite on trouve la grosse cavalerie du logiciel libre: Dev-C++ (remplace
Visual Studio), le moteur J2EE JBoss, phpMyAdmin, le serveur de discussions
phpBB. Avec Dev-C++ on est redescendu à 4 millions mais quand même!
Je remarque que, à part JBoss, le premier représentant du monde Java est
l'environnement de développement jEdit , en position
33; il est certainement surclassé maintenant par le raz-de-marée eclipse . On
voit par contre plein de choses en PHP. JUnit est quand même 88ème
avec près de 600 000 téléchargements, ça fait plaisir.
Je viens de terminer 7 jours de formation à l'Institut de Recherche pour le Développement (IRD) sur Java. En sus d'une formation normale, je les ai aidés à concevoir une architecture réutilisable pour simulation. On a généralisé la notion de modèle, qui sait se calculer, qui représente un être vivant qui se déplace en 2D. Le modèle au premier niveau est un ensemble de modèles élémentaires, pouvant être e.g. un troupeau d'herbivores ou des microbes. On a deux modèles: un modèle avec marche aléatoire, et un modèle grégaire très simple. On a une notion d'afficheur qui fait une exploitation des résultats en temps réel. On a deux afficheurs:
animation en temps réel (image nuage de points colorés, très joli!)
sortie sur fichier pour tableur
Le javadoc est ici:
http://jmvanel.free.fr/java/formation-5jours/doc/
,
et le source y est
aussi.
Ma précédente mission, d'avril à décembre 2003, a été la réalisation d'une IHM pour un environnement de simulation en électronique, incluant le développement d'un adapteur XML pour la bibliothèque JGraph (affichage et édition de modèles définis en termes de noeuds et de liens). Cette mission, au sein d'une équipe de 13 personnes dont 8 développeurs, a été très riche humainement et techniquement.
J'ai installé le démon sshd sur les machines Windows XP des enfants (ça marche aussi sur Win2000). La première fois il faut taper sous Cygwin:
/usr/bin/ssh-host-config
Ensuite le service se lance avec:
net start /usr/sbin/sshd
Sur Windows XP ça n'a pas fonctionné d'être installé comme service Windows, on le lance à la main. Ainsi j'ai le même protocole d'un bout à l'autre de mon réseau local, et c'est sécurisé. Pour le transfert de fichiers, en ligne de commande c'est sftp, en IHM c'est gftp ou FileZilla sur Windows. Et ssh -X permet de faire tourner sur la machine distante des programmes X-Window qui s'affichent sur la machine locale, toujours sécurisé.
L'information sous forme XML c'est comme les sucres rapides: c'est de
l'information hautement digestible.
A partir d'XML on peut toujours générer de l'information sous forme
dégradée: présentation HTML, commandes SQL, IHM, code source, configuration
progiciel, etc.
Il y a plein de puissance de traitement inutilisée dans nos ordinateurs.
Et ce n'est pas centré sur l'utilisateur. Chaque chose qu'il fait doit être
enregistrée, analysée, restituée intelligemment. Au niveau zéro chaque site
que nous cliquons est gardé dans un historique, et un éditeur de texte garde
trace des derniers fichiers édités. Mais nous voulons bien plus. Garder trace
des modification passées dans ces fichiers édités. Corréler des
évènements dans des programmes distincts, par exemple recevoir un certain
type de courrier conduit à éditer un certain document, etc.
Toujours pour exploiter la puissance de traitement inutilisée, prenons le cas
d'un épouilleur ( ;-) debugger). A un point d'arrêt il devrait pouvoir
anticiper et montrer le cheminement à venir.
ça fait longtemps que je voulais l'essayer. zsh
complète TOUT, pas seulement les noms de fichiers, mais aussi les options des
commandes. Le seul petit ennui est que RedHat et Cygwin ne configurent pas
d'office le produit. Pour bénéficier des services de zsh, juste ajouter ceci
dans $HOME/.zshrc
autoload -U compinit
compinit
Et maintenant, si on tape:
ls -
puis tabulation, toutes les options apparaissent avec leur noms et
résumés. Presque plus besoin de taper man !
Pour avoir une invite de commande décente comme:
jmv@protea:/home/jmv/install/savannah/#
j'ai ajouté ceci dans $HOME/.zshrc :
export PS1='%n@%m:%d# '
-
Il est amusant qu'au
moment où je passe à zsh, j'essaie en même temps un shell 100% Java : Beanshell . Pour moi la finalité
est avant tout d'avoir une machine virtuelle Java (JVM) toujours prête sans
avoir à subir quelques secondes de démarrage pour lancer un petit utilitaire
tel qu'une transformation XSLT. Il faut donc avant tout avoir l'équivalent des
commandes:
java -jar monjar.jar arg1
java -cp dir:malib.jar MaClasse arg1
Si en plus il y a des fonctionnalité de shell: complétion, variables, etc, et
une IHM tant mieux. On va voir que BeanShell et JSH font ça de façon assez
différente. Commençons par BeanShell; on définit la commande shell de base
pour le lancer:
cd $HOME/distribs
ln -s bsh-2.0b1.jar bsh.jar
echo 'java -jar $HOME/distribs/bsh.jar $*' >
~/bin/beanshell
chmod u+x ~/bin/beanshell
Maintenant je peux taper ceci dans beanshell pour lancer une transformation
XSLT:
addClassPath ("/home/jmv/install/saxon7/saxon7.jar"); import net.sf.saxon.*; args = new String[2]; site = "http://wwbota.free.fr/XSLT_models/"; args[0] = site + "testHREF.xml"; args[1] = site + "attributes2elements.xslt"; Transform.main(args);
On voit qu'il y a un support assez complet du langage java en interactif. Par contre il n'y a aucun support particulier pour lancer une méthode main(). D'ailleurs si je ne crée pas les deux éléments du tableau arg, je récolte ceci :
addClassPath ("/home/jmv/install/saxon7/saxon7.jar"); import net.sf.saxon.*; args = new String[2]; Transform.main(args);
java.lang.NullPointerException
at net.sf.saxon.Transform.doMain(Transform.java:97)
at net.sf.saxon.Transform.main(Transform.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at bsh.Reflect.invokeOnMethod(Reflect.java:149)
at bsh.Reflect.invokeStaticMethod(Reflect.java:100)
at bsh.Name.invokeMethod(Name.java:872)
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:72)
at
bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at
bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.Interpreter.run(Interpreter.java:460)
at java.lang.Thread.run(Thread.java:534)
Fatal error during transformation: null
Un manque de robustesse (de Saxon mais surtout de BeanShell) fatal à ma JVM!
On voit ici que BeanShell ne récupère pas les exceptions et s'arête trop
facilement. Il ne récupère pas non plus les appels à System.exit() !
La même transformation XSLT se joue ainsi dans JSH :
set classpath =
/home/jmv/install/saxon7/saxon7.jar
net.sf.saxon.Transform
http://wwbota.free.fr/XSLT_models/testHREF.xml
http://wwbota.free.fr/XSLT_models/attributes2elements.xslt
On note un vrai support pour lancer une méthode main(). Un autre point positif
est que JSH récupère les exceptions et les appels à System.exit() . Par
contre l'aspect shell est limité. Les variables d'environnement ne marchent
pas. Et il n'y a pas moyen de rediriger la sortie standard (heureusement dans
le cas de Saxon XSLT je peux utiliser l'argument -o).
Les shell Java sont un domaine assez foisonnant, où aucun outil n'a acquis
une position dominante. BeanShell est bien établi (inclus dans Ant par
exemple), mais EN PRATIQUE il lui manque des choses essentielles.
Echidna (réutilisé par JSH)
est là aussi depuis longtemps, mais il n'évolue plus. Dommage, car il a une
architecture client-serveur intéressante. En effet on peut utiliser son
shell de tous les jours (zsh, bash ou ce qu'on veut). Il y a un petit protocole
qui permet, grâce à telnet (présent dans tous les shells dignes de ce nom)
de dire au serveur Echidna quelle classe lancer avec quels arguments. On peut
contrôler dynamiquement le CLASSPATH d'Echidna. Malheureusement le serveur
Echidna ne reçoit pas le répertoire courant et les variables d'environnement;
il faut donc donner tous les chemins de fichiers en absolu. Mais quand même,
taper
javae MaClasse arg
au lieu de:
java MaClasse arg
dans son shell de tous les jours c'est l'idéal car les shells Java ne peuvent
pas de sitôt rivaliser avec les shells classiques. Beanshell aussi a un mode
serveur (HTTP et telnet). Il faut faire attention à la sécurité et limiter
l'accès à localhost; un serveur ssh serait idéal.
Tous ces outils de shell ne savent pas démarrer un jar avec la classe
principale déclarée dans son manifeste.
Ca fait des années que je cherche une
alternative à Access. La combinaison de openoffice.org et MySQL paraît très
naturelle. Hélas ça ne marche pas "sorti de la boîte" sur RedHat 9. Je ne me
décourage pas, il y justement un HOWTO (pour OO 1.0 cependant):
http://www.unixodbc.org/doc/OOoMySQL.pdf
A suivre ..
Mon projet d'un environnement de développement d'application autour de graphes et de XQuery commence à ressembler à quelque chose. Il y a même une mini-architecture de composants/plugins à la eclipse, ce serait d'ailleurs un bon sujet d'article. Si seulement mon client était prêt à mettre ceci en opensource ! Ca ferait une bonne plate-forme qui concurencerait par certains cotés XML Spy et Stylus Studio, mais c'est aussi et surtout un cadre (framework) pour construire toutes sortes d'application métier où les données se présentent bien sous forme de graphes.
Je suis partisan de la biodiversité, et le clonage biologique ne me plaît pas. Mais en informatique il n'en est pas de même. Dans cet article voici le pourquoi et le comment du clonage en Java: Attack of the clones .
J'ai tendance à penser que l'architecture EJB est un peu bricolage. On
passe par des générateurs de code. En plus la cible ce sont les base
relationnelles classiques. Les concepts orientés objet sont subtils mais très
puissants, et il a fallu des années à la communauté des développeurs pour
les assimiler (et encore ...). Et maintenant on explique que ça ne suffit pas,
il faut ajouter de la génération de code, de la configuration en XML, un
concept de "bac à sable" pour l'exécution. Toute cette complexité a un but
bien clair, qui est de pouvoir ajouter des aspects permission, sécurité,
transaction, persistance, répartition de charge, etc, sans impacter les
classes métier. Heureusement il y a des alternatives, notamment la
"programmation orientée Aspect". Justement un article dans Dr Dobb's Journal
d'août 2003 est intitulé "Lightweight Aspect-Oriented Programming". Il
indique 4 approches différentes pour ajouter des "aspects" à une classe
existante.
Essayé sans succès ces mots de recherche: "J2EE EJB architecture versus
pure object oriented"
Comme je me suis occupé de graphes ces derniers mois, ça a réactivé une vision que j'avais depuis longtemps: celle de composants logiciels (classes par exemple) comme des atomes munis de valences. Une valence c'est un type de retour, ou un type d'argument d'une méthode. Les atomes (ici les classes) s'accrochent par leurs valences, et cela fait des modécules. Ici les molécules sont des graphes d'appel. Bien sûr (hélas) ce n'est pas aussi simple. Un argument String n'a pas du tout la même sémantique suivant qu'il s'agit d'un URL, d'une chaîne XPath ou d'une chaîne à rechercher dans un texte. La solution à ça, c'est d'utiliser des classes, comme URL, qui ont une sémantique bien précise tout en encapsulant une chaîne. Ma vision initiale c'était quelque chose d'auto-constructif. Mélangeons des molécules dans un becher, agitons et voyons ce qui en sort.
Maintenant je vois les possibilités de visualisation de la structure de graphe des appels potentiels, grâce à des algorithmes génériques de positionnement (layout). On peut par exemple se donner une classe de départ et avancer par élargissement par niveaux successifs, etc récursivement. Et enfin le plus grandiose pour la fin: en appliquant des algorithmes de recherche de chemins, on pourrait automatiser pas mal de code "de jointure", autrement dit la plomberie. Par exemple si j'ai un résultat de requête SQL, et je veux un objet XML (org.w3c.dom.Node), ET si j'ai déjà dans ma base de classes ce qu'il faut, je pourrais générer la plomberie qui va bien. Ca pourrait être un chouette additif à Eclipse! Et si j'ai pas déjà dans ma base de classes ce qu'il faut, je pourrais demander à un service Web (à construire ce service Web!) ...
Un peu d'Anglais pour changer ...
J'ai envoyé ceci au développeur de chez Sun qui fait JFluid, un outil de mesure
de performances.
I tried your tool, it's useful. I was not able to put the output listing
in the clipboard (on Linux).
And I regret that it's not open source.
Following are some ideas about an XML output for a debugger that I wrote
months ago,
and that can also be applied to your tool.
_________________________________
My use case:
It would be cool to be able to generate an UML sequence diagram out of a
debugger session. In fact it is complicated because not every event is
interesting; typically we want to be able to trace only a few classes or
objects.
UML sequence diagrams generated out of code (e.g. by UML IDE's) also tend to
have too many calls.
There are also a lot of uses of a Program execution recorder:
* profiling
* coverage study
* other metrics ...
How can it be as flexible and light-weight as possible ? It's simple: by
outputing nothing by itself, just issuing Sax events. This way, it is left to
the debug front-end to branch a ContentHandler for a specific use, or just save
the XML in a file for later processing, by XSLT for example. Here is a sample
of the XML I imagine :
<instruction line="12">
<call function="justTheFunctionName">
<args>
<this id="122" class="actualCompleteClassName"
name="myArgumentNameAsSpecifiedInFunctionDeclaration"
type="myInterfaceOrAncestorClassAsSpecifiedInFunctionDeclaration"
variable="myVariableAsSpecifiedInInstruction"/>
<arg id="123" class="" name="" type="" variable=""/>
<arg value="333" name="" type="int" variable=""/>
</args>
<!-- possibly instructions here .... -->
<return id="124" class="" formal="" variable=""/>
</call>
</instruction>
<instruction line="13" /> <!-- simple assign -->
______________________________
So all you have to do, Mikhail, is to give the user 3 choices:
1. - no XML output
2. - XML output in standard output
3. - XML output using user implementation of org.xml.sax.ContentHandler
2 and 3 are implemented the same way, except that in 2 the ContentHandler is an
XMLSerializer.
You just have to make calls such as :
_contentHandler.startElement("", "call", "call", attributes );
_contentHandler.startElement("", "args", "args", null );
etc ...
Comme ces derniers mois j'ai utilisé une machine assez puissante, j'ai
utilisé eclipse pas mal. J'ai surtout aprécié l'aspect base de
données et requêtes sur le source (et les bibliothèques), ainsi que la
restucturation (refactoring), et bien sûr le marquage en direct de toutes les
erreurs Java (avec les suggestions de correction). Depuis un mois il y a les
graphes d'appel, mais c'est trop lent.
Ca ne m'empêche pas de regarder jEdit, qui a une quantité impressionnante
d'additifs (plugins). Et puis jEdit n'est pas suspect d'avoir divergé
(fork) dans le domaine des IHM Java, ce qui est le cas de eclipse avec son
SWT, pour des raisons peu claires.
Je profite de mes instants libres, au milieu d'un projet très prennant,
pour regarder les techniques et les projets. Pour l'instant je regarde quel
parti on peut tirer de l'architecture JavaBeans (cf jGuru ).
Je veux aussi comprendre en profondeur XQuery; il me semble que son principal
avantage (sur XSLT) est d'être typé. Je ne prends pas comme un inconvénient
d'être un langage fonctionnel comme ML, CAML et XSLT, car cela peut favoriser
une programmation plus sûre et prouvable. Par contre on ne peut pas faire du
polymorphisme sur le type XML Schema; aparemment on ne peut même pas y
accéder. On peut écrire une fonction qui prend en argument un type XML Schema
précis, mais qu'arrive-t-il si l'argument ne correspond pas à
l'exécution?
Je regarde aussi les API DOM3. Xerces en implémente
certaines, notamment la validation en temps réel, mais la spec. DOM3
Validation, idéale pour un éditeur de document, ne semble implémentée par
personne ... En tous cas il faut signaler à la JVM qu'on utilise une API DOM
plus avanccée que celle par défaut grâce à la system property
java.endorsed.dirs :
java -D
java.endorsed.dirs=répertoire-install-xerces/build/dom3-xml-apis.jar
En liaison avec ça je promeus mon interface XMLEditor , qui vise à rendre un éditeur XML
aussi facile à intégrer dans une IHM qu'un bouton.
Je regarde aussi les outils de collaboration pour un projet de développement
[question posée dans new:fr.comp.developpement ]
Je participe à un projet de développement en simulation, avec du C++,
du Java, du Perl, du XML+XPath+XSLT, etc ...
Nous sommes 8 personnes + 2 ou 3 "commerciaux".
Il n'y a pas d'infrastructure de communication/documentation.
Il y a Clear Case pour le versionnement des sources, un peu lourd ...
Le besoin que je ressens:
- forums de discussions, avec des liens si possible bidirectionnels avec les
délivrables, sources, specs, conception (UML), retro-documentation (Javadoc,
Doxygen)
- gestion des tâches ( liens idem + liaison avec versionnement: telle mise à
jour CVS correspond à l'accomplissement d'une tache)
- gestion des anomalies (encore liens + liaison CVS)
- moteur de recherche avec mots-clés sur tout le contenu, y compris base CVS:
les modifs de telle période sur tel répertoire avec tels mots dans le
libellé ou dans la modif
- peut-être visualisation de l'arborescence des documents et de leurs liens
- pouvoir assurer la traçabilité entre besoins <--> conception
<--> implémentation, et les discussions alentour, peut-être avec un
identifiant unique du cas d'utilisation figurant dans conception et
implémentation
Il y a :
- TikiWiki (http://sourceforge.net/projects/tikiwiki/),
qui n'est pas dédié développement
- plusieurs choses en cherchant sf.net avec TOUS les mots:
"software development management"
- http://maven.apache.org/ : ça a l'air
d'un truc assez lourd qui s'occupe trop
de build et pas assez de communication
- sourceforge, en version à déployer (rappel: notre projet n'est pas open
source )
* assez bon pour les forums et les tâches, mais pas beaucoup de liens,
et quelle est la facilité de déploiement?
- CVSWeb: uniquement vue de l'arborescence des répertoires (pas par dates ou
par auteur), OK pour les diffs, mais pas de requêtes
Des idées et retours d'expériences?
Voir ici les développements de ces idées : collabCode
Comme je vais commencer jeudi un projet d'une IHM pour un environnement de simulation électronique, je teste des environnements de développement. Pour un test en vraie grandeur, je prends eXist bien sûr, où je voudrais ajouter l'intersection de deux ResultSet, et l'accès à la liste des mots d'une requête XPath avec le nombre d'occurences. Pour l'instant je suis confortable avec Eclipse. J'aprécie son intégration avec CVS, et bien sûr le soulignement et les suggestions pour les erreurs. J'aprécie moins qu'on ne puisse récupérer un répertoire de travail CVS déjà téléchargé, et l'obligation de tout copier dans le projet courant eclipse quand on importe un système de fichier (j'apréciais le concept de système de fichier de NetBeans, moins intrusif). Et puis quelle consommation de resources! Y'a pas photo au point de vue ressources entre Eclipse et Source-Navigator (hyper):
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 23124 jmv 15 0 166M 65M 5300 S 0,0 20,8 13:26 java 783 root 5 -10 41724 30M 2752 S < 4,3 9,7 1355m X 30129 jmv 15 020456 19M 14848 S 0,0 6,3 0:41 konqueror 30175 jmv 15 019240 18M 2508 S 0,0 6,0 0:35 hyper
Je suis tombé sur Source-Navigator par hasard chez
RedHat, en cherchant autre chose. C'est une IHM d'apparence un peu rustique
mais quelles fonctionalités de navigation! Quelle rapidité! Pour appréhender
rapidement un gros volume de code (Java C C++ ou même Fortran je ne vois rien
de mieux. Autrement j'utilisaisDoxygen ou Xref-Java2Html , des outils qui créent
un site HTML statique (donc que des hyperliens prédéfinis, pas de requêtes),
et un outil UML (Poseidon), trop lourd et
pas bon en navigation (pas d'accès aux ancêtres, descendants, et associations
à partir d'une classe dans le diagramme).
Au passage je vois dans eXist deux classes qui ont été faites l'une à partir
de l'autre (ResourceSetImpl et LocalResourceSet). Il faudrait créer un
ancêtre commun. Donc je cherche des outils de restructuration de code
(refactoring): Mozart, freefactor , RefactorIt, ... Pour
l'instant je ne trouve rien pour faire ceci au niveau de la classe. Extraire un
passage et le promouvoir en une méthode et l'appeler à cet endroit, ça
marche avec Eclipse.
Par contre j'ai trouvé un outil de diagnostic sans pareil: PMD + CDP (Copy Paste Detector ). Le
premier rapporte des manquements à des règles en XML: Basic, Naming, Unused
Code, Design, Import Statements, JUnit Tests, Strings, Braces, Code Size and
produit des rapports en XML ou HTML (voir exemples de rapports PMD et
CPD). Le deuxième, c'est encore plus fort, sort la liste de tous les bouts
code dupliqués plus grands qu'une certaine taille.
Dans mon Linux Mag j'ai vu l'apparition de SAP DB. Je ne sais pas si
c'est vraiment mieux que MySQL et PostGreSQL, mais on voit que le relationnel
devient une commodité gratuite. Ca va tout à fait dans le sens de l'histoire.
SAP fait la part du feu en gardant pour la vente son PGI (Progiciel de Gestion
Intégrée). C'est l'étape à laquelle on assiste maintenant dans le
développement du Logiciel Libre: il devient hégénomique dans le logiciel de
base. Mais je prévois que bientôt le logiciel métier sera investi, en
commençant par ce qui est le plus générique. La frontière entre le libre et
le licencié va devenir de plus en plus mouvante et subtile.
Maintenant que je suis admis comme développeur de eXist, j'ai maintenant trois
projets sur sourceforge.net. Hourra !
Hier à Technoforum j'ai vu une démo. de Office X11 par Jean Paoli, le
grand chef XML chez Microsoft. Un fois de plus, Microsoft a fait un beau cheval
de Troie pour pénétrer l'entreprise. Il a fait ce que les autres éditeurs
ont gardé sur un marché de niche cher.
En gros, une secrétaire va pouvoir éditer en suivant un XML Schema dans son
Word familier.
Et côté libre, qu'y a-t-il ? Rien d'approchant, à ma connaissance. Mais qu'y
a-t-il comme projet?
Le bon côté de la chose, c'est le libre va pouvoir s'appuyer, comme il l'a
déjà fait, sur ce travail de spécification pour faire mieux. Et il pourrait
le faire plus efficacement, car eux ont eu à patcher une vieille base de code.
Mais combien de temps cela va-t-il prendre ? En attendant, OpenOffice et autres
AbiWord prennent un coup de vieux.
Ce qui est intéressant aussi, c'est que Microsoft se donne maintenant la
coquetterie de suivre les standards, en l'occurence ceux du W3C. Fort de ses $,
et peut-être grâce à certaines clauses du procès de l'administration
Américaine, il se permet une concurrence moins déloyale. Mais quand on est à
ce niveau de fonctionalités (et donc de dépenses en développement), c'est
simple, il n'y a que le libre qui puisse suivre.
Quand à moi j'ai plein d'idées (et pas beaucoup de $ -:( ) sur ce que pourra
être un éditeur XML voir:
http://wwbota.free.fr/editor-spec.htm
http://wwbota.free.fr/XMLinside.htm
Ajouté à ça le concept ZIP (Zoom Interface Paradigm, http://humane.sourceforge.net/humane_interface/hollands_review.html
),
et nous aurons quelque de plus puissant que Office X11.
Enfin! Vu sur exist-open@lists.sourceforge.net :
"I played a little bit with xupdate from the cvs. It works realy fine."
En fait je vais peut-être faire carrément des infidélités à XSLT!
Stefano Mazzocchi publie aujourd'hui sur la liste cocoon-dev@xml.apache.org : "STX could seriously
replace XSLT on the server side". STX serait mieux adapté au traitement SAX de
Cocoon. Il semble que la vision des auteurs de XSLT (et avant de DSSSL) d'un
langage fonctionnel, avec des variables immuables, et qui donc facilite un
re-parcours optimisé du traitement quand les données changent, ne passe pas.
Dommage! En tous cas je compte bientôt utiliser un autre langage fonctionnel,
CAML, pour faire du XML.
J'ai mis au propre ma formation Cocoon.
J'essaye pour la première fois xsltproc sur Linux:
xsltproc style.xslt
*.xml
Ca marche bien, et il n'y a pas besoin de lancer une machine virtuelle pour ça
! Je vais peut-être faire des infidélités à Saxon !
Je mets à jour ma bibliothèque de
transformations XSLT. Il faudrait des mode=
partout pour être bien modulaire, justement. J'aime bien ces outils qui
se valident les uns les autres: à partir d'une instance XML, je fais un XML
Schema, puis je valide l'instance avec le Schema généré.
A cette occasion, je me rends compte que XSLT et XML Schema ne marchent pas
parfaitement ensemble. Par exemple, si l'instance XML contient <ns:e>, je ne peux pas dans le XML Schema
généré mettre directement <xsd:element
name="ns:e">.
XSLT et XSD sont des techniques bien faites, prises à part. Mais il n'y a pas
de vision d'ensemble au W3C, parce qu'il n'y a pas de visionnaire. Il y a bien
Tim Berners-Lee, mais il pense surtout au Web Sémantique. A apache.org, c'est
à peu près la même chose. Il faudrait des visionnaires qui veillent à la
cohérence d'ensemble des concepts, à l'orthogonalité.
Voilà ce que j'ai répondu sur news:fr.comp.text.xml ; ça n'était sans
doute pas ce qu'il voulait -:) :
Effectivement, la combinaison de plusieurs outils apporte presque autant de
XMLSpy. En outre je n'ai pas confiance dans la qualité de la validation de
XMLSpy, qui s'arrête à la première erreur comme un mauvais compilateur.
Comme éditeur, j'utilise Pollo, une application Java, qui présente des bandes
colorées dépliables - repliables, le glisser-déposer, exploite les DTD et
XML Schemas, et permet des requêtes XPath.
Comme éditeur de console, j'utilise gvim, qui fait une excellente coloration
syntaxique.
Autrement je fais tout en ligne de commande, de la même façon sous Linux ou
sous Windows:
- HTML TIDY pour convertir du HTML de Office en HXTML
- saxon pour mes transformations XSLT
- xmllint pour valider une instance XML (sous Windows grâce à Cygwin)
- Xerces ou XSV pour valider par rapport à un XML Schema
Castor permet (en ligne de commande) de:
- convertir une DTD en XML Schema
- obtenir un XML Schema à partir d'une instance XML
- générer des classes Java à partir d'un XML Schema (et la bibliothèque
pour convertir instance Java<==> instance XML)
Maitenant pour l'aspect conception graphique de Schema/DTD, je ferais ceci si
j'en avais besoin pour un projet. Je créerais des classes dans un éditeur UML
(Unified Modeling Language); c'est très convivial avec Poseidon/argoUML, on
peut faire sa mise en page alors que XMLSpy peut pas. Ensuite, je génèrerais
les classes Java. Enfin il y a deux solutions pour générer du XML Schema à
partir des classes Java:
- introspecter les classes récursivement, et créer un complexType pour chaque
classe
- faire une transformation XSLT qui prend le fichier UML au format XMI (c'est
du XML) et le traduit en XML Schema; l'avantage est que c'est plus direct, mais
c'est sûrement plus difficile, le format XMI n'est pas simple
Voir:
Principales_sources_technologiques.htm
metadonnee.html
R. Vigon wrote:
Bonjour,
Connaitriez-vous un equivalent gratuit (ou encore mieux, libre) de XMLSpy (http://www.xmlspy.com) qui tourne sous
windows ?
QUESTIONS Cocoon :
comment choisir dynamiquement la transformation XSLT avec Cocoon ?
est-ce que le processeur XSP ne devrait pas plutôt être un transformeur qu'un générateur ? Cela permettrait de refaire une passe de logique applicative au milieu d'un pipeline, à la place des actions. De toute façon, je ne comprends pas encore très bien les actions. Cela permettrait aussi de générer du code Java et de le compiler dynamiquement (cas d'utilisation: un serveur qui implémente un algo. d'optimisation et où on entre la fonction à optimiser)
Idée: faire des pages Cocoon qui affichent le résultat de un ou plusieurs
valideurs XML Schémas (voir http://jmvanel.free.fr/xsd/valid-sitemap.txt).
Si mes formations Cocoon2 , Perl , et
le projet WWBKB me laissent un peu de temps, j'ai de grands projets sur la métadonnée :
écrire un module XSLT pour lire un XML Schema, et plusieurs écriveurs (back-ends) pour générer: documentation avec hyperliens, instances XML, formulaires etc (déjà des choses qui marchent dans XSLT transforms library );
réfléchir avec J.J. Thomasson sur la correspondance entre XML Schema et UML, et dans la foulée écrire un module XSLT lecteur de XMI, avec plusieurs écriveurs; cela permettra d'utiliser Poseidon (ou autre éditeur UML) pour créer des Schemas XML
dessiner (peut-être avec JGraph) un diagramme ensembliste que j'ai sur le papier qui montre les traductions possibles entre instances Java et XML, Schemas XML, XMI et IHM, sous forme d'application entre ensembles; à propos de JGraph je vois qu'il y a du répondant sur JGraph à ma question;
continuer l'enquête sur les outils pour appréhender rapidement un gros volume de code: sur l'exemple de alma j'ai essayé Doxygen (pas très utile), il faut voir le résultat de Xref-Java2Html; Poseidon importe org.w3c et org.xml assez rapidement et fait une mise en page acceptable, mais que ferait-il sur Alma avec mon 800MHz ?
continuer l'enquête (ou la quête!) pour trouver ou créer une bibliothèque réutilisable de conceptions UML pour l'informatique de gestion. Ca me servirait pour le prochain contrat de développement off-shore.
J'ai commencé à écrire une méthodologie
de développement XSLT. Il faudrait continuer, et insister sur les modes
pour la modularité.
J'ai trouvé l'implémentation WSDL que je cherchais, c'est Apache WSIF (Web Services Invocation
Framework) .
J'ai installé le logiciel de calcul formel Maxima .
C'est amusant de le retrouver 20 ans après, avec un bel habillage, des pages
HTML étendu pour lancer les calculs, un traceur de courbes, et c'est GPL!
C'est l'ancêtre de Maple et Cie.
Pour ne pas polluer mon block-note avec des choses trop techniques, je
commence aujourd'hui ce block-note informatique. Il y aura plein d'opinions, de
découvertes, d'espoirs, d'inquiétudes.
J'ai installé Sodipodi, un éditeur SVG. Une IHM de bonne facture, avec des
sous-palettes dépliables-repliables comme Rational XP. Je vais l'utiliser
concuremment avec Amaya, c'est bien d'avoir plusieurs éditeurs, surtout pour
un format émergeant.
Je viens de lire le didacticiel de Cyril Vidal sur Soap. L'architecture Apache
Soap a l'air vraiment lourde. Je n'ai pas trouvé d'implémentation WSDL dans
freshmeat, il doit y avoir qqchose chez Sun.
Dans la famille des ponts XML-objets en Java, je demande ... skaringa.
J'ai compilé skaringa avec junit.jar et log4J.jar .
C'est le seul outil que je connais qui fait un XML Schema à partir d'une
classe. Mais le format XML généré est spécial, différent de Castor.
De plus un utilisateur se plaint d'une récursion infinie dans le cas d'objets
ayant des références circulaires. Je sais que JSX le fait bien, Castor je ne
sais pas.
Il faut lire le nouveau document Sun, qui s'appelle XML Bind, il y a une
implémentation de référence. Castor, skaringa, JSX font chacun les choses à
leur façon, il faut tester un cas avec un graphe d'objets avec tous ces
frameworks.
Jbind à est voir: cela ressemble à l'architecture Simeo que j'ai faite
pour Oxand :
http://jbind.sourceforge.net/