TuxDroid Java API - Nouveautés de la 0.5
Le 1 novembre 2007, à 2:44 par Anonymous...

Voilà, c'est fait, l'API passe à la version .5 au passage pour un support à 99% des fonctions du Tux. Le tout est embarqué dans un nouveau tuxlet manager, une application qui réside dans la boite de miniatures pour héberger des tuxlets, des micros applications qui ajoutent des fonctionnalités au pingouin.

Change-Log

  • TuxletManager .2 with a brand news swing/GTK UI.
  • Tuxlet API
  • Feed Reader Tuxlet. It car read as many feed as you want using a specific voice.
  • Clock Tuxlet
  • Light seeker Tuxlet
  • Weather Tuxlet
  • Full binding of any thuxlet action to any remote button/Switch
  • Binding of any tuxlet action to a new scheduler (at time, every time, each time events)
  • Light graph tuxlet

Donc finalement, une deuxième API se trouve embarquée dans cette histoire, celle des tuxlets. Rien de bien sorcier là dedans mais un moyen pour qui connaît java, de faire fonctionner le tux avec des fonctions très haut niveau et de bénéficier en même temps de l'API de base du robot.

Pour décrire rapidement l'ensemble, le tuxlet manager est donc un conteneur de tuxlet qui sont basiquement des plugins (.jar) qui se pose dans le dossier ./tuxlets. Un plugin peut contenir autant de tuxlets que voulu. Le dépôt peut être fait à chaud, le manager les installera/désinstallera automatiquement (un peu comme une webapp).

Une tuxlet par définition publie vers le tuxlet manager un ensemble d'actions haut niveau qui vont pouvoir être utilisées de divers manière (voir plus loin le configurateur et dbus).

Une fois que la tuxlet est installée, son icône se place dans la barre à tuxlets offrant un click-droit pour énumérer l'ensemble des actions que la tuxlet met à disposition. Le click gauche déclenche quant à lui l'action par défaut de la tuxlet.

Si la tuxlet n'a rien à afficher, la partie centrale de l'IHM sert de zone de message permettant d'avoir un retour visuel sur ce qu'à pu dire le Tux. Les messages peuvent être agrandis par un click.

La configuration d'une tuxlet si elle existe, est disponible, comme toutes ses actions, via le menu click-droit. De même pour les informations de version.

Il y a pour l'heure les tuxlets :

  • "horloge" qui dit betement l'heure
  • "météo" qui donne les conditions actuelles et les prévisions du lendemain
  • "lecteur de flux rss" qui va, via son panneau de configuration, vous permettre d'ajouter des flux RSS ou Atom, leur titre, le nombre de news à lire et s'il faut en lire le contenu ou seulement les titres. Il est aussi possible de changer la voix du tux spécifiquement pour cette tuxlet.
  • "chercheur de lumière", une simple tuxlet d'exemple qui fait tourner le tux sur lui même à la recherche de la plus forte source lumineuse.
  • "Configurateur", une grosse tuxlet qui permet de configurer la voix, les sons internes, d'afficher les informations de version, et le graphique di capteur lumineux.
    Elle permet aussi de gérer le binding des touches de la télécommande OU d'un switch du Tux vers n'importe quelle action de n'importe quelle tuxlet (par exemple assigne la touche 0 à la météo).
    Enfin, il y a maintenant un programmateur d'événement (genre de cron) qui peut être configuré ici aussi permettant de lancer n'importe quelle action de n'importe quelle tuxlet à une heure donnée, sur un intervalle de temps donnée, sur un temps donné (à 11h 12h 13h etc..).
  • "Mouvements", une tuxlet très simple qui permet de contrôler tous les mouvements du tux et qui exporte des actions du type "tourner à gauche", "tourner à droite", etc...

Enfin, dernière chose ajoutée au tuxlet manager, le support de DBUS lui donnant ainsi la capacité de pouvoir lancer des actions de l'extérieur (ex. un message parlé à l'arrivée d'un contact sous Gaim ou Kopete). Un script d'exemple est fournit dans le dossier ./bin

Voilà pour cette version. Tout cela est bien évidement instable et à tester. Je ne pourrais être tenu responsable si le tux part en vrille Wink


Commentaires

Sonny, le 1 November, 2007 - 00:46

Woah j'ai pas encore testé, je fais ça ce soir.
J'ai hâte!

jaguarondi, le 2 November, 2007 - 17:59

