Après la découverte de Java 3D pour mieux afficher des puits de potentiel en maillage fil de fer
http://sylvainspeh.blogspot.fr/2012/10/application-numerique-concernant-les.html
ce qui peut amener à cette représentation pilotable à la souris dont les pentes sont gérées en dégradé de couleurs afin d'améliorer le rendu :
une nouvelle application de java 3D : un petit jeu de déplacement dans un labyrinthe, avec la carte des mouvements et l'orientation du "personnage".
Là, pas encore question d'égaler les prouesses d'un certain plombier ;) ou d'une célèbre aventurière , il s'agit de simplement se déplacer dans un univers bordé par des murs, déplacer la caméra représentant l'observateur ce genre de choses.
Il y a encore du travail à faire pour ressembler à Wolfenstein 3D ( le premier du genre, cf. ci dessous ),
mais avec relativement peu de code, il y a moyen de faire des choses intéressantes afin d'utiliser quelques possibilités offertes par cette api.
La gestion des déplacements se fait au clavier. Je suis preneur d'informations concernant la gestion des joystick en java.
quelques liens :
http://rvirtual.free.fr/programmation/java3d/intro.html
http://www.eteks.com/coursjava/java3D.html
jeudi 31 janvier 2013
dimanche 28 octobre 2012
application numérique concernant les points de Lagrange
Connaissez-vous les points de Lagrange ?
Ces points au nombre de 5 sont des points spatiaux permettant à des objets célestes "ponctuels" d'être en orbite "stable" par rapport à 2 corps massifs de référence. Les plus connus étant les astéroïdes troyens croisant au niveau de l'orbite de Jupiter.http://fr.wikipedia.org/wiki/Point_de_Lagrange et http://fr.wikipedia.org/wiki/Ast%C3%A9ro%C3%AFde_troyen
La méthode de calcul retenue http://ressources.univ-lemans.fr/AccesLibre/UM/Pedago/physique/02/divers/lagrange.html et http://ressources.univ-lemans.fr/AccesLibre/UM/Pedago/physique/02/divers/lagrange.pdf permet d'afficher dans une page web les positions desdits points pour des rapports de masse de 2 à 25.
Généralisons le problème, et faisons afficher sur une même image générée par un programme java :
- en jaune, les 2 points de référence ( le Soleil et la Terre par exemple, dont le rapport de masse vaut 3.10^5 )
- en magenta, les 5 points de Lagrange
- en niveau de gris, les niveaux d'énergie potentielle en unités arbitraires ( plus c'est foncé, plus c'est négatif, et moins c'est stable )
- la plus forte masse se situe au centre de l'image, la moins forte à droite.
Ce qui donne, pour des rapport de masses de 3*10^5, 100, 25 et 1 les représentations suivantes :
Pour 3*10^5
Un point de Lagrange est confondu avec la Terre sur l'imagePour 100
Pour 50
Pour 25
Pour 1
la représentation est bien symétriqueaméliorations possibles
Il ne reste plus qu'à trouver un moyen de représenter ces informations en 3D afin de bien voir que les 3 points alignés avec les 2 astres sont bien des points instables, contrairement aux 2 points situés de part et d'autre de l'axe des X.Une petite application en java3D a été conçu a cet effet, qui reproduit le modèle en 3D. Voici une copie d'écran représentant les puits de potentiel en 3 dimensions pour un rapport de masse de 25 représenté ci-avant en 2D. Les zones stables n'ont pas encore été représentées..
Exemples d'autres représentations possibles :
http://sciences-physiques.ac-dijon.fr/astronomie/lexique/lexique_astro/l/images/puits_potentiel.gif
et pour le système Terre-Lune :
http://i.space.com/images/i/15157/i02/earth-moon-lagrange-points.jpg?1328752769
samedi 8 septembre 2012
Rétro-conception de Design Patterns java
Objectif
être capable de retrouver des Design Patterns éprouvés dans des classes Java.Intérêt
Même si de nos jours les outils de rétro-conception savent très bien passer de classes java à des diagrammes UML, un pas supplémentaire peut être fait en retrouvant les Design Patterns noyés anonymement dans des schémas. Un niveau d'abstraction supplémentaire serait donc le bienvenu.Bonnet blanc et blanc bonnet
Il existe en fait de nombreuses façons de concevoir ces Design Patterns, avec des variantes mineures, qui font tout le charme des algorithmes visant à retrouver les 3 types de DP ( construction, structuration, comportement ). Un groupe connu sous le nom de "bande des quatre" ( Gang of four en Anglais ) est cité sur le site de SUN comme étant le premier à s'être penché sur le problème.Cependant, l'expérience a prouvé que les concepteurs de SUN n'avaient pas toujours suivi ces bonnes pratiques standard.
Cas du Pattern "Singleton"
Il nécessite :- un constructeur privé
- une méthode d'instance
- un attribut d'instance
Cas déjà traités
- Singleton
- Proxy ( avec variantes )
- Observateur
Pour approfondir le sujet
- page concernant la bande des quatre : http://www.javacamp.org/designPattern/
- autre page, en français : http://rpouiller.developpez.com/tutoriel/java/design-patterns-gang-of-four/?page=page_1
vendredi 7 septembre 2012
Que le PST soit avec vous
Introduction
Qui n’a jamais eu envie ou besoin
de retrouver de vieux mails dans une vieille sauvegarde d’un fichier PST ?
Pas vraiment de pages en français
sur le sujet, voici un petit développement fait rapidement afin de pouvoir
faire quelques traitements … et le faire partager.
Possibilités
- Lire des fichiers PST ( anciens ou récents, en sauvegarde ou pas ).
- Retrouver les noms complets ( les « noms de contact » ) des correspondants
- Retrouver des mails avec quelques critères « from », « to », « keyword(s) », etc.
- Comparer 2 PST afin de trouver les mails disparus
- Rechercher des mails écrits très tôt, voire très tardivement
- recopier les mails dans une base de données
- Pas mal de possibilités basées sur une petite API plutôt bien faite.
Exemple d’utilisation : recherche de mail améliorée
- Afin de pallier certains limitations de client de messagerie bien connu, proposer une solution java gratuite et personnalisable.
- A partir d’une fenêtre de saisie, rechercher et afficher un résumé puis les mails correspondants aux critères de recherches.
- Critères : « from », « to », « mot(s) clef(s) », « pas from », « pas to », voire d’autres.
- Résultat : afficher une page web comportant un résumé des mails recherchés, puis les mails eux-mêmes.
Résultat par l’exemple
( désolé, mais c’est censuré )
Voici pour la boîte de recherche.
Voilà pour le résultat. En haut figure un résumé, tous les mots clefs trouvés figurent ici mis en valeur avec une balise html ( strong en l'occurence ).Pour aller plus loin :
- Projet : https://github.com/rjohnsondev/java-libpst
- Jar : http://code.google.com/p/java-libpst/downloads/list
- Exemples : http://code.google.com/p/java-libpst/
- Api : voir le zip des sources
vendredi 25 novembre 2011
minus et cortex ... cérébral
Décidément "Cerveau & Psycho" me plaît beaucoup.
Le volume 48 de novembre-décembre 2011 parle de comment rendre dominé dominant et inversement.
Comment faire ?
Comment faire ?
Plutôt simple : stimuler les décharges des neurones pyramidaux du cortex pré frontal pour rendre une souris dominante en 12 heures.
L'effet est réversible par l'injection d'un virus pour activer ou bien d'une molécule spécifique pour inhiber.
Par contre, l'article n'indique pas si le résultat est permanent ou pas.
Dans l'introduction de l'article on peut lire que les dominants sont des leaders qui prennent et imposent leurs décisions et ... se réservent leurs partenaires sexuels.
Toute connotation avec les frasques médiatiques de certaines personnes, françaises ou italiennes, pourrait s'expliquer. Mais l'article ne parle pas de castration chimique nouvelle génération.
Mais ... Des souris ou des hommes, qui s'en sort le mieux ?
Libellés :
dominants et dominés,
sciences cognitives
dimanche 23 octobre 2011
plan de test multi-langages depuis Java
Problématique
Voici quelques mois, un collègue me demanda si la conception d'un plan des tests était facile.
Bien évidemment, il y a plein d'outils pour gérer des tests unitaires et des plans de tests, JUnit en tête ( et même via Ant :D )
Le soucis résidait au fait qu'il fallait lancer des scripts qui lancent d'autres scripts. Ce sont ceux-là qu'il fallait gérer. Plus tard, l'intégration dans une interface graphique devint nécessaire.
Moins trivial que cela donc, il fallait concevoir un outil. Quelques nuits passées sur le sujet, à essayer de gérer les codes retours rendus par l'invite DOS me persuadèrent de la difficulté. Les nuits portent conseils, ceux-ci furent pourtant long à venir.
Il a bon DOS celui-là
Vous trouverez sur Internet de nombreux conseils sur comment récupérer les codes retours du DOS. Malheureusement, la situation n'est pas universelle suivant les versions de Windows. Pas mal de recherches dans un navigateur ne sont pas forcément valables.
Chose étonnante, si lé récupération du code DOS est erratique en Java, la récupération d'un code Python et autre informations est d'une conformité confondante aux standards Java. Encore une enigme microsoftienne de plus.
Voici ci-après quelques copies d'écran concernant les développements en cours.
Rassembler le patchwork applicatif
Les développements étant encore en phase d'ébauche, je ne donnerai pas plus d'informations concernant cet n-ième outil. La seule chose que je puisse affirmer, c'est qu'il fonctionne très bien ;) Reste à le rendre ergonomique.
Voici quelques mois, un collègue me demanda si la conception d'un plan des tests était facile.
Bien évidemment, il y a plein d'outils pour gérer des tests unitaires et des plans de tests, JUnit en tête ( et même via Ant :D )
Le soucis résidait au fait qu'il fallait lancer des scripts qui lancent d'autres scripts. Ce sont ceux-là qu'il fallait gérer. Plus tard, l'intégration dans une interface graphique devint nécessaire.
Moins trivial que cela donc, il fallait concevoir un outil. Quelques nuits passées sur le sujet, à essayer de gérer les codes retours rendus par l'invite DOS me persuadèrent de la difficulté. Les nuits portent conseils, ceux-ci furent pourtant long à venir.
Il a bon DOS celui-là
Vous trouverez sur Internet de nombreux conseils sur comment récupérer les codes retours du DOS. Malheureusement, la situation n'est pas universelle suivant les versions de Windows. Pas mal de recherches dans un navigateur ne sont pas forcément valables.
Chose étonnante, si lé récupération du code DOS est erratique en Java, la récupération d'un code Python et autre informations est d'une conformité confondante aux standards Java. Encore une enigme microsoftienne de plus.
Voici ci-après quelques copies d'écran concernant les développements en cours.
Rassembler le patchwork applicatif
- l'interface graphique attendue avec les fonctionnalités de création, modification, exécution, suppression et historique des plans de tests.
- les traitements sur les plans de tests
- la création des tests unitaires successifs, conditionnés
- l'affichage des historiques grâce aux fonctions java 6 natives.
Les développements étant encore en phase d'ébauche, je ne donnerai pas plus d'informations concernant cet n-ième outil. La seule chose que je puisse affirmer, c'est qu'il fonctionne très bien ;) Reste à le rendre ergonomique.
vendredi 3 juin 2011
Les Get Setteurs ne sont pas classe
Etes-vous déjà retrouvés face à un graphe UML qui est compliqué du fait de la présence des méthodes getter et Setter des attributs privés ? Cela vient de m'arriver en manipulant une archive War. Le graphe serait tellement plus simple sans les méthodes dédiées.
// -------------------------------------------
void manageGetSet() {
int f;
int m;
Field fi[] = {};
try {
fi = c.getDeclaredFields();
} catch (Error e) {
}
for (f = 0; f < fi.length; f++) {
boolean hasGet = false;
boolean hasSet = false;
String nomChamp = fi[f].getName();
String nomChampGet = "get" + nomChamp.toUpperCase().substring(0, 1)
+ nomChamp.substring(1);
String nomChampSet = "set" + nomChamp.toUpperCase().substring(0, 1)
+ nomChamp.substring(1);
Method mi[] = {};
try {
mi = c.getDeclaredMethods();
} catch (Error e) {
}
for (m = 0; m < mi.length; m++) {
String methodName = mi[m].getName();
if (methodName.compareTo(nomChampGet) == 0) {
hasGet = true;
}
if (methodName.compareTo(nomChampSet) == 0) {
hasSet = true;
}
}
if (hasSet && hasGet) {
vGetSetFields.add(nomChamp);
vGetSetMethods.add(nomChampGet);
vGetSetMethods.add(nomChampSet);
} else
if (hasGet) {
vGetSeulFields.add(nomChamp);
vGetSeulMethods.add(nomChampGet);
}
}
}
// -------------------------------------------
Le premier schéma indique le modèle sans distinguer getter et setter, le deuxième permet quant à lui de les distinguer.
Guetter les getter et sauter les setter
Une petite verrue pour recenser les attributs et méthodes dédiées devrait faire l'affaire pour éviter de trop modifier mon générateur basé sur Graphviz. Mais en réalité, c'est plus complexe que cela.// -------------------------------------------
void manageGetSet() {
int f;
int m;
Field fi[] = {};
try {
fi = c.getDeclaredFields();
} catch (Error e) {
}
for (f = 0; f < fi.length; f++) {
boolean hasGet = false;
boolean hasSet = false;
String nomChamp = fi[f].getName();
String nomChampGet = "get" + nomChamp.toUpperCase().substring(0, 1)
+ nomChamp.substring(1);
String nomChampSet = "set" + nomChamp.toUpperCase().substring(0, 1)
+ nomChamp.substring(1);
Method mi[] = {};
try {
mi = c.getDeclaredMethods();
} catch (Error e) {
}
for (m = 0; m < mi.length; m++) {
String methodName = mi[m].getName();
if (methodName.compareTo(nomChampGet) == 0) {
hasGet = true;
}
if (methodName.compareTo(nomChampSet) == 0) {
hasSet = true;
}
}
if (hasSet && hasGet) {
vGetSetFields.add(nomChamp);
vGetSetMethods.add(nomChampGet);
vGetSetMethods.add(nomChampSet);
} else
if (hasGet) {
vGetSeulFields.add(nomChamp);
vGetSeulMethods.add(nomChampGet);
}
}
}
// -------------------------------------------
Tester
Voici un exemple tiré des showcase de Primefaces.Le premier schéma indique le modèle sans distinguer getter et setter, le deuxième permet quant à lui de les distinguer.
- Version brute
- version améliorée
Petit constat
- le jaune n'est pas généré par Graphviz, - pas encore trouvé comment faire - il permet juste de visualiser les différences notables.
- deux blocs supplémentaires figurent sur le graphe, un bloc "get set" tout en haut, un bloc "get seul" juste en dessous. Les blocs vides ont été noircis.
- c'est améliorable, surtout quand la manipulation des couleurs sera possible dans les records Graphviz.
- le graphe est plus compact, il le serait moins si le graphe ne contenait pas des beans java.
- vérifier la faisabilité avec yED.
Liens
- une page issue des showcase de Primefaces : http://www.primefaces.org/showcase/ui/lineChart.jsf
Inscription à :
Articles (Atom)










