* Units V1.11 Documentation *

Ce fichier contient les sections suivantes :

1) Dispositions légales
2) But de Units
3) Caractéristiques
3.1) Nouvelles caractéristiques depuis V1.0
3.2) Nouvelles caractéristiques depuis V1.1
4) Mécanisme de conversion
4.1) Mécanisme de base
4.2) Conversions monétaires
4.3) Mécanisme des préfixes
5) Quelques mots sur l'interface
6) Bugs (ou défauts) connus
7) Me contacter
8) Note technique
9) Re-compiler "Units"
10) Remerciements
1) Dispositions légales retour au début

Ce logiciel obéit a la GNU General Public Licence. Pour plus d'informations, consultez le fichier COPYING inclu dans la distribution.

2) But de Units retour au début

"Units" est un convertisseur d'unités générique extensible.

Il est "générique" en ce sens qu'il est capable de gérer toute sorte d'unités (volumes, distances, monnaies, températures, etc...)

Il est extensible car l'utilisateur peut rajouter à volonté les unités qui l'interessent, en supprimer ou en modifier, directement par son Pilot.

3) Caractéristiques retour au début

"Units" essaye de minimiser la place nécessité par le stockage des descriptions d'unité, et par la même occasion essaye de rendre les conversions plus faciles, en gérant automatiquement les préfixes associés à chaque unité. Le choix de ces préfixes est configurable unité par unité par l'utilisateur.

Par exemple, considérons les unités de distance. Clairement, nous voulons avoir le mètre, mais nous voulons également avoir le kilomètre, le centimètre et pourquoi pas le nanomètre, sans avoir a entrer explicitement chacune de ces sous/sur unités du mètre. Lors de la création de l'unité "mètre", l'utilisateur pourra spécifier qu'il veut que le système sache associer au "mètre", ces 3 préfixes (kilo, centi, nano).

Par contre, si l'on veut aussi l'unité "parsec", on n'a nullement besoin de "kilo-parsec" ou de "milli-parsec". Aussi l'utilisateur pourra dire qu'il ne veut aucun préfixe pour cette unité.

Les préfixes fournis dans "Units" sont ceux du système internationnal, à savoir : atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta et exa.

Une base de données d'unités est fournie en standard, en Français et en Anglais. Celle-ci comporte actuellement à peu près 109 unités différentes (sans compter leurs multiples et sous-multiples éventuels).

3.1) Nouvelles caractéristiques depuis V1.0 retour au début

