RSS Feed

JAXB – ignorer les espaces inutiles dans les fichiers XML

19 August 2010 par SeB 2 commentaires »

JAXB permet de générer des classes Java à partir de XSD pour manipuler du XML plus facilement. En clair, il permet de générer un parseur et un générateur de flux XML en Java. Ce qui fait gagner énormément de temps en développement.

En revanche, par défaut, le parseur JAXB n’ignore pas les espaces inutiles (appelés whitespaces). Pas de panique, l’API JAXB permet de le faire assez simplement. Il faut seulement créer un filtre et l’appliquer lors de la lecture du flux XML.

Le code du filtre ressemble à ceci :

public class WhitespaceFilter implements EventFilter {
	public boolean accept(XMLEvent event) {
		return !(event.isCharacters() && ((Characters)event).isWhiteSpace());
	}
}

Ensuite, pour l’appliquer il suffit d’instancier votre parseur de cette façon :

	JAXBContext jc = JAXBContext.newInstance("mon.package");

	// instancie le parseur XML pour ignorer les espaces inutiles
	XMLInputFactory inputFactory = XMLInputFactory.newInstance();
	XMLEventReader eventReader = inputFactory.createXMLEventReader(new FileInputStream("/monrepertoire/monfichier.xml"));
	eventReader = inputFactory.createFilteredReader(eventReader, new WhitespaceFilter());

	// parse le fichier XML
	Unmarshaller u = jc.createUnmarshaller();
	grid = (PCCADGRID)u.unmarshal(eventReader);

Cet exemple supprimer les espaces inutiles entre les balises XML. En revanche, les espaces inutiles sont toujours présents dans les valeurs. Pour supprimer ces derniers, il faut mettre en place un adaptateur. Voici son code :

public class NormalizedStringAdapter extends XmlAdapter {
	public String marshal(String text) {
		return text.trim();
	}

	public String unmarshal(String v) throws Exception {
		return v.trim();
	}
}

Il y a trois méthodes pour l’appliquer. Soit lors de l’initialisation du parseur :

Unmarshaller u = jc.createUnmarshaller();
u.setAdapter(new NormalizedStringAdapter());

Soit avec une annotation sur les champs concernés :

@XmlElement(required=true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
String name;

Soit avec une annotation dans les classes package-info pour l’appliquer à tous les champs du type chaine de caractère :

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=NormalizedStringAdapter.class,type=String.class)
package mon.package;

Une fois cet adaptateur mis en place, les données XML que vous chargerez ne seront plus polluées par des espaces, retours à la ligne, tabulations, etc…

Notez qu’il existe également un adapteur qui permet de compacter les espaces. Comme ci-dessus, il supprime les espaces en début et fin de chaine mais réduit les multiples occurrences d’espace à un seul espace. Si vous le cherchez, c’est : javax.xml.bind.annotation.adapters.CollapsedStringAdapter.

 

I’m a Superphone – améliorez l’expérience utilisateur sous Android

7 July 2010 par SeB Pas de commentaire »

Connaissez-vous Sit And Speak, Flip And Sleep et Clutch And Wake ? Si c’est le cas, vous allez rapidement comprendre ce que fait I’m a Superphone. Cette application reprend toutes les fonctionnalités des trois précédemment citées. A cela, elle ajoute une interface pour paramétrer des comportements spécifiques selon vos besoins.

Pour rappel, voici les fonctionnalités dont bénificiera votre téléphone une fois I’m a Superphone installé :

  • mode voiture : votre téléphone passe automatiquement en haut-parleur quand il est posé à plat
  • mode discret : votre téléphone passe automatiquement et reste en mode silencieux s’il est retourné (à plat)
  • mode éveil : votre téléphone ne s’éteint plus tant que vous êtes en communication ou que vous le tenez dans votre main

Contrairement aux applications gratuites qui proposent une seule fonctionnalité non paramétrable, I’m a Superphone est une application payante. Je laisse le choix aux utilisateurs d’utiliser plusieurs petites applications gratuites ou bien d’acheter une seule et même application plus complète. A vous de choisir et de profiter de fonctionnalités avancées pour votre téléphone Android ! ;-)

 