Salut Ulhume,
Je viens de télécharger ton manager. Ca se lance, il se connecte aux 2 démons, puis rien d'autre. Faut faire autre chose pour lancer l'interface graphique? Voici ce que j'ai:

  1. 1    Connector           > Connecting to tuxd [localhost:5000]
  2. 2    Connector           > Connecting to ttstuxd [localhost:5500]
  3. 278  Connector           > Client connected to tuxd
  4. 281  Connector           > Client connected to ttstuxd
  5. 342  Folder Watcher      > Searching 'author' in XML nodes
  6. 343  Folder Watcher      >    Found property 'author' of type 'Developer'
  7. 395  Folder Watcher      > Searching 'email' in XML nodes
  8. 396  Folder Watcher      >    Found property 'email' of type 'String'
  9. 396  Folder Watcher      > Searching 'organization' in XML nodes
  10. 396  Folder Watcher      >    Found property 'organization' of type 'String'
  11. 396  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  12. 397  Folder Watcher      > No value found for 'organizationUrl' in xml
  13. 439  Folder Watcher      > Searching 'name' in XML nodes
  14. 440  Folder Watcher      >    Found property 'name' of type 'String'
  15. 451  Folder Watcher      > Searching 'version' in XML nodes
  16. 461  Folder Watcher      >    Found property 'version' of type 'String'
  17. 461  Folder Watcher      > Searching 'name' in XML nodes
  18. 461  Folder Watcher      >    Found property 'name' of type 'String'
  19. 462  Folder Watcher      > Searching 'description' in XML nodes
  20. 462  Folder Watcher      >    Found property 'description' of type 'String'
  21. 462  Folder Watcher      > Searching 'author' in XML nodes
  22. 462  Folder Watcher      >    Found property 'author' of type 'Developer'
  23. 462  Folder Watcher      > Searching 'email' in XML nodes
  24. 462  Folder Watcher      >    Found property 'email' of type 'String'
  25. 462  Folder Watcher      > Searching 'organization' in XML nodes
  26. 462  Folder Watcher      >    Found property 'organization' of type 'String'
  27. 462  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  28. 462  Folder Watcher      > No value found for 'organizationUrl' in xml
  29. 462  Folder Watcher      > Searching 'name' in XML nodes
  30. 463  Folder Watcher      >    Found property 'name' of type 'String'
  31. 463  Folder Watcher      > Searching 'version' in XML nodes
  32. 463  Folder Watcher      >    Found property 'version' of type 'String'
  33. 463  Folder Watcher      > Searching 'name' in XML nodes
  34. 463  Folder Watcher      >    Found property 'name' of type 'String'
  35. 463  Folder Watcher      > Searching 'description' in XML nodes
  36. 463  Folder Watcher      >    Found property 'description' of type 'String'
  37. 463  Folder Watcher      > Searching 'author' in XML nodes
  38. 463  Folder Watcher      >    Found property 'author' of type 'Developer'
  39. 463  Folder Watcher      > Searching 'email' in XML nodes
  40. 463  Folder Watcher      >    Found property 'email' of type 'String'
  41. 464  Folder Watcher      > Searching 'organization' in XML nodes
  42. 464  Folder Watcher      >    Found property 'organization' of type 'String'
  43. 464  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  44. 464  Folder Watcher      > No value found for 'organizationUrl' in xml
  45. 464  Folder Watcher      > Searching 'name' in XML nodes
  46. 464  Folder Watcher      >    Found property 'name' of type 'String'
  47. 464  Folder Watcher      > Searching 'version' in XML nodes
  48. 464  Folder Watcher      >    Found property 'version' of type 'String'
  49. 464  Folder Watcher      > Searching 'name' in XML nodes
  50. 464  Folder Watcher      >    Found property 'name' of type 'String'
  51. 464  Folder Watcher      > Searching 'description' in XML nodes
  52. 464  Folder Watcher      >    Found property 'description' of type 'String'
  53. 465  Folder Watcher      > Searching 'author' in XML nodes
  54. 465  Folder Watcher      >    Found property 'author' of type 'Developer'
  55. 465  Folder Watcher      > Searching 'email' in XML nodes
  56. 465  Folder Watcher      >    Found property 'email' of type 'String'
  57. 465  Folder Watcher      > Searching 'organization' in XML nodes
  58. 465  Folder Watcher      >    Found property 'organization' of type 'String'
  59. 465  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  60. 465  Folder Watcher      > No value found for 'organizationUrl' in xml
  61. 465  Folder Watcher      > Searching 'name' in XML nodes
  62. 465  Folder Watcher      >    Found property 'name' of type 'String'
  63. 465  Folder Watcher      > Searching 'version' in XML nodes
  64. 465  Folder Watcher      >    Found property 'version' of type 'String'
  65. 465  Folder Watcher      > Searching 'name' in XML nodes
  66. 465  Folder Watcher      >    Found property 'name' of type 'String'
  67. 465  Folder Watcher      > Searching 'description' in XML nodes
  68. 465  Folder Watcher      >    Found property 'description' of type 'String'
  69. 465  Folder Watcher      > Searching 'author' in XML nodes
  70. 465  Folder Watcher      >    Found property 'author' of type 'Developer'
  71. 466  Folder Watcher      > Searching 'email' in XML nodes
  72. 466  Folder Watcher      >    Found property 'email' of type 'String'
  73. 466  Folder Watcher      > Searching 'organization' in XML nodes
  74. 466  Folder Watcher      >    Found property 'organization' of type 'String'
  75. 466  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  76. 466  Folder Watcher      > No value found for 'organizationUrl' in xml
  77. 466  Folder Watcher      > Searching 'name' in XML nodes
  78. 466  Folder Watcher      >    Found property 'name' of type 'String'
  79. 466  Folder Watcher      > Searching 'version' in XML nodes
  80. 467  Folder Watcher      >    Found property 'version' of type 'String'
  81. 467  Folder Watcher      > Searching 'name' in XML nodes
  82. 467  Folder Watcher      >    Found property 'name' of type 'String'
  83. 467  Folder Watcher      > Searching 'description' in XML nodes
  84. 467  Folder Watcher      >    Found property 'description' of type 'String'
  85. 467  Folder Watcher      > Searching 'author' in XML nodes
  86. 467  Folder Watcher      >    Found property 'author' of type 'Developer'
  87. 467  Folder Watcher      > Searching 'email' in XML nodes
  88. 467  Folder Watcher      >    Found property 'email' of type 'String'
  89. 467  Folder Watcher      > Searching 'organization' in XML nodes
  90. 467  Folder Watcher      >    Found property 'organization' of type 'String'
  91. 467  Folder Watcher      > Searching 'organizationUrl' in XML nodes
  92. 467  Folder Watcher      > No value found for 'organizationUrl' in xml
  93. 467  Folder Watcher      > Searching 'name' in XML nodes
  94. 467  Folder Watcher      >    Found property 'name' of type 'String'
  95. 467  Folder Watcher      > Searching 'version' in XML nodes
  96. 467  Folder Watcher      >    Found property 'version' of type 'String'
  97. 467  Folder Watcher      > Searching 'name' in XML nodes
  98. 467  Folder Watcher      >    Found property 'name' of type 'String'
  99. 468  Folder Watcher      > Searching 'description' in XML nodes
  100. 468  Folder Watcher      >    Found property 'description' of type 'String'
  101. 601  Folder Watcher      > New listener added every 1 hour : Fri Nov 02 18:00:00 CET 2007
  102. 608  Folder Watcher      > Adding new tuxlet Clock
  103. 695  Folder Watcher      > Updating layout
  104. 794  Folder Watcher      > Adding new tuxlet Feeds
  105. 799  Folder Watcher      > Updating layout
  106. 860  Folder Watcher      > Adding new tuxlet Weather
  107. 882  Folder Watcher      > Updating layout
  108. 929  Folder Watcher      > Adding new tuxlet movements
  109. 934  Folder Watcher      > Updating layout
  110. 985  Folder Watcher      > Adding new tuxlet Light
  111. 1014 Folder Watcher      > Updating layout
  112. 1152 tuxd Event Worker #0> tuxd - not processed           :  02 00 05 02 01 00 00 00 00 00 00 00 00 00 00 00
  113. 1154 Folder Watcher      > Adding new tuxlet Settings
  114. 1175 Folder Watcher      > Updating layout
  115. 1676 AWT-EventQueue-0    > Updating stop
  116. 4025 Action Manager      > [5:acknoledged] is getting old : Timeout. removing from queue