Quelques nouvelles fonctionnalités ont été rajoutées depuis la précédente version de "Units".

  • Le système mémorise maintenant quelle catégorie, quelles unités et quels préfixes étaient sélectionnés lorsque l'application a été quittée. Ainsi, quand vous relancez "Units" plus tard, il va restaurer la configuration de la précédente utilisation.
  • Il est maintenant possible d'utiliser une notation non scientifique pour afficher les résultats des conversions. J'entends par là que les résultats peuvent être affichés avec de simples nombres à virgule (dans la mesure du possible bien entendu).
  • Des vérifications sont faites pour éviter des erreurs dans les cas ou la mémoire devient insuffisante.
  • Des unités ont été rajoutées dans la base de données standard, et des anciennes ont été corrigées.
  • Il est maintenant possible de spécifier le facteur 'a' par son inverse. Ceci peut être utile pour les conversion de monnaies (consulter section 4.2 : Conversions monétaires).
  • Quelques fautes d'orthographe ont été corrigées, aussi bien dans le programme que dans la doc.
  • Je suis maintenant certain que la base de données contenant les unités est sauvegardée lors de la HotSync.
  • Une version HTML de la documentation est maintenant disponible (Merci à Tony Jest pour le fichier Anglais; qui m'a d'ailleurs aussi servi de squelette pour la version française ;-)
  • 3.1) Nouvelles caractéristiques depuis V1.1 retour au début

  • Correction d'un bug dans le mécanisme de conversion qui rendait un résultat faux en convertissant degrés celsius et farenheigt.
  • 4) Mécanisme de conversion retour au début

    4.1) Mécanisme de base retour au début

    Pour pouvoir créer ses propres unités, il est nécessaire de comprendre un minimum le fonctionnement du mécanisme de conversion utilisé dans "Units".

    Tout d'abord, regardons le mécanisme de base d'une conversion. On dira qu'1 "kilomètre" vaut 1000 metres. Donc on peut modéliser cette conversion par l'équation suivante :

    km = 1000 * m
    Dans d'autres cas, une simple multiplication ne suffit pas. Prenons le cas des températures. 0 "degrés celcius" valent -273 "kelvins". Cette conversion est donc régie par l'équation :
    celcius = kelvin + 273

    La règle adoptée dans "Units" est de modéliser les conversion par un mélange de ces deux styles d'équations, à savoir:

    unite1 = a * unite2 + b
    Pour convertir une quantité d'une unité U1 dans une unité U2, il faut bien sur que le système connaisse chacune de ces 2 unités. Deux unités nous donnes 2^2 genres de conversions :
    U1 -> U1,
    U1 -> U2,
    U2 -> U1,
    U2 -> U2
    Si l'on considère un plus grand nombre d'unités, disons n, le nombre de genres de conversions possibles est n^2. Il est clairement nécessaire de trouver un moyen permettant de convertir entre 2 unités sans être obligé de mémoriser explicitement la relation point à point entre chaque couple d'unités.

    La solution consiste à prendre un "pivot", une unité virtuelle de référence, vers laquelle, on pourra convertir chaque unité, et à partir de la laquelle on pourra aller vers chaque autre unité.

    Autrement dit, lors de la création d'une unité, plutôt que de donner la relation de cette unité avec toutes les autres unités (ce qui est fastidieux, et oblige à modifier toutes les unités dès qu'on en rajoute une), on va simplement dire comment passer de cette unité vers l'unité virtuelle de référence. Cette unité de référence est uniquement virtuelle et arbitraire. Elle n'a pas besoin d'avoir de nom dans le système. Le tout c'est de s'en rappeler car toutes les unités d'une même catégorie devront bien évidemment se référer à la même unité de référence !

    Un bon choix évident est de se baser sur l'unité de référence du système internationnal, par exemple le mètre pour les distances, la seconde pour le temps, etc... En réalité, actuellement la base de données fournie en standard avec "Units" n'utilise pas exactement l'unité de référence du système internationnal pour toutes les catégories. La configuration exacte est la suivante :

  • Distance: Mètre
  • Pression: Pascal
  • Surface: M2 (Mètre carré)
  • Température: Degré celsius
  • Temps: Seconde
  • Volume: Litre
  • Masse: Gramme
  • Energie: Joule
  • Consommation de carburant: Litre par 100 km
  • Puissance: Watt
  • Vitesse: Mètre par seconde
  • Et maintenant, vite, un exemple...

    Soit l'unité "mile" qui vaut 1.609344 kilomètres.
    Choisissons moralement le "mètre" comme unité de référence.
    Nous dirons que la façon de passer d'un "mile" a notre unité de référence est :
    y = 1609.344 * x + 0.
    Notons que nous n'avons pas entré dans le système la notion de "mètre". Si maintenant, nous voulons entrer le "mètre", nous lui donnerons l'équation suivante :
    y = 1 * x + 0.
    En effet, pour convertir des mètres dans notre unité de référence qui est moralement justement le "mètre", il suffit de multiplier par 1.

    Un dernier exemple, celui des températures.
    Nous prenons comme unité de référence les "degrés celsius". Donc ces mêmes degrés seront associés à l'équation : y = 1 * x + 0. Pour ce qui est des "kelvins" (où -273 correspond a 0 degrés celcius), l'équation sera (c.f. précédemment) :

    y = 1 * x + 273
    Lorsque l'on créé une unité dans "Units", il faut justement lui associer ces valeurs de coefficients "a" et "b". Bien évidemment, le facteur "a" ne peut pas être nul, sinon la conversion n'a aucun sens !

    4.2) Conversion monétaire retour au début

    Certains journaux et les Bureaux de change listent les taux de change entre devises de la façon inverse de celle nécessaire a "Units". Par exemple, ils affichent combien une livre Sterling va s'acheter (2.822DM, 9.43FFr, 1.591USD).
    Si maintenant je veux utiliser la livre Sterling comme unité de référence, je ne dois pas entrer ces chiffres en tant que facteurs "a" pour les autres devises, mais leur inverse (1/2.822, etc...) La case à cocher "1/a" fait ce calcul d'inverse automatiquement pour vous avant de mémoriser le facteur "a" pour l'unité dans la base de données.

    4.3) Mécanisme des préfixes retour au début

    Le mécanisme vu précédemment permet de gérer les conversions en règle générale. Considérons maintenant la notion de préfixes. On sait qu'un kilo-mètre vaut 1000 mètres, qu'un déci-litre vaut 10 litres. Donc on pourrait se dire que quand on demande 2 "kilo-trucs" à convertir vers une autre unité, c'est comme si on convertissait 2 * 1000 "trucs" vers l'autre unité. Autrement dit, le préfixe "kilo" impliquerait une multiplication de l'unité de base par 10^3.

    En fait ça n'est pas tout a fait exact, car 1 "kilo-M2" vaut non pas 1000 "M2", mais 1000000 "M2" (il y a 2 chiffres par colonne). Autrement dit, ici le préfixe "kilo" implique une multiplication de l'unité de base par 100^3.

    De même, 1 "kilo-octet" ne vaut pas 1000 octets, mais 1024 octets.

    "Units" utilise un mécanisme permettant de généraliser la notion de préfixe, en partant du principe que les préfixes du sytème internationnal ne sont pas basés forcément sur 10^quelquechose, mais plutôt sur m^quelquechose. Donc m est un facteur qui permet de savoir comment passer au préfixe suivant sachant ce facteur sera élevé à la puissance correspondant au au préfixe (cette puissance est celle universellement acceptée dans le système international, à savoir : kilo => 3, hecto => 2, déca => 1, déci => -1, etc...)

    Par exemple prenons le cas des distances.

    Déci = 10^-1 Déca = 10^1 Hecto = 10^2 etc...
    Prenons le cas des surfaces.
    Déci = 100^-1 Déca = 100^1 Hecto = 100^2 etc...
    Prenons le cas des volumes.
    Déci = 1000^-1 Déca = 1000^1 Hecto = 1000^2 etc...
    Et enfin prenons le cas des octets.
    Kilo = 10.0793684^3
    (10.0793684 est la racine cubique de 1024, ainsi, 10.0793684^3 = 1024 et donc utiliser le préfixe "kilo" avec les octets revient bien à multiplier, non pas par 1000, mais par 1024).
     
    Lorsque l'on créé une unité, il est donc nécessaire de spécifier ce facteur, que l'on nommera "m". Bien évidemment, ce facteur "m" ne peut pas être nul, sinon la conversion n'a aucun sens.

    Voilà tout ce qu'il faut savoir sur les données nécessaires à la création d'une unité sous "Units" et pourquoi elles sont nécessaires.

    5) Quelques mots sur l'interface retour au début

    Lorsque l'on créé une unité, pour spécifier quels préfixes l'on désire, il suffit de cocher les cases correspondantes dans la fenêtre de saisie.

    Les unités sont classées par catégories. Il est impossible de faire des conversions entre unités de catégories différentes. Même lorsque vous utilisez la catégorie "Toutes", une vérification est effectuée afin d'éviter des conversions incohérentes.

    Il est possible de faire du couper/copier/coller dans les différents champs de "Units".

    Quand une unité est créée, elle possède automatiquement le préfixe "vide", c'est à dire celui qui ne multiplie par rien. Par exemple, si vous créez le "mètre", avec par exemple le prefixe "kilo" et "centi", 3 préfixes seront alors disponibles "k", "c" et " ". Ce dernier est celui qui permet de parler justement de "mètres" simples.

    Maintenant, je suis sûr que la base de données renfermant les unités est automatiquement archivée par une HotSync.

    Une case à cocher située en bas à gauche de l'écran permet d'utiliser soit la notation scientifique (par exemple 1.23e2) soit une notation plus courante à virgule (123) pour l'affichage des résultats. Notez que quand les résultats sont de très grands (ou très petits) nombres, la notation à virgule peut éprouver le besoin de remettre es exposants dans l'affichage. Notez également que le code qui affiche les résultats en notation à virgule est très lourdement dépendant du format de la chaîne retournée par la routine interne standard de conversion float -> double du Pilot. Si jamais vous rencontriez des problèmes sur votre Pilot avec cette fonctionnalité, dites-le moi. Le mien est un Pilot 5000, et ça marche ... (du moins il semble ;-)

    Quand vous entrez des nombres très grands (ou très petits), utilisez de préférence une notation scientifique. Par exemple, au lieu d'entrer 1000000000000000, préférez plutôt 1e16. Pourquoi ? Parce que la routine interne au Pilot de conversion float vers chaine de caractères semble ne pas gérer ce genre de nombres à rallonge. Donc si vous utilisez 1e16 comme notation, tout ira très bien. De toutes façon, lorsque'on manipule de tels nombres, qui les entre encore sans utiliser une notation scientifique ;-) ?

    6) Bugs (ou défauts) connusretour au début

    A ma connaissance 2 petites choses peuvent être reprochées à "units".

     * Quand on fait du copier-coller en prenant le champ où s'affiche le résultat de la conversion pour le coller ailleurs, le caractère "e", symbolisant l'exposant est transformé en "/". Ce n'est pas de ma faute. Il se trouve que j'ai utilisé la fonte 6 du Pilot pour avoir ces gros caractères sympas (qui sont ceux de la calculatrice). Et il se trouve que le "e" de ce jeu de caractères n'a pas le même code que dans les autres jeux de caractères. Aussi, avant d'afficher la chaîne résultat, je dois transformer le caractère "e" en celui qui va bien dans le jeu de la calculatrice. Et bien évidemment, quand on reprend cette chaîne et qu'on la met dans une zone de saisie avec un autre jeu de caractères, on a le problème inverse, et ce qui devrait s'afficher "e", s'affiche "/". Ca n'est pas bien grave et ça n'empêche rien de fonctionner.

     * Si on entre une valeur non numérique dans les zones de saisie, je ne vérifie rien, et la résultat est transformé en le nombre 0. Il faut donc juste faire attention quand vous entrez des nombres, le système ne vérifie pas pour vous que ce sont bien des nombres...

    7) Me contacter retour au début

    Pour tout commentaire, suggestion, rapport de bug, etc, vous pouvez me joindre par email:

    francois.pessaux@inria.fr
    8) Note technique retour au début

    L'identificateur de ce programme est 'UniT', obtenu par enregistrement standard auprès de

    http://palmpilot.3com.com/devzone/crid/cridsub.html
    9) Re-compiler "Units" retour au début

    "Units" a été écrit avec Gcc sous Linux. Le source de "Units" comporte la possibilité d'avoir les messages en Français ou en Anglais. Ceci est simplement configurable dans le Makefile. Il suffit pour cela de commenter et dé-commenter au choix 2 lignes dans ce Makefile (voir ligne 12 à 19). Ensuite, 'make' fera le reste...

    10) Remerciements retour au début

    Grand merci à Tony Jest qui a testé "Units" et m'a signalé un petit paquet de bugs, et quelques idées d'amélioration. Il a également corrigé, étendu (partie sur les conversions monétaires) et formatté en HTML le fichier de documentation Anglais.