Archi & techno

Problèmes courants: Imprécision des calculs mathématiques (2e partie)

Nous avons déterminé dans la première partie que les nombres à virgule flottante sont à proscrire.

Nos armes seront donc le BigDecimal en Java, le type decimal en .Net. Malheureusement, d’autres pièges pavent notre chemin.

Notes:

  • Sous Oracle, le type NUMBER(p,s) peut être soit décimal si p (et optionnellement s) est spécifié et sera à virgule flottante sinon. Conclusion, toujours spécifier p (et s pour avoir des décimales).
  • Pour un Web Service, la valeur d’un type xs:decimal sera sous forme texte (ie. « 123.456 ») et sera donc précis et mappé sans problème vers un BigDecimal (Java) ou decimal (.Net).

Lire la suite

Archi & techno

Industrialisation des développements Android

Avec la croissance de la plateforme Android et l’annonce de Google sur le nombre de terminaux activés chaque jour, le nombre de projets Android a de bonnes chances de progresser également. Avec cette augmentation, la question de l’industrialisation des développements se pose donc. Pourquoi industrialiser ? Comment ? Des questions auxquelles nous allons répondre dans ce billet…
Lire la suite

Archi & techno

Pourquoi les Websockets ?

Après la démocratisation d’Ajax (ie. requêtes HTTP asynchrones en Javascript), plusieurs techniques ont été élaborées afin de permettre le push de données depuis le serveur toujours en utilisant HTTP. C’est grâce à ces techniques que l’on reçoit nos mails dans une application web sans avoir à cliquer sur le bouton « Refresh », que les applications de chat sont possibles sans plugin tierce (Flash, Java, …), etc. Le W3C et l’IETF ont spécifié une API Javascript et un protocole nommé Websocket. Ce protocole connecté est adapté à l’envoi de données dans les deux sens et évite de détourner HTTP de son usage initial (ie. un protocole déconnecté sans état).
Lire la suite

Archi & techno

Problèmes courants: Imprécision des calculs mathématiques (1ère partie)

J’inaugure aujourd’hui une nouvelle chronique que j’ai appelée problèmes courants. J’y traiterai l’une après l’autre les erreurs classiques rencontrées à travers mes années d’informatique.

Ce premier article de la série visera à démystifier les calculs mathématiques et à établir de bonnes pratiques au sein d’une application d’entreprise. Par application d’entreprise, nous entendons une application gérant des montants d’argent, des prix, des quantités. Il a été coupé en deux, la première partie expliquant le problème, la deuxième montrant comment le gérer en Java et .Net.

Bill travaille sur un logiciel de paiement de commissions. Il doit ajouter une commission de 1,2$. Il se fait donc une petite méthode faisant cette opération et le petit test unitaire qui va avec.

 @Test
 public void testAddCommission() {
  double actual = addCommission(1000000.1);
  assertEquals(1000001.3, actual, 0);
 }

 public static double addCommission(double nominal) {
  return nominal + 1.2f;
 }

java.lang.AssertionError: expected:<1000001.3> but was:<1000001.3000000477>

« Ah ben zut alors! C’est pas le bon résultat ».

Qu’est-ce qui se passe?
Lire la suite

Archi & techno

Déploiement d’une application sur l’infrastructure AMAZON (2/3)

Nous poursuivons notre aventure AMAZON avec ce second billet qui termine la description technique des principaux services AWS.

Localisation des données et des instances

Contrairement à GOOGLE, AMAZON permet de définir l’emplacement géographique de certaines ressources. Pour cela, les concepts de régions et zones de disponibilités ont été introduits.  Une région est une zone géographique – Europe, Asie, Etats-Unis Est et Ouest– composée de plusieurs zones de disponibilités.  Les zones de disponibilités sont des emplacements distincts conçus pour ne pas être impactés par un dysfonctionnent d’une zone de disponibilité voisine. Néanmoins, les connexions entre les zones de disponibilités d’une même région sont optimisées pour fournir une faible latence.

Lire la suite

Brèves de consultants

BlackBerry, des smartphones comme les autres ?

Les applications iPhone et Android sont nombreuses mais ce ne sont pas les seuls smartphones du marché. BlackBerry est un acteur historique du marché qui a lui aussi créé son store d’applications le 1er avril 2009. Des entreprises se posent donc la question de porter leur application iPhone ou Android vers les mobiles BlackBerry. Voici quelques éléments qui vous permettront de vous faire une idée sur du portage BlackBerry depuis iPhone ou Android.

Lire la suite

Évènement

Gagnants du concours ParisJUG – USI 2010

Vous l’attendiez tous… voilà les résultats du concours organisé par OCTO au dernier Paris JUG !
L’heureux gagnant de la place pour l’USI (Université du SI) est Jean-Michel Béa.
Quant à Benoit Lubek, Loïc Ebran et Holly Cumin elle-même (garantie sans trucage !), ils repartiront chacun du prochain JUG avec une bouteille de champ’.

Archi & techno

Supervisez votre JVM

La performance est un sujet qui revient souvent dans les projets. Mais la plupart du temps, le sujet est abordé après que les premiers problèmes soient survenus. Dans le précédent article, Sébastien insistait sur la nécessité de s’outiller. Effectivement, on améliore ce que l’on mesure. Nous allons donc nous intéresser au monde Java et voir quels sont les outils pour mesurer, présenter et suivre dans le temps des indicateurs de performance.
Lire la suite

Archi & techno

Python + doctest : quand la doc devient test

Introduction

Derrière ce titre abscons se trouvent deux concepts qui mettent en application le principe du KISS dans le langage de programmation Python : écrire de la doc et mettre des tests dans des sources Python, c’est simple avec l’utilisation conjointe des docstrings et du module doctest. Le concept proposé ici est des plus simples : écrire un test unitaire pour un objet présente beaucoup de similitudes avec le fait d’écrire la documentation de ce même objet, en particulier si on y présente des exemples d’utilisation. Ainsi, en faisant d’une pierre deux coups, on gagne du temps et limite les écarts.

Lire la suite