jeudi 24 avril 2014

Partage d'écran Androïd vers PC

Vous avez développé une magnifique application mobile sur votre smartphone ou tablette Androïd et voulez en faire la démonstration à vos collègues ou en clientèle ?
Sans aller jusqu'à fournir le .apk à tout le monde, vous vous dîtes qu'un partage d'écran de votre terminal mobile serait du plus bel effet !
Regardons quelques solutions (le panel n'est pas exhaustif !) pour ce faire :

TeamViewer

Il s'agit d'un logiciel bien de prise de contrôle à distance bien connu désormais. 
Et bien, il est possible de prendre la main de votre terminal Androïd depuis votre PC (je n'ai pas poussé ma curiosité jusqu'à voir si je pouvais en prendre le contrôle depuis un iPad !!  :))

Personnellement (j'ai un Samsung Galaxy S3 sous Androïd 4.3 non rooté), j'ai dû :

Le résultat n'est pas saisissant de fluidité mais reste acceptable pour du rendu peu dynamique (dommage pour vos dernières animations CSS3 ulta-travaillées...)

RM : à noter que vous avez également accès à des fonctionnalités telles que l'affichage du CPU, RAM et espace disque utilisés, désinstallation d'applications sur votre terminal, etc...

AirDroid 

Pour que AirDroid soit en mesure d'afficher l'écran de votre terminal mobile, il faut (malheureusement) que votre terminal soit rooté... et je n'ai donc pu le tester :-(
Pour cela il faut, lancer AirDroid sur votre terminal et vous rendre avec votre PC à l'adresse http://web.airdroid.com (il y a de nombreuses autres façons de pouvoir connecter les 2 systèmes mais celui-ci est le plus simple)

Comme TeamViewer (je dirais même "mieux que TeamViewer"), AirDroid est capable d'accéder à de nombreuses fonctionnalités de votre terminal (contacts, sonneries, ...), d'installer des .apk, etc...

Droid@Screen

Cette méthode est un peu longue à mettre en oeuvre (j'adore l'étape ou il faut cliquer 7 fois sur un champ inactif pour activer le mode développeur !!)

Plus de news prochainement...

Samsung Screen Mirroring

Je pensais pouvoir mettre ceci facilement en application mais la réalité a été tout autre... Mon Windows 7 n'est pas Miracast-compatible contrairement à Windows 8.1. De toute façon, la technologie a semble-t-il quelques soucis de jeunesse à résoudre.


Si vous voulez partager votre expérience, les commentaires vous sont grand ouverts.


samedi 12 avril 2014

Sérialisation ABAP vers JSON

Choisir son sérialiseur ABAP vers JSON

Vous voilà lancés dans un nouveau projet dans lequel le format d'échange sera JSON (JavaScript Object Notation) ? Félicitations !

Nous en avions déjà parlé lors d'un précédent billet. Une des solutions est d'utiliser la brique SAP Gateway qui est capable de produire du JSON mais cette brique supplémentaire est soumise à des coûts de licence, éventuellement des coûts d'infrastructure si vous souhaitez la positionner sur un serveur dédié, etc...

Néanmoins, avoir un tel middleware dans votre paysage constitue un apport essentiel pour peu que vous commenciez à développer des interfaces pour mobiles par exemple !

Restons dans un cadre plus restreint où vous cherchez surtout à fournir un premier flux JSON.
Comment passer de vos données ABAP à ce format JSON ?

Offre de sérialisation ABAP vers JSON

Faisons un petit tour d'horizon de ce qui existe chez SAP et ce qui est proposé par la communauté des développeurs ABAP

SAP
  1. classe  CL_TREX_JSON_SERIALIZER
  2. classe /SDF/CL_E2E_XI_ALERT_JSON_DOC (Note OSS 1743560)
  3. classe /UI2/CL_JSON (nécessite l'UI2 Add-on)  [non testé]
  4. conversion native par le noyau via CALL TRANSFORMATION (7.02 and 7.03/7.31 (Kernelpatch 116))
Opensource
  1. ZJSON  (Assembla ou GitHub qui a l'air plus récent)  [version testée 0.2.0]
  2. json4abap
  3. smartJSON  (oublions celui-là en fait... il s'appuie sur le moteur Javascript du serveur ABAP)
  4. json_util
Noter que les solutions ZJSON et classe /SDF/CL_E2E_XI_ALERT_JSON_DOC sont très proches car l'un a servi à construire l'autre.  ;)

Validité du JSON produit

Tout d'abord, je vous recommande de valider le JSON produit à l'aide d'outils en ligne tel que http://jsonformatter.curiousconcept.com/ (qui liste en plus les erreurs rencontrées) avant d'arrêter votre décision !

On pourrait croire que tous ces sérialiseurs produisent un JSON valide et bien c'est loin d'être le cas.
Les solutions SAP 1) et 2) sont utilisées en interne par SAP et n'ont pas franchement vocation à être utilisés par nous autres développeurs. (autrement dit, pas sûr que le support SAP réponde favorablement à vos récriminations)
Il y a également quelques particularités en ABAP telles que l'absence d'un type primitif booléen ou le format des dates à prendre en compte.

Protocole de test
Toutes les solutions semblent relativement à l'aide avec la récursivité (structure/structure, table/table) donc on s'attardera sur le traitement des différents types ABAP.

Voici la structure de test que nous allons sérialiser :


Résultat du test

SAP
1) la classe CL_TREX_JSON_SERIALIZER ne met pas de quotes autour du nom des attributs et ajoute des espaces autour de valeurs numériques (cf. http://scn.sap.com/community/mobile/blog/2012/09/24/serialize-abap-data-into-json-format)
2) la classe /SDF/CL_E2E_XI_ALERT_JSON_DOC peut laisser des attributs sans valeur (les floats, chaines hexadécimales, ... ne semblent pas traités)

3) non testé
4) sans surprise, cette solution produit un JSON valide dans tous les cas


Opensource
1) idem SAP 2)
2) json4abap ne produit vraiment pas du bon JSON...!
il oublie d'entourer les attributs de quotes (noter qu'il laisse les attributs en majuscules comme il est d'usage en ABAP - et comme le fait la solution SAP 3) - mais ne pas oublier que JavaScript est sensible à la casse et que l'usage veut que les attributs y soient en minuscules, les majuscules étant plutôt réservées aux constantes), qu'il ne traite pas tous les types (on était prévenu sur la page d'accueil du projet !) et qu'il a implicitement converti le type NUMC en entier (en raison de l'absence de quotes)
3) trop smart à installer... oublions-le !
4) json_util ne se débrouille pas si mal. Certes, il a converti en entier le NUMC mais au moins il produit un JSON valide



Conclusion

Malgré une offre prolifique, compte-tenu des résultats de validité, le choix est assez restreint. Mon top 3 serait le suivant :
  1. conversion native par le noyau via CALL TRANSFORMATION
  2. ZJSON / classe /SDF/CL_E2E_XI_ALERT_JSON_DOC (en faisant attention au format float, etc...)
  3. json_util