HTC Hero – passer d’Android 1.5 Cupcake à Android 2.1 Eclair

6 July 2010 par SeB Pas de commentaire »

J’avais un HTC Hero avec Android 1.5. C’était la version officielle. Seul le firmware radio avait été mis à jour. De plus, le mode root était activé et busybox installé.

  • Version du microgiciel : 1.5
  • Version de bande de base : 63.18.55.06OU_6.35.15.01
  • Version du noyau : 2.6.27-a5504199 htc-kernel@and18-2 #521
  • Numéro de build : 1.76.405.6 146733 CL#47214 release-keys
  • Numéro logiciel : 1.0.0.A6288

J’hésitais à installer le firmware 2.1 de la mise à jour OTA européenne. N’ayant pas trouvé de source sûre, j’ai succombé pour la MoDaCo r5 avec les options et la mise à jour radio.

Je ne vais pas vous faire un tutorial (d’autres le font bien mieux) mais plutôt vous présenter les grandes étapes de cette mise à jour :

  • Sauvegarde avec Titanium Backup des données et applications utilisateur, puis des données système
  • Sauvegarde de la carte SD
  • Installation de Amon Ra recovery
  • Sauvegarde Nandroid
  • Note de la configuration de l’APN (au cas où)
  • Copie du firmware MoDaCo r5 sur la carte SD
  • Flash du ZIP à partir de la carte SD
  • Double redémarrage du système
  • Restauration des données SMS/MMS, mails et toutes les applications avec Titanium Backup
  • Sauvegarde de la SD
  • Sauvegarde Nandroid
  • Partitionnement de la carte SD (pour A2SD)
  • Conversion de la partition ext2 en ext3
  • Suppression de Wave Secure (adb remount;adb shell rm system/app/*wsandroid*)

Suite à toutes ces manipulations, je me retrouve avec un HTC Hero qui tourne sous Android 2.1 :

  • Version du microgiciel : 2.1-update1
  • Version de bande de base : 63.18.55.06PU_6.35.15.11
  • Version du noyau : 2.6.29-063c4d24 htc-kernel@and18-2 #1
  • Numéro de build : 3.32.405.1 CL191507 release-keys
  • Numéro logiciel : MoDaCo Custom ROM r5 for the HTC Hero, …

Je ne peux pas dire si avec la mise à jour en 2.1, le HTC Hero tourne plus vite. En tout cas, l’interface HTC Sense donne une sensation de légèreté. Les SMS semblent être correctement encodés maintenant ! De plus, j’ai enfin accès au nouveau Android Market et à toutes ses applications réservées à Eclair. :-)

Je me suis un peu battu avec Titanium Backup pour récupérer tous mes SMS/MMS et la configuration de mes mails. Un redémarrage du téléphone a permis de tout résoudre.

Toutes les applications ont conservé leur paramétrage. En revanche, pour certaines d’entre elles, j’ai dû supprimer les données puis les restaurer à nouveau car elles plantaient (le bien connu “Force Close” au lancement de l’application).

Trois problèmes persistent :

  • L’application standard “Gérer les applications” plante quand je la lance depuis le menu de paramétrage. Elle se lance correctement si elle est lancé depuis Titanium Backup mais si l’on change le tri des applications, elle plante à nouveau. Est-ce à cause de mes restaurations de paramètres système ?
  • A2SD ne semble pas fonctionner car le système lève des notifications pour dire que la mémoire interne est saturée (alors que la carte SD possède une partition ext3 de 512Mo). Est-ce que cela est dû au fait que la partition n’existait pas un premier démarrage de la MoDaCo ? De plus, je me demande comment ça se passe le jour où l’on décide de ne plus utiliser A2SD (par exemple si on n’en est plus satisfait ou si l’on passe sur Android 2.2 Froyo).
  • ADB ne fonctionne plus correctement. J’avais des messages d’erreur du type “the adb server is out of date” et le téléphone n’était pas détecté. J’ai réinstallé les drivers officiels du HTC Hero et maintenant ADB fonctionne mais il y a plein de caractères bizarres lorsqu’une commande ADB est exécutée. De plus, Droid Explorer a un comportement aléatoire et DDMS ne fonctionne plus si le téléphone est branché en USB.

Une fois c’est trois points résolus, j’aurai un téléphone parfaitement fonctionnel qui n’aura rien à envier aux autres ! ;-)

Comme beaucoup, j’ai l’impression d’avoir un HTC Hero tout neuf. Il ne me reste plus qu’à explorer les nouveautés d’Android 2.1 et de Sense 2 (pour HTC Hero).

 

HTC Hero – modifier le boot recovery

5 July 2010 par SeB Pas de commentaire »

Le boot recovery est un mode de démarrage qui permet de faire des opérations système sur votre HTC Hero. Il est indispensable si vous souhaitez mettre à jour le système d’exploitation (le fameux firmware) de votre téléphone sans passer par les canaux officiels (programmes MS Windows ou mise à jour OTA).

Afin de proposer plus d’options, des développeurs ont créé leur propre boot recovery. Je vais vous expliquer comment installer le plus courant : Amon Ra recovery v1.6.2.

Sauvegarde du boot recovery

Afin de sauvegarder le recovery, vous devez avoir le SDK pour Android d’installé sur votre machine et le “Débogage USB” doit être activé sur le téléphone.

Branchez au moyen du cable USB votre téléphone sur votre ordinateur. Passez le téléphone en mode fast boot (allumez le téléphone en maintenant la touche Retour appuyée).

Copiez dans le sous-répertoire tools du SDK le fichier recovery-RA-hero-v1.6.2.img. Allez dans ce répertoire et exécutez les commandes suivantes :

adb shell reboot bootloader
fastboot boot recovery-RA-hero-v1.6.2.img
adb shell mount /sdcard
adb shell dump_image recovery /sdcard/recovery-hero.orig.img
adb pull /sdcard/recovery-hero.orig.img

Vous avez maintenant un fichier recovery-hero.orig.img sur votre ordinateur qui vous sera utile le jour où vous souhaitez remettre le recovery original.

Installation du recovery modifié

C’est quasiment la même procédure que pour la sauvegarde. Vous devez exécuter les commandes suivantes :

adb shell reboot bootloader
fastboot boot recovery-RA-hero-v1.6.2.img
adb shell mount /sdcard
adb push recovery-RA-hero-v1.6.2.img /sdcard/recovery-RA-hero-v1.6.2.img
adb shell flash_image recovery /sdcard/recovery-RA-hero-v1.6.2.img
adb shell reboot

Le Amon Ra recovery est maintenant installé sur votre téléphone. Vous n’aurez plus besoin d’utiliser adb pour redémarrer sur le boot recovery modifié. Un simple démarrage est fast boot suffira (allumez le téléphone en maintenant la touche Home appuyée). ;)

 

Bilan de mes applications sur l’Android Market

3 July 2010 par SeB Pas de commentaire »

Voici quelques chiffres sur les applications que j’ai publié depuis un mois et demi :

MonBonCoin :

  • Date de première version : 20/05/2010
  • Nombre de versions : 8
  • Tranche de téléchargements : 5000-10000
  • Note : 3,5/5

Sit And Speak :

  • Date de première version : 09/06/2010
  • Nombre de versions : 4
  • Tranche de téléchargements : 1000-5000
  • Note : 3,5/5

Flip And Sleep :

  • Date de première version : 18/06/2010
  • Nombre de versions : 2
  • Tranche de téléchargements : 500-1000
  • Note : 3,5/5

Clutch And Wake :

  • Date de première version : 22/06/2010
  • Nombre de versions :  1
  • Tranche de téléchargements : 100-500
  • Note : 2/5

Difficile de dire ce qui fait qu’une application soit populaire ou non. Néanmoins, il faut soigner la description de son application. Par exemple, beaucoup de personnes pensent que Clutch And Wake fait autre chose que ce qu’elle fait réellement. Du coup, ils lui mettent une mauvaise évaluation et la désinstallent.

De plus, il faut permettre aux utilisateurs de vous contacter et répondre le plus rapidement à leurs questions.

Enfin, je pense que de régulières mises à jour permettent d’obtenir une meilleure visibilité de l’application. Les utilisateurs constatent que l’application vit et qu’il y a un suivi par l’éditeur.

J’essayerai de faire un point plus tard pour suivre l’évolution de ces applications et partager des retours d’expérience sur d’éventuelles expérimentations.

 

Attaque du weblogue !

28 June 2010 par SeB 4 commentaires »

Ce matin (lundi 28 juin 2010), je recherche sur le site un vieil article sur la qualité du code source Java. Tiens, c’est étrange. Seul le premier mot du titre des articles s’affichent. Je vérifie le code HTML de la page. Non, ce n’est pas un problème d’affichage !? Je tente de me connecter sur l’interface d’administration et paf ! Firefox m’indique que je suis sur un site suspect et qu’il refuse d’afficher la page.

Je vous passe toute l’étape d’analyse, de mise hors-ligne du site, etc… Le site a été victime d’une attaque se basant sur une faille de type XSS (qui pointait vers yadr0.com). Je ne peux m’en vouloir qu’à moi-même car ça fait bien trop longtemps que je me dis que je dois mettre à jour mon WordPress qui est resté en version 2.1.2 ! Et pourtant, ce n’est pas le nombre de failles WordPress qui manque.

A celà, s’ajoute la mésaventure de la récupération de la sauvegarde de la base de données. En effet, mon hébergeur propose une sauvegarde journalière et hebdomadaire. Le soucis, c’est que l’attaque a eu lieu vendredi soir (le 25 juin 2010) et que je m’en suis rendu-compte que lundi. Or, la sauvegarde hebdomadaire à lieu tous les dimanche. Et non, ce n’est pas une sauvegarde hebdomadaire glissante. :-(

Après avoir mis le site hors-ligne, j’ai donc installé la dernière version de WordPress puis supprimé tout le code malicieux présent dans les articles. Je suis ensuite aller sur Webmaster Tools pour demander à Google d’analyser le site et valider qu’il n’y a plus de logiciel malveillant sur celui-ci.

Lors de la migration de WordPress 2.1 à 3.0, il y a eu un problème d’encodage. Du coup, tous les accents sont mal encodés. Voilà pourquoi, vous n’allez pas retrouver tous les articles pour le moment. Le site va tourner un mode dégradé pendant un certain temps. Je suis vraiment désolé pour la gêne occasionnée.

Si jamais vous souhaitez avoir accès à un article bien précis. Veuillez me le signaler. Je le mettrai dès que possible en ligne.

Reste à faire :

  • vérifier l’intégrité des toutes les bases de données de l’hébergement
  • vérifier l’intégrité de tous les scripts hébergés
  • changer les mots de passe
  • récupérer tous les titres des articles
  • trouver un script pour corriger l’encodage des articles
  • vérifier le fonctionnement de tous les plugins
  • vérifier la compatibilité du thème avec WordPress 3.0

Si quelqu’un a quelques informations pour comprendre le comment et quoi de l’attaque de ce week-end, je suis preneur. De même, si quelqu’un a un script qui permet de corriger l’encodage des articles, je lui en serais très reconnaissant.

Je sens que la semaine va être très longue… :-/

 

Clutch And Wake – le gestionnaire de veille qu’il vous faut pour Android

22 June 2010 par SeB 2 commentaires »

Combien de fois votre téléphone Android s’est-il mis en mode veille alors que vous lisiez une page web, que vous attendiez le chargement d’une application ou bien pendant que vous étiez en communication ? Même si cela part d’une bonne intention afin d’économiser la batterie des smartphones, cela se révèle assez rageant !

Quand faut-il que le mode veille soit désactivé ? Soit pendant un appel, soit lorsque l’on utilise le téléphone sans que l’on touche forcément à  l’écran, aux boutons ou au clavier. Généralement, lorsque l’on utilise son téléphone, c’est que l’on le tient dans sa main et donc qu’il est dans une position verticale. Et bien voilà  comment est née l’application Clutch And Wake ! :-)

Pour ceux qui suivent mes articles sur Android, vous aurez constaté que c’est la troisième application que je vous présente dans ce style après Sit And Speak et Flip And Sleep. La suite applicative pour améliorer l’expérience utilisateur sur Android avance doucement mais sûrement.

Je tenais à remercier Gab qui m’a énormément aidé à trouver le nom pour l’application car ce ne fut pas chose aisée… :-/

Avez-vous remarqué que maintenant votre Android sent votre présence ? Et voilà qu’il ne s’éteindra plus entre vos mains (sauf défaut de batterie bien entendu !). :-)

 

Flip And Sleep – le mode silencieux facile pour Android

18 June 2010 par SeB 1 commentaire »

Sur le HTC Hero, si vous recevez un appel auquel vous ne souhaitez pas répondre, il suffi de retourner le téléphone face cachée pour qu’il arrête de sonner. Cette fonctionnalité est assez pratique mais comporte deux défauts. Premièrement, le passage en mode silencieux est un peu lent. De plus, si le téléphone reste retourné face caché et qu’un second appel arrive, il sonnera à nouveau. Souhaitant améliorer cette fonctionnalité, j’ai créé Flip And Sleep. :-)

Cette application active automatiquement le mode silencieux à partir du moment où le téléphone est posé à plat et retourné face caché. Elle propose un simple widget pour activer/désactiver cette fonctionnalité.

Comme vous l’aurez sûrement constaté, cette application est de la même veine que Sit And Speak que je vous ai précédemment présenté. J’espère pouvoir vous en proposer d’autres. ;-)

Alors bonne sieste à votre Android ! En espérant que cette application vous rendra autant service qu’à moi-même. ;-)

 

Sit And Speak – le haut parleur intelligent pour Android

9 June 2010 par SeB 2 commentaires »

N’avez-vous pas remarqué que la plus part du temps où vous souhaitez que votre téléphone soit en haut-parleur, ce dernier était posé à l’horizontal ? Par exemple, vous travaillez sur votre ordinateur ou prenez des notes et vous poser votre téléphone sur votre bureau. Vous faite une conférence avec des personnes présentes avec vous et posez votre téléphone au centre de la table. Ou bien, vous prenez ou passez un appel en voiture et le téléphone se trouve posé sur le siège d’à  côté. Dans certain cas, un kit piéton ou une oreillette sans fil suffi mais dans tous les autres cas il y a Sit And Speak ! :-)

Cette application active automatiquement le haut-parleur de votre téléphone Android lorsqu’il est à plat pendant un appel entrant ou sortant. Le haut-parleur est désactivé si le téléphone est redressé. Elle propose un simple widget pour activer/désactiver cette fonctionnalité.

Notez que c’est une première version qui a été testée essentiellement sur HTC Hero 1.5 et Samsung Spica 2.1. Il se peut qu’il y ait des incompatibilités avec d’autres téléphones ou versions d’Android. Alors surtout, n’hésitez pas à me faire un retour afin que je puisse améliorer l’application. D’autant plus qu’elle pourrait être le début d’une série d’applications dans le même type. :-D

Alors, à vos appels ! En espérant que cette application vous rendra autant service qu’à moi-même. ;-)

 

MonBonCoin v1.1.0

8 June 2010 par SeB 11 commentaires »

Les premiers retours des utilisateurs ont mis en évidence une faille fonctionnelle. En effet, l’application MonBonCoin facilite la vie de l’utilisateur en pré-sélectionnant la localisation des annonces. Or cette situation peut poser quelques points de blocage si :

  • La localisation ne fonctionne pas
  • La localisation ne se met plus à jour
  • L’utilisateur souhaite faire une recherche pour un lieu différent de sa localisation
  • L’utilisateur se trouve près de la frontière et la localisation le trouve dans un pays l’étranger

Toutes ces situations particulières ont posé quelques difficultés à certains des utilisateurs. C’est pourquoi, le champ “Code postal” a été ajouté dans la dernière version de l’application. Il permet d’affiner la recherche lorsqu’il correspond au département courant. Sinon, il permet de faire une recherche localisée pour ce dernier. Il est possible de remettre à jour la localisation via le menu de l’application.

J’espère que cette nouvelle fonctionnalité répond à vos attentes et vous plaira. :-)