# Weather application (JavaScript)

Susanna Huhtanen
ihmis.suski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2013
Comment planifier une application qui utilise des appels asynchrones. Les appels asynchrones sont présentés au travers d'une application météo.

# Weather application

        Dans cette partie du guide, nous allons construire une application météo utilisant des appels asynchrones. Dans cet exemple, les informations météorologiques sont récupérées sur geonames.org et l'application utilise les codes OACI pour localiser les requêtes météo. Pour écrire et lancer tous les exemples de code, vous avez besoin d'un éditeur pour écrire le code, de l'application Terminal et d'un ordinateur sur lequel GNOME 3 ou supérieur est installé. Dans ce guide, nous illustrerons les éléments suivants :

           Planning the graphical user interface
           Asynchronous calls
           The main program file
           Local library GeoNames
           Autotools and Icons

Après avoir suivi ce tutoriel, vous devriez voir ceci sur votre écran :

# Organisation de l'interface graphique utilisateur

Pour structurer une application pour GNOME 3, vous devez utiliser GTK+. Vous devez aussi vous souvenir que la fenêtre principale ne peut comporter qu'un seul élément graphique, donc organisez votre structure en fonction de cet impératif (dans cet exemple, nous utilisons Gtk.Grid). Une bonne méthode consiste à dessiner la boîte « fenêtre principale » et d'y placer chaque élément graphique nécessaire. En regardant l'image de votre future application, vous pourrez plus facilement déceler les relations existantes entre les éléments graphiques. Par exemple, Gtk.Grid place vos éléments graphiques en fonction des autres, donc la position du premier sur la grille conditionne le placement des autres.

# Appels asynchrones

Avec beaucoup de langages de programmation, toutes les opérations sont exécutées de manière synchrone : quand vous exécutez une action, le programme attend qu'elle soit terminée avant de continuer. Cependant, cette procédure est mal adaptée aux interfaces utilisateurs graphiques, car l'application devient inactive pendant ce temps. La méthode asynchrone (async) est donc beaucoup mieux adaptée dans notre cas, car elle ne bloque pas votre interface pour d'autres actions. Elle rend ainsi votre application plus flexible et mieux armée pour affronter des appels plus longs que prévus, ou qui parfois restent bloqués pour une raison ou une autre. Vous pouvez par exemple utiliser cette méthode pour des accès entrée/sortie de fichiers systèmes et des calculs lents en arrière-plan.

Dans cet exemple, il nous faut obtenir des données de geonames.org. Pendant ce temps, nous voulons que le reste du programme continue à tourner. Si nous utilisions pour cela une application synchrone et que nous n'arrivions pas à avoir une connexion internet fonctionnelle avec le site geonames.org, nous n'obtiendrions aucune donnée et donc nous n'atteindrions jamais la ligne où l'instruction main_quit() est exécutée. Il faudrait alors « tuer » l'application à partir du Terminal.

# Les différentes parties du programme