(Sorry for the spam, you can delete what's not necessary in this post.)
By the way, [acknoledged] should be written acknowledge.
How can I get acces to your sources somewhere? I really would like to read them, even though I don't know Java. I recently started reading a book on design patterns, hoping to grasp some better understandings on what, heu, pourquoi j'écris en anglais moi maintenant? Donc je disais, pour bien sentir ce que l'orienté objet apportait, et comme premirère approche c'était un poil too much pour moi, mais je suis convaincu que c'est la bonne voie. Et savoir que tu utilises un de ces patterns là dedans me donne encore plus envie de voir ce que c'est Smiling
A+,
David

Ulhume, le 5 November, 2007 - 20:25

Bon, doit y avoir un truc avec Java et la boite à miniatures là. Ca fait deux personnes qui me dise "sympa, ça connecte mais j'ai pas d'IHM", vous n'avez pas un petit tux qui apparaît dans la tray ?

Sinon pour les sources, j'ai arrêté de faire des paquets pour mettre créer directement un dépot subversion publique, beaucoup plus simple à gérer. Tous les détails sont ici : http://artisan.karma-lab.net/downloads

Pour ce qui est des design patterns, généralement c'est surtout du bon sens Wink Par exemple l'API utilise le pattern "facade" qui consiste à ne travailler que par interface et à cacher l'objet qui implémente l'interface, cachant du même coup tous les détails d'implémentation. Sinon l'autre pattern est plus classique, c'est le concept d'objet worker que tu utilises déjà dans ton API python il me semble. Mis à part cela, l'IHM utilise le plus classique MVC (Model/Vue/Component) pour séparer la couche présentation, des traitements et des données manipulées. Rien de bien sorcier en somme.

Maintenant je suis pas mal intéressé sur ton retour quant à l'architecture des objets eux-même (la séparation fonctionnelle bec/ailes/etc.)

jaguarondi, le 6 November, 2007 - 12:36

Ah ben voilà, j'ai finalement pu tester tout ça Smiling. C'est super ce que tu as pu faire en si peu de temps. Ca fonctionne bien ici. Sous Gnome j'ai bien l'icône, mais pas sous xfce, je ne sais pas pourquoi.

Merci pour les sources. J'ai un peu de mal avec l'arborescence par contre. Je ne sais pas trop comment on structure les soft en fait. En tout cas ça change de l'api python qui est grosso modo un seul fichier de pratiquement 6000 lignes Wink D'ailleurs c'est pas moi l'API, j'ai juste fait le hardware, firmware et des trucs par-ci par-là. Si t'as des pointeurs vers comment structurer ses softs, ça m'intéresse.

Sinon, les design patterns, même si c'est du bon sens, c'est bien de les connaître, ça aide à rester cohérent sur l'ensemble de l'application.

Pour les status et commandes, on a eu une bonne discussion là-dessus. Je mets ça à jour sur le wiki cette semaine. Ca serait pas mal qu'après on rediscute un peu du protocole du daemon, il peut sans doute être simplifié/amélioré. Ou en ajouter un autre du genre xml-rpc. Mais j'ai toujours du mal à voir l'intérêt de xml-rpc par rapport à un socket standard, tu aurais un exemple d'application?

David

Ulhume, le 6 November, 2007 - 13:24

Merci Smiling Faut dire que j'avais déjà pas mal de choses que déja réalisé (surtout pour les feeds) que j'ai réutilisé. En tout cas content que ça fonctionne, je vais essayé de voir ce qui coince sous XFCE et afficher dans l'entretemps la fenêtre au démarrage.

En java tu structures un peu comme cela te chantes jusqu'au niveau des packages qui eux sont un mirroire de l'arborescence (la class Toto du paquet fr.tutu.toto doit être dans fr/tutu/toto/Toto.java). Après j'utilise maven qui est un outil qui permet de décrire en XML un projet et qui gère toute la drouille (génération de binaires, test, génération d'un site, etc..) et le standard maven veut que les sources java soient en src/main/java.

Pour ce qui est du protocole, l'avantage de passer par du XML est de standardisé toutes les commandes et les réponses pour avoir un seul format du genre

(je bidonne cela en 5 secondes mais on peut en rediscuter)

garf , le 22 December, 2007 - 17:36

Salut Ulhume,

Tout d'abord felicitation pour ton travail car j'ai pas franchement l'intention de me mettre au python moi non plus Wink

j'ai fait l'aquisition d'un tuxdroid
je tourne sous debian/windowmaker
donc j'ai basiquement le meme pb que ci-dessus car je n'ai pas de tray.

1/
Y aurait il moyen de s'en passer pour etre totalement autonome au niveau du gestionnaire de fenetre ?

Je suis cependant conscient de devoir installer kde oubien gnome pour le moment pour avoir un tray pour faire tourner ton appli bien cool.

J'ai aussi une erreur "Cannot Resolve Session Bus" probablement car gnome ou kde l'implemente DBUS et qu'a priori, c'est la methode choisie pour communiquer avec les applications gnome/kde.

question:
L'api tuxdroid 0.5 permet elle de developper des applis java pour tuxdroid de facon independante de l'os ( dans la mesure ou on a les daemons du droid tournent sur un linux ) ?
Mon grand souhait est le suivant: j'aimerai bien developper une application web (Tomcat) qui communiquerai avec mon tuxdroid.

Merci de tes efforts et des reponses que tu m'apporterai,

Sinceres salutations,

Garf

PS:
Autre chose, si tu ecrivais une petite doc pour ecrire des plugins/tuxlets ce serait cool.

advaya , le 22 December, 2007 - 23:53

Juste un mot pour au sujet de l'icone absente dans le systray : j'ai eu le même problème et c'était dù à Compiz-fusion que j'utilisais (sans doute est-ce le cas également pour d'autres window makers). Une fois désactivé le décorateur compiz-fusion (et une relance du serveur X il me semble), l'icone était bien à sa place dans le systray.

Ulhume, le 24 December, 2007 - 17:37

Ok, bon ben je met la fenetre en affichage par defaut pour la prochaine version Smiling

Ulhume, le 24 December, 2007 - 17:41

@Garf

Je te fais deja une reponse courte carte je suis un peu loin de mon nid. Pour faire simple, tout ce qui est graphique n'est pas l'API (DBUS compris), c'est tuxlet manager que tu peux voir comme une demo de l'API. l'API elle-meme est totalement independante de l'OS et 100% pur java, tu peux donc, sauf ereur de ma part, fair une appli tomcat avec sans problemes.

Si tu as besoin de plus d'infos n'hesites pas, je te repondrais des que je le pourrais.

leppoc , le 6 January, 2008 - 01:44

Hello !

Je viens de télécharger l'API, et d'y jeter un oeil Smiling c'est sympa, et ce que j'ai vu est assez joliment codé aussi Smiling j'aime.
Je devrai recevoir mon tux la semaine prochaine, donc je vais essayer ça tout de suite !

Une remarque, si je peux me permettre, il y a une convention pour les noms de package en java. Ils devraient être totalement en minuscule.
De manière générale, ça ne pose pas de problèmes particuliers, sauf dans certains cas. (je crois me souvenir d'un problème sous tomcat, ou un truc du genre.) (certaines version de windows ne sont pas case sensitive par exemple... ouch.) Peut-être serait-il bien de changer ça avant que trop de monde n'utilise l'API Wink
Cf http://en.wikipedia.org/wiki/Java_package: "Package names should be all lowercase characters whenever possible."

Et est-ce qu'il y a une liste des actions encore non-implémentées/implémentées ? (un grep FakeQuery devrai me suffire m'enfin Wink )
Sur ce, bonne continuation sur cette API, c'est toujours sympa d'avoir d'autres langages possibles !

Peace and Vanilla Ice Cream Smiling

leppoc.

Ulhume, le 13 January, 2008 - 15:12

Tu as parfaitement raison sur le norme, je ne m'en étais même pas rendu compte, je vais remettre cela en ordre pour la prochaine version (vive le refactoring Wink

Cristina , le 4 July, 2008 - 14:58

Hi hi!

I speak a very little little little french but correct me if I have understood it wrong, have you developed some kind of Java API for the Tux Droid? Because thats exactly what I am looking for Big grin But I dont find in this site where I can download this API, it is not possible anymore? Maybe do I have some problem with the server or something like that?

Thanks in advance! Glad

Cristina.

Ulhume, le 4 July, 2008 - 15:30

Hi Cristina,

Sorry but this API is not maintained any more and it is just not working with latest firmware... But don't be too disappointed because I'm working right now with the official TuxDroid team on the next droid's software generation that is completely based... on Java Smiling I have no release date for this but it will be soon I think.

But if you want to play with the old API, you can hack it here :
http://artisan.karma-lab.net/dev/tuxdroid-java-api/trunk/tuxdroid-java-api/

login: anonymous/anonymous

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Sommaire
Commentaires